zur Startseite

Druckausgabe von https://www.bilddateien.de/
bilddateien.de - alles, was mich fotografisch bewegt - Bernhard Albicker

Turbo für darktable: openCL Einrichtung

veröffentlicht am 03.03.2018 - aktualisiert am 22.03.2018

darktable kann GPU-Beschleunigung über OpenCL nutzen, um die Performance zu verbessern. Die Entscheidung der Entwickler, die Verarbeitungsqualität nicht zu beeinträchtigen, hat dazu geführt, dass alle Berechnungen auf 4 x 32bit Fließkommazahlen durchgeführt wurden. Dies ist langsamer als die “gewöhnliche” 8- oder 16-Bit-Integer-Algebra, eliminiert aber alle Probleme mit Tonwertbrüchen oder Informationsverlust.
Durch die kompromißlose Bildqualität wird aber die CPU-Leistung auch modernerer Rechner bei den typischen 16, 20 oder 24 Megapixel-Bildern schnell an ihre Grenzen kommen.

Handoptimierter Programmcode sorgt zwar dafür, daß die Berechnungen trotzdem schnellstmöglich durchgeführt werden, aber Auslagerung von Berechnungen auf andere Prozessoren ermöglicht eine weitere Geschwindigkeitssteigerung.

openCL

Was ist das?

OpenCL (englisch Open Computing Language) ist eine Schnittstelle für uneinheitliche Parallelrechner, die z. B. mit Haupt-, Grafik- oder digitalen Signalprozessoren ausgestattet sind. Durch die Auslagerung von Berechnungen vom Hauptprozessor (CPU) auf die GPU (Prozessor auf der Grafikkarte) können aufwendige Berechnungen erheblich beschleunigt werden.
Das kann z. B. bei der Bearbeitung von großen Digital-Foto-Dateien vorteilhaft ausgenutzt werden.

Benchmark-Ergebnisse mit darktable

Nachdem ich vor einigen Jahren einige Mühe darauf verwandt hatte, einen “Flüster-PC” aufzubauen, habe ich mich jetzt nach der stärksten verfügbaren passiv gekühlten Grafik-Karte umgesehen und bin bei einer Palit GeForce GTX 1050 Ti KalmX fündig geworden. Die Karte hat 4GB RAM.

Palit GeForce GTX 1050 Ti KalmX

Nach Einbau und Treiber-Aktivierung wollte ich dann mal sehen, welche Zeitersparnis erzielbar ist und habe dies mit 3 RAW-Dateien, die unterschiedlich bearbeitet waren, getestet, indem ich diese in voller Größe als .jpg-Dateien exportiert habe:

Format Größe intel Xeon E3-1200 Nvidia GX1050Ti Nvidia / openCL
NEF/D800 36MP 32,3sec 25,6sec 6,9sec
NEF/D700 12MP 8,6sec 7,9sec 1,8sec
ORF/E-P3 12MP 9,8sec 8,7sec 2,3sec

In einer zweiten Auswertung geht es darum, welche der von mir genutzten darktable-Bearbeitungsschritte in diesen Bildern wieviel von openCL profitieren:

Bearbeitungsschritt Größe intel Xeon E3-1200 Nvidia GX1050Ti Nvidia / openCL
Weißabgleich 36MP NEF 0,022sec 0,021sec 0,003sec
Weißabgleich 12MP ORF 0,005sec 0,005sec 0,001sec
RAW-Schwarz/Weißpunkt 36MP NEF 0,032sec 0,022sec 0,019sec
Hochpass 12MP NEF 1,739sec 1,733sec 0,048sec
Perspektivkorrektur 12MP ORF 0,210sec 0,209sec 0,012sec
Schatten und Spitzlichter 12MP ORF 0,222sec 0,204sec 0,046sec
Kontrast Helligkeit Sättigung 12MP ORF 0,125sec 0,119sec 0,080sec
Entrauschen (nicht-lokales Mittel) 36MP NEF 30,12sec 23,32sec 6,46sec
Entrauschen (Profil) 36MP NEF 14,36sec 12,85sec 2,83sec

 

Einrichtung (Debian-basiertes Linux, hier: Linux Mint 18)

Rechner-Hardware

Vor dem Einbau der Grafikkarte meldete der Rechner folgende Hardware-Konfiguration:

System:    Kernel: 4.13.0-32-generic x86_64 (64 bit gcc: 5.4.0)
           Desktop: Cinnamon 3.4.6 (Gtk 3.18.9-1ubuntu3.3)
           Distro: Linux Mint 18.2 Sonya
Machine:   Mobo: ASUSTeK model: P8Z77-M v: Rev 1.xx
           Bios: American Megatrends v: 2003 date: 05/09/2013
CPU:       Quad core Intel Core i5-3570 (-MCP-) cache: 6144 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 27280
           clock speeds: max: 3800 MHz 1: 3410 MHz 2: 3410 MHz 3: 3410 MHz
           4: 3410 MHz
Graphics:  Card: Intel Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
           bus-ID: 00:02.0
           Display Server: X.Org 1.18.4 driver: intel
           Resolution: 1920x1200@59.95hz
           GLX Renderer: Mesa DRI Intel Ivybridge Desktop
           GLX Version: 3.0 Mesa 17.2.4 Direct Rendering: Yes

Treiber und weitere Pakete

Für Nvidia Grafikkarten benötigt man zunächst den proprietären Nvidia-Treiber:

Proprietären Treiber wählen

