opencl

za kulisami

Przetwarzanie zdjęć w wysokiej rozdzielczości jest złożonym zadaniem, wymagającym dobrego komputera. Rozpatrując pamięć i moc obliczeniową procesora, zaawansowana obróbka 15-, 20- czy 25-megapikselowego zdjęcia może szybko doprowadzić twój komputer na skraj jego możliwości.

Wymagania Ansel nie są wyjątkiem. Wszystkie obliczenia są wykonywane na 4 x 32-bitowych liczbach zmiennoprzecinkowych. Jest to wolniejsze od „zwykłej” 8 lub 16-bitowej algebry liczb całkowitych, ale eliminuje wszystkie problemy z przerwami tonacji lub utratą informacji.

Podjęto wiele optymalizacji, aby uczynić Ansel tak szybkim, jak to możliwe. Jeśli uruchomisz aktualną wersję Ansel na nowoczesnym komputerze, możesz nie zauważyć żadnej powolności. Istnieją jednak warunki i pewne moduły, w których poczujesz (lub usłyszysz – wycie wentylatora procesora) ciężar zadań, z którymi musi się zmagać twój biedny wielordzeniowy procesor.

sposób działania opencl

Jak możesz sobie wyobrazić, architektura sprzętowa procesorów graficznych może się znacznie różnić. Istnieją różni producenci, a nawet różne generacje procesorów graficznych tego samego producenta mogą nie być porównywalne. Jednocześnie producenci procesorów graficznych zwykle nie ujawniają publicznie wszystkich szczegółów sprzętowych swoich produktów. Jedną z konsekwencji tego jest konieczność używania własnościowych sterowników pod Linuksem, jeśli chcesz w pełni wykorzystać swoją kartę graficzną.

Fortunately an industry consortium lead by The Khronos Group has developed an open, standardized interface called OpenCL, which allows your GPU to be used as a numerical processing device. OpenCL offers a C99-like programming language with a strong focus on parallel computing. An application that wants to use OpenCL will need OpenCL source code that it hands over to a hardware-specific compiler at run-time. This way applications can use OpenCL on different GPU architectures (even at the same time). All of the hardware “secrets” are hidden in this compiler and are normally not visible to the user (or the application). The compiled OpenCL code is loaded onto your GPU and – with certain API calls – it is ready to perform calculations for you.

aktywacja opencl w Ansel

Korzystanie z OpenCL w Ansel wymaga, aby twój komputer był wyposażony w odpowiednią kartę graficzną i wymagane biblioteki. Większość nowoczesnych kart graficznych firm NVIDIA i AMD ma pełną obsługę OpenCL. Kompilator OpenCL jest zwykle dostarczany jako część własnościowego sterownika graficznego i jest używany jako biblioteka dynamiczna o nazwie libOpenCL.so. Ta biblioteka musi znajdować się w folderze, w którym może być znaleziona przez dynamiczny linker twojego systemu.

Po uruchomieniu Ansel najpierw spróbuje znaleźć i załadować libOpenCL.so, a jeśli się powiedzie, sprawdzi, czy dostępna karta graficzna obsługuje OpenCL. Aby Ansel mógł korzystać z GPU, musi być dostępna wystarczająca ilość pamięci graficznej (1 GB+). Jeśli to sprawdzenie zakończy się pomyślnie, Ansel spróbuje skonfigurować swoje środowisko OpenCL: należy zainicjować kontekst przetwarzania, uruchomić kolejkę obliczeniową, pliki kodu źródłowego OpenCL (rozszerzenie to .cl) muszą zostać odczytane i skompilowane oraz dołączone procedury (jądra OpenCL) muszą być przygotowane na moduły Ansel. Jeśli to wszystko zakończy się pomyślnie, przygotowania są zakończone.

konfiguracja opencl

Ogromna różnorodność systemów i wyraźne różnice między dostawcami OpenCL a wersjami sterowników uniemożliwiają kompleksowy przegląd konfiguracji OpenCL. Możemy podać tylko przykład, w tym przypadku dla wersji sterownika NVIDIA 331.89 w systemie Ubuntu 14.04. Mamy nadzieję, że będzie to podstawowe wprowadzenie i pomoże rozwiązać wszelkie problemy, związane z konfiguracją.

Zasada działania funkcji OpenCL wygląda następująco:

Ansel > libOpenCL.so > libnvidia-opencl.so.1 > moduł(y) sterownika jądra > GPU

  • Ansel dynamically loads libOpenCL.so – a system library that must be accessible to the system’s dynamic loader (ld.so).

możliwe problemy i rozwiązania

