darktable page lede image
darktable page lede image

Możliwe problemy i ich rozwiązania

10.2.5. Możliwe problemy i ich rozwiązania

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.