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 Web findest du vielleicht einen Tipp, die Umgebungsvariable GPU_MAX_HEAP_SIZE
auf 100 zu setzen, falls dies geschehen ist. In der Tat veranlasst das den AMD/ATI-Treiber den gesamten installierten Speicher an darktable zu melden. Allerdings gibt es da ein Problem. Bei vielen (den meisten?) Karten führt das dazu, dass Puffer deinem Computer (host) und nicht der Grafikkarte zugewiesen werden. In diesem Fall muss jeglicher Speicherzugriff über den langsamen PCIe-Bus laufen. Das führt zu einem Performanceverlust um den Faktor 10x oder mehr und macht OpenCL für dich 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 deines Grafikspeichers (von dem von deiner Karte gemeldeten Grafikspeicher) darktable ungenutzt für Treiber- und Displaynutzung lassen sollte. Da wir für AMD/ATI Karten ohnehin nur die Hälfte des vorhandenen RAMs bekommen, ist es sicher dieses auf null zu setzen, sodass alle 512 MB 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 Schatten und Spitzlichter, Monochrom, Lokaler Kontrast, oder globales Tonemapping (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.