Ansel automatycznie wykryje błędy uruchomieniowe OpenCL. Po wykryciu błędu ponownie przetworzy wszystko na procesorze. Chociaż spowolni to przetwarzanie, nie powinno to wpłynąć na wynik końcowy.

Może istnieć wiele przyczyn niepowodzenia OpenCL podczas fazy inicjalizacji. OpenCL zależy od wymagań sprzętowych oraz obecności określonych sterowników i bibliotek. Ponadto wszystkie muszą pasować pod względem producenta, modelu i numeru wersji. Jeśli coś nie pasuje (np. twój sterownik graficzny – załadowany jako moduł jądra – nie pasuje do wersji twojego libOpenCL.so), obsługa OpenCL prawdopodobnie nie będzie dostępna.

profil szeregowania

Ansel can use the CPU and one or several OpenCL capable GPUs. Depending on the relative performance of these devices, users can choose among certain scheduling profiles to optimize performance. This is achieved by setting the configuration parameter Preferences > Processing > CPU, GPU, Memory > OpenCL scheduling profile, which offers the following choices:

default
If an OpenCL-capable GPU is found Ansel uses it for processing the center image view while the navigation preview window is processed on the CPU in parallel. This is the preferred setting for systems with a reasonably fast CPU and a moderately fast GPU. The exact allocation of devices to the various pixelpipe types can be finetuned with the “opencl_device_priority” configuration parameter (see multiple devices).
bardzo szybki GPU
Z tym profilem szeregowania Ansel przetwarza sekwencyjnie widok środkowego obrazu i okno podglądu na GPU. Jest to preferowane ustawienie w przypadku systemów z procesorem graficznym, który znacznie przewyższa procesor.
wiele GPU
To ustawienie dotyczy systemów z wieloma procesorami GPU, których względna wydajność nie różni się znacząco. Za każdym razem, gdy uruchamiane jest zadanie przetwarzania, Ansel używa aktualnie nieaktywnego procesora graficznego, ale nie procesora. Użytkownicy systemów z różnymi procesorami graficznymi będą potrzebować lepszej kontroli nad ich względnym priorytetem. Lepiej byłoby, gdyby wybrali „domyślny” profil i dostroili swój system za pomocą parametru konfiguracyjnego „opencl_device_priority” (patrz wiele urządzeń).

On first start-up or after any detected change in the GPU configuration of your system Ansel tries to identify the best suited profile for you. You can change it at any time in Preferences > Processing > CPU, GPU, Memory.

wiele urządzeń

Szeregowanie urządzeń OpenCL można zoptymalizować w większości systemów za pomocą ustawień „profil szeregowania OpenCL”. Jeśli jednak twój system jest wyposażony w więcej niż jeden procesor graficzny, możesz ręcznie ustawić względny priorytet urządzenia. W tym celu należy wybrać „domyślny” profil planowania i zmienić ustawienia w parametrze konfiguracyjnym „opencl_device_priority”.

Ważne jest, aby zrozumieć, w jaki sposób Ansel korzysta z urządzeń OpenCL. Każda sekwencja przetwarzania obrazu — aby przekonwertować dane wejściowe na końcowy wynik przy użyciu stosu historii — jest uruchamiana w kolejce przetwarzania. W Ansel są cztery różne kolejki. Jedna odpowiada za przetwarzanie centralnego widoku obrazu (lub pełnego widoku) w trybie ciemni, inna przetwarza obraz podglądu (okno nawigacji). W dowolnym momencie może być uruchomiony jedna z tych dwóch kolejek, przy czym kolejki pełne i podglądowe działają równolegle. Ponadto może istnieć wiele równoległych kolejek, wykonujących eksport plików, a także wiele równoległych kolejek, generujących miniatury. Jeśli urządzenie OpenCL jest dostępne, Ansel dynamicznie przypisuje je do jednej konkretnej kolejki na jeden przebieg i zwalnia go później.

opencl wciąż u mnie nie działa

As has been mentioned, OpenCL systems come with a huge variety of setups: different GPU manufacturers and models, varying amounts of GPU memory, different drivers, different distributions etc..

Wiele potencjalnych problemów pojawi się tylko w przypadku bardzo konkretnych kombinacji tych czynników. Ponieważ programiści Ansel mają dostęp tylko do niewielkiej części tych odmian zrozum, że możemy nie być w stanie rozwiązać twojego konkretnego problemu. Niewiele możemy zrobić, jeśli nie będziemy w stanie odtworzyć sytuacji, w której pojawia się błąd.

Search

You can also ask Chantal, the AI search engine.