darktable automatycznie wykryje problemy wykonania OpenCL. Następnie przetworzy wszystko ponownie na CPU; wpłynie to tylko na prędkość, końcowy rezultat powinien być bezpieczny.
OpenCL może nie wystartować poprawnie z wielu powodów. Musimy polegać na wymaganiach sprzętowych oraz na obecności określonych sterowników i bibliotek. A to wszystko musi jeszcze spełnić warunki brzegowe producenta i numeru wersji. Jeśli cokolwiek nie pasuje, na przykład sterownik grafiki (ładowany jako moduł jądra) nie pasuje numerem wersji do twojego libOpenCL.so, wsparcie dla OpenCL nie będzie raczej dostępne.
W takim przypadku najlepiej uruchomić darktable z konsoli z parametrem
darktable -d opencl
To powinno dać dodatkową informację diagnostyczną, dotyczącą inicjalizacji i użycia OpenCL. Najpierw zobacz, czy możesz znaleźć linię zaczynającą się od „[opencl_init] FINALLY ...” To powinno wskazać, czy wsparcie dla OpenCL jest dostępne, czy nie. Jeśli inicjalizacja nie powiodła się, spójrz na komunikaty powyżej i znajdź cokolwiek zawierające frazę „could not be detected” (nie mogło być wykryte) lub „could not be created” (nie mogło zostać utworzone). Sprawdź, czy masz dodatkowe wskazówki o miejscu wystąpienia błędu.
Oto kilka przykładów, zaobserwowanych w przeszłości:
darktable powie być może, że nie wykryto żadnej karty, obsługującej OpenCL, lub że pamięci na karcie jest zbyt mało i karta została odłączona. W takim przypadku, jeśli naprawdę chcesz skorzystać ze wsparcia OpenCL, musisz zainwestować w nową kartę.
darktable mógł najpierw znaleźć twoją bibliotekę libOpenCL.so, a następnie zasygnalizować, że nie może znaleźć platformy. Sterowniki NVIDIA zgłaszają wtedy często błąd -1001. Dzieje sie tak, ponieważ libOpenCL.so jest jedynie wrapperem. Do dalszej pracy potrzebuje bibliotek, specyficznych dla dostawcy, urządzenia i sterownika. Z jakiegoś powodu to zawiodło. LibOpenCL.so sprawdza strukturę plików w /etc/OpenCL w celu znalezienia tych bibliotek. Sprawdź, czy tam nie ma niczego podejrzanego i spróbuj to ewentualnie naprawić. Często potrzebne biblioteki nie mogą być znalezione przez dynamiczny loader w twoim systemie. Tutaj może pomóc podawanie pełnych ścieżek do plików.
darktable może również stwierdzić, że nie da się utworzyć kontekstu. Taki komunikat często wskazuje na niezgodność wersji pomiędzy (załadowanym) sterownikiem grafiki a libOpenCL. Sprawdź, czy gdzieś nie zalegają stare moduły jądra albo biblioteki graficzne po poprzednich instalacjach i podejmij odpowiednią akcję. W razie wątpliwości, przeinstaluj od nowa sterownik grafiki. Czasem bezpośrednio po aktualizacji sterownika, załadowany sterownik jądra nie pasuje do świeżo zainstalowanych bibliotek; na to może pomóc restart systemu.
darktable w niewielu przypadkach może ulec awarii przy starcie. Może się tak stać, kiedy OpenCL jest źle skonfigurowane lub gdy sterownik/biblioteka zawierają poważny błąd. Jeśli nie potrafisz tego naprawić, uruchom darktable z opcją „--disable-opencl”, która podczas startu pominie inicjalizację OpenCL.
darktable może nie dać rady skompilować swoich plików źródłowych OpenCL w trakcie przebiegu programu. W takim przypadki dostaniesz listę błędów, podobnych do błędów kompilacji. Może to wskazywać na niekompatybilność pomiędzy naszymi implementacjami OpenCL. W takim przypadku odwiedź nas na IRC #darktable na FreeNode lub na liście dystrybucyjnej deweloperów, darktable-dev@lists.darktable.org i opisz problem. Prawdopodobnie pomożemy. Daj znać również, jeśli zauważysz znaczące różnice pomiędzy przetwarzaniem obrazu na CPU i GPU!
Istnieje również kilka implementacji OpenCL na procesor. Są dostępne jako sterowniki od Intela bądź AMD. Nasze obserwacje nie pokazują szczególnego wzrostu szybkości w porównaniu do naszego kodu, ręcznie optymalizowanego pod CPU. Dlatego też domyślnie go wyłączamy. To zachowanie można zmienić, ustawiając parametr opencl_use_cpu_devices na TRUE.