Zur Nutzung von openCL sind dann noch die beiden CUDA-Pakete notwendig:

sudo apt-get install -y nvidia-cuda-dev  nvidia-cuda-toolkit

Der Rechner meldet nun folgende Hardware:

System:    Kernel: 4.13.0-32-generic x86_64 (64 bit gcc: 5.4.0)
           Desktop: Cinnamon 3.4.6 (Gtk 3.18.9-1ubuntu3.3)
           Distro: Linux Mint 18.2 Sonya
Machine:   Mobo: ASUSTeK model: P8Z77-M v: Rev 1.xx
           Bios: American Megatrends v: 2003 date: 05/09/2013
CPU:       Quad core Intel Core i5-3570 (-MCP-) cache: 6144 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 27279
           clock speeds: max: 3800 MHz 1: 3409 MHz 2: 3409 MHz 3: 3409 MHz
           4: 3409 MHz
Graphics:  Card: NVIDIA Device 1c82 bus-ID: 01:00.0
           Display Server: X.Org 1.18.4 drivers: nvidia (unloaded: fbdev,vesa,nouveau)
           Resolution: 1920x1200@59.95hz
           GLX Renderer: GeForce GTX 1050 Ti/PCIe/SSE2
           GLX Version: 4.5.0 NVIDIA 384.111 Direct Rendering: Yes

Aktivierung in darktable

In den “zentralen Optionen” der darktable-Voreinstellungen muß geprüft werden, ob die Einstellung “OpenCL-Unterstützung aktivieren” bestätigt ist.

openCL-Einstellungen in darktable

“OpenCL-Scheduler-Profil” ermöglicht es, je nach Rechnerkonfiguration die Verteilung der Rechenlast auf Haupt(CPU)- und Grafikprozessor (GPU) auszuwählen.

Optimierung

Manchmal kann es vorkommen, daß openCL Fehler verursacht oder innerhalb darktable wieder deaktiviert wird.

Dazu schreibt der Entwickler Ulrich Pegelow in einem älteren Blogbeitrag

Wenn Sie darktable mit OpenCL-Unterstützung betreiben und eine langsame Verarbeitung vermuten (insbesondere während des Bildexports), starten Sie DT von einer Konsole mit der Option -d opencl neu.

Achten Sie auf Module, die mit einer Fehlermeldung ausfallen. Achten Sie besonders auf den Fehlercode -4; dies ist der Fehler, den wir erhalten, wenn die Speicherzuweisung auf der GPU fehlschlägt. Modul “Equalizer” ist dafür ein heißer Kandidat. (…)

Wenn Sie “-4” Fehler erhalten, gehen Sie in die Datei $HOME/.config/darktable/darktablerc, wo DT seine Konfigurationsparameter speichert und schauen Sie nach opencl_memory_headroom. Dieser Wert gibt darktable an, wie viele Megabyte (von der insgesamt verfügbaren Menge) für Treiber- und Videozwecke frei bleiben sollen. Standardmäßig ist er auf 300MB eingestellt, was mit aktuellen NVIDIA-Karten gut funktioniert. Wenn Sie diesen Wert erhöhen (50er-Schritte sind eine gute Wahl), verringern Sie die Gefahr, dass Sie in Allokationsfehler geraten. Auf der negativen Seite erfordert dies stärkere Kachelungen (mehr, aber kleinere Kacheln), was etwas weniger effizient ist. Am Ende sollten Sie lieber mehr Kacheln als mehr Allokationsfehler in Kauf nehmen!

Die Ausgaben des Terminals können auch direkt auf Festplatte gespeichert werden, dazu wird im Terminal eingegeben (startet darktable und öffnet gleichzeitig das Logfile):

~ $ darktable -d opencl > darktable-log.txt

Die Datei darktable-log.txt kann dann nach der darktable-Sitzung nach evtl. Fehlermeldungen durchsucht werden.

Bei Nvidia-Grafikkarten ist das Tool nvidia-smi eine gute Hilfe, um die Nutzung des Grafikspeichers zu überwachen. Ruft man dieses Tool mit dem Befehl

~ $ watch -n 0,1 nvidia-smi

auf, so werden die Werte 10mal pro Sekunde ausgelesen und aktualisiert. Damit hat man eine gute Chance, auch kurze Speicherverbrauchsspitzen zu erkennen.

Speicherauslastung Grafikkarte Nvidia

Der rot markierte Wert darf dabei zu keinem Zeitpunkt den Gesamtwert des Grafikkarten-Arbeitsspeichers rechts daneben erreichen bzw. überschreiten.
Sollte dies doch der Fall sein, so ist der oben erwähnte Parameter opencl_memory_headroom schrittweise zu erhöhen. Bei mir steht der Wert derzeit bei ‘500’.

Ausführliche Hinweise zur Verwendung von openCL - auch für andere Grafikkarten - finden sich im darktable-Manual im Kapitel 10.2

 

ähnliche Artikel

Disclaimer

Ich kaufe mein fotografisches Werkzeug beim Fotohändler meiner Wahl/meines Vertrauens als normaler Kunde. Wenn ich hier über das von mir eingesetzte Material schreibe, dann geht es dabei um die Erfahrungen, die ich in der praktischen Arbeit damit sammle.
Links zu Bezugsquellen, die ich auf dieser Seite hinterlege, geben dem Leser die Möglichkeit, durch Kauf dieses oder eines anderen Artikels in dem verlinkten Shop zum Unterhalt dieser Seite beizutragen.