Karty NVIDIA oraz większość nowych kart AMD/ATI zadziała od razu, więcej pracy trzeba włożyć w nakłonienie do współpracy starszych kart AMD/ATI, szczególnie modeli wcześniejszych, niż seria HD7xxx. Kłopoty zaczynają się już w momencie raportowania do darktable tylko części dostępnej pamięci GPU. Dla 1GB jest to najczęściej 512MB, czyli wartość, którą program uznaje w standardowej konfiguracji za niewystarczającą do własnych zadań. W rezultacie karta nie zostanie użyta.
W sieci można znaleźć sposób, polegający na ustawieniu w takim przypadku zmiennej GPU_MAX_HEAP_SIZE na wartość 100. I faktycznie, sterownik karty będzie raportował wtedy pełną pamięć do darktable. Jest jednak mały problem. Na wielu – jeśli nie większości – kart spowoduje to alokację buforów na twoim systemie (gospodarzu), a nie na karcie graficznej! W takim przypadku każdy dostęp do pamięci realizowany będzie przez powolną magistralę PCI. Zmniejszy to wydajność około dziesięciokrotnie i sprawi, że render poprzez OpenCL stanie się bezużyteczny, szczególnie podczas eksportu.
Kolejna zmienna środowiskowa, zmieniająca zachowanie sterownika, to GPU_MAX_ALLOC_PERCENT. Możesz ustawić ją na 100, aby pozwolić zaalokować do 1GB pamięci na karcie AMD/ATI. Prędzej czy później takie ustawienie spowoduje jednak awarię darktable.
Radzimy pozostawić te ustawienia bez zmian. Często karta zostanie rozpoznana z 512MB pamięci i maksymalnym rozmiarem alokacji, wynoszącym 128MB. Do poprawnego działania należy wtedy ustawić trzy parametry w pliku $HOME/.config/darktable/darktablerc:
opencl_memory_requirement
Ustaw ten parametr na 500, żeby darktable uznał 512MB pamięci graficznej za wystarczające.
opencl_memory_headroom
Ten parametr pozwala kontrolować, ile pamięci karty graficznej (z wykrywanej puli) powinno pozostać do użytku sterownika i wyświetlacza. Ponieważ dla kart AMD/ATI i tak jesteśmy w stanie wykorzystać tylko połowę dostępnej pamięci, można bezpiecznie ustawić tę wartość na zero. Całość z 512MB zostanie wtedy wykorzystana przez darktable.
opencl_avoid_atomics
Operacje jądra w OpenCL są specjalną metodą synchronizacji danych. Są one używane zaledwie w kilku jądrach. Niestety kilka (większość?) urządzeń AMD/ATI jest dramatycznie wolnych w wykonywaniu takich operacji. Lepiej jest przetworzyć odpowiednie moduły na CPU, niż akceptować dramatycznie powolne operacje GPU. Ustaw ten parametr na TRUE, jeśli doświadczasz zauważalnych opóźnień w takich modułach, jak cienie i światła, monochromatyczność, kontrast lokalny czy globalna mapa kolorów lub jeśli doświadczasz okresowych zawieszeń pracy systemu.
Te rady nie dotyczą najnowszych Radeonów z serii HD7xxx w architekturze GCN. Poza swoją sporą szybkością przetwarzania na GPU, one po prostu działają. Możesz najwyżej rozważyć wypróbowanie niektórych opcji optymalizacyjnych, opisanych w następnym rozdziale.