możliwe problemy i rozwiązania
darktable 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.
W takim przypadku najlepszą rzeczą, jaką można zrobić, jest uruchomienie darktable z konsoli jako darktable -d opencl
'.
Da to dodatkowe wyniki debugowania, dotyczące inicjowania i używania OpenCL. Po pierwsze, jeśli znajdziesz wiersz zaczynający się od [opencl_init] FINALLY...
(ang. wreszcie), który powinien powiedzieć ci, czy obsługa OpenCL jest dostępna, czy nie. Jeśli inicjalizacja nie powiodła się, spójrz na powyższe komunikaty pod kątem treści typu „nie można wykryć” lub „nie można utworzyć”. Sprawdź, czy jest wskazówka, gdzie się nie udało.
Poniżej kilka przypadków, zaobserwowanych w przeszłości:
-
darktable stwierdza, że nie wykryto żadnej karty graficznej obsługującej OpenCL lub że dostępna pamięć na twoim GPU jest zbyt mała i urządzenie jest odrzucane. W takim przypadku być może będziesz musiał kupić nową kartę, jeśli naprawdę chcesz obsługiwać OpenCL.
-
darktable znajduje plik
libOpenCL.so
, ale potem mówi, że nie mógł uzyskać platformy. Sterowniki NVIDIA często podają w tym przypadku kod błędu -1001. Dzieje się tak, ponieważlibOpenCL.so
jest tylko biblioteką opakowującą. Do rzeczywistej pracy należy załadować dalsze biblioteki specyficzne dla dostawcy. Z jakiegoś powodu to się nie udało. Istnieje struktura plików w/etc/OpenCL
w twoim systemie, którąlibOpenCL.so
sprawdza, aby znaleźć te biblioteki. Sprawdź, czy znajdziesz tam coś podejrzanego i spróbuj to naprawić. Często wymagane biblioteki nie mogą być znalezione przez dynamiczny program ładujący twojego systemu. Pomocne może być podanie pełnych nazw ścieżek. -
darktable stwierdza, że nie można było stworzyć kontekstu. To często wskazuje na niezgodność wersji między załadowanym sterownikiem graficznym a biblioteką libOpenCL. Sprawdź, czy ze starszej instalacji pozostały moduły jądra lub biblioteki graficzne i podejmij odpowiednie działania. W razie wątpliwości wykonaj czystą ponowną instalację sterownika karty graficznej. Czasami zaraz po aktualizacji sterownika załadowany sterownik jądra nie pasuje do nowo zainstalowanych bibliotek. W takim przypadku zrestartuj system przed ponowną próbą.
-
darktable ulega awarii podczas uruchamiania. Może się to zdarzyć, jeśli twoja konfiguracja OpenCL jest całkowicie zepsuta lub jeśli twój sterownik/biblioteka zawiera poważny błąd. Jeśli nie możesz tego naprawić, nadal możesz użyć darktable z opcją
--disable-opencl
, która pominie cały krok inicjalizacji OpenCL. -
darktable nie kompiluje swoich plików źródłowych OpenCL w czasie wykonywania. W takim przypadku zobaczysz szereg komunikatów o błędach, które wyglądają jak typowe błędy kompilatora. Może to wskazywać na niezgodność między implementacją OpenCL a interpretacją standardu przez darktable. W takim przypadku zgłoś problem na github, a postaramy się pomóc. Zgłoś również, jeśli zauważysz znaczące różnice między przetwarzaniem obrazu przez procesor i procesor graficzny.
Istnieje również kilka implementacji OpenCL na procesor, dostarczanych jako sterowniki dostarczane przez INTEL lub AMD. Zaobserwowaliśmy, że nie zapewniają one żadnego przyrostu prędkości w porównaniu z naszym ręcznie zoptymalizowanym kodem procesora. Dlatego darktable po prostu domyślnie odrzuca te urządzenia. To zachowanie można zmienić, ustawiając zmienną konfiguracyjną opencl_use_cpu_devices
(w $HOME/.config/darktablerc
) na TRUE
.