AMD/ATI Geräte
Während NVIDIA-Grafikkarten und die meisten modernen AMD/ATI-Karten häufig out-of-the-box laufen, gibt es bei älteren AMD/ATI-Grafikkarten mehr zu tun. Insbesondere bei denen von vor der HD7xx-Serie. Dies beginnt mit der Tatsache, dass diese Karten nur einen Teil ihres gesamten Speichers an darktable melden. Bei einer 1GB-Karte sind das typischerweise nur 512MB, ein Wert, den darktable in seiner Standardkonfiguration als unzureichend zurückweisen wird. Somit wird die Grafikkarte nicht benutzt.
Im Internet wird empfohlen, die Umgebungsvariable GPU_MAX_HEAP_SIZE
in diesem Fall auf 100 zu setzen. In der Tat veranlasst das den AMD/ATI-Treiber, den gesamten installierten Speicher an darktable zu übergeben. Allerdings gibt es da ein Problem. Bei vielen (den meisten?) Karten wird Pufferspeicher auf dem Rechner (host) und nicht der Grafikkarte zugewiesen. In diesem Fall muss jeglicher Speicherzugriff über den langsamen PCIe-Bus laufen. Der Performanceverlust liegt bei einem Faktor 10 oder mehr und OpenCL wird damit nutzlos, insbesondere beim Export von Bildern.
Eine weitere Umgebungsvariable, die das Verhalten des Treibers ändert ist GPU_MAX_ALLOC_PERCENT
. Du könntest sie auf 100 setzen, um Speicherzuweisungen bis 1GB bei deiner AMD/ATI-Karte zu erlauben. Das Problem ist, dass dies dazu führt, dass darktable früher oder später abstürzt.
Daher ist unsere Empfehlung, diese Einstellungen unverändert zu lassen. Häufig wird deine Karte mit 512MB Gesamtspeicher und einem maximal zuweisbaren Speicher von 128MB erkannt werden. Es gibt drei Konfigurationsparameter, die du in $HOME/.config/darktable/darktablerc
setzen kannst, um die Sache zum Laufen zu bekommen. Hier sind die Details:
- opencl_memory_requirement
- Setze diesen Parameter auf 500, so dass darktable deine Grafikkarte als mit ausreichend Speicher akzeptiert.
- opencl_memory_headroom
- Dieser Parameter kontrolliert, wie viel Grafikspeicher (den die Grafikkarte meldet) darktable für Treiber- und Displaynutzung ungenutzt lassen sollte. Da von AMD/ATI Karten ohnehin nur die Hälfte des vorhandenen RAMs zur Verfügung steht, ist es sicher, diesen Wert auf null zu setzen, sodass die 512 MB vollständig von darktable genutzt werden können.
- opencl_avoid_atomics
- Atomare Operationen sind in OpenCL eine spezielle Methode zur Datensynchronisierung. Sie werden lediglich in wenigen Implementierungen verwendet. Leider sind einige (die meisten?) AMD/ATI Karten extrem langsam bei der Verarbeitung von Atomaren Operationen. In diesem Fall ist es besser, die betroffenen Module auf der CPU arbeiten zu lassen, statt eine ultra-langsame GPU Verarbeitung hinzunehmen. Aus diesem Grund solltest du diesen Parameter auf TRUE setzen, wenn Module wie shadows and highlights, monochrome, local contrast, oder global tonemap (deprecated) sehr langsam arbeiten oder der Rechner zwischenzeitlich nicht mehr reagiert.
Diese Empfehlungen gelten nicht für die neuere Radeon HD7xxx Serie mit der GCN Architektur. Neben der sehr performanten GPU Leistung funktionieren sie in der Regel ohne vorhergehende Massnahmen. Trotzdem kann die Anwendung von einigen der nachfolgend genannten Leistungsoptimierungen vorteilhaft sein.