darktable page lede image
darktable page lede image

OpenCL für AMD/ATI-Geräte einrichten

10.2.6. OpenCL für AMD/ATI-Geräte einrichten

Während NVIDIA-Geräte und die meisten modernen AMD/ATI-Geräte meist out of the box" laufen, gibt es für ältere AMD/ATI-Grafikkarten mehr zu tun, nämlich solche vor der HD7xxx-Serie. Das fängt damit an, dass diese Geräte nur einen Teil ihres gesamten GPU-Speichers an Darktable melden. Für ein 1GB-Gerät sind das typischerweise 512MB, ein Wert, den darktable in seiner Standardkonfiguration als nicht ausreichend für seine Aufgaben ablehnt. Folge: Das Gerät wird nicht benutzt.

Im Web finden Sie als Tipp, die Umgebungsvariable GPU_MAX_HEAP_SIZE in diesem Fall auf einen Wert von 100 zu setzen. In der Tat führt dies dazu, dass der AMD/ATI-Treiber den vollen installierten Speicher an Darktable meldet. Es gibt jedoch ein Problem. Auf vielen (den meisten?) Karten führt dies dazu, dass Puffer auf Ihrem Computer (Host) zugewiesen werden, nicht auf der Grafikkarte! In diesem Fall müssen alle Speicherzugriffe über den langsamen PCIe-Bus erfolgen. Dies kostet Sie einen Faktor von 10x oder mehr in der Performance und macht OpenCL für Sie nutzlos, besonders beim Exportieren von Dateien.

Eine weitere Umgebungsvariable, die das Verhalten des Treibers verändert, ist GPU_MAX_ALLOC_PERCENT. Sie können diesen Wert auf 100 setzen, um Speicherzuweisungen von bis zu 1 GB auf Ihrer AMD/ATI-Karte zu ermöglichen. Das Problem ist, dass dies dazu führt, dass Darktable früher oder später abstürzt.

Wir empfehlen, diese Einstellungen nicht zu verändern. Oftmals wird Ihre Karte mit 512MB Speicher und einer maximalen Allokationsgröße von 128MB erkannt. Es gibt drei Konfigurationsparameter, die Sie in der Datei $HOME/.config/darktable/darktablerc setzen, um die Dinge zum Laufen zu bringen. Hier sind die Details:

opencl_memory_requirement

Setzen Sie diesen Parameter auf 500, damit Darktable Ihren 512MB Grafikspeicher als ausreichend im Speicher akzeptiert.

opencl_memory_headroom

Dieser Parameter legt fest, wie viel Grafikspeicher (aus dem gemeldeten) darktable für die Verwendung durch den Fahrer und das Display unangetastet bleiben soll. Was AMD/ATI-Geräte angeht, so können wir sowieso nur die Hälfte des verfügbaren RAMs bekommen, es ist sicher, dies auf null zu setzen. Somit können alle 512MB von Darktable genutzt werden.

opencl_avoid_atomics

Die Atom-Operationen in OpenCL sind eine besondere Art der Datensynchronisation. Sie werden nur in wenigen Kernen verwendet. Leider sind einige (die meisten?) AMD/ATI-Geräte extrem langsam in der Verarbeitung von Atomen. Es ist besser, die betroffenen Module auf der CPU zu verarbeiten, als einen extrem langsamen GPU-Codepfad zu akzeptieren. Setzen Sie diesen Parameter auf TRUE, wenn Sie eine langsame Verarbeitung von Modulen wie Schatten und Blitzlichter, Monochrom, localer Kontrast, or globalesTonemapping oder Ihnen wird gelegentlich das System hängen bleiben.

Diese Empfehlungen gelten nicht für die neuere Radeon HD7xxx-Serie mit GCN-Architektur. Abgesehen davon, dass sie in Sachen GPU-Computing sehr schnell sind, laufen sie in der Regel out of the box. Sie sollten nur einige der Optionen zur Performanceoptimierung ausprobieren, die im folgenden Abschnitt beschrieben werden.