Turbo für darktable: openCL Einrichtung
veröffentlicht am 03.03.2018 - aktualisiert am 22.03.2018 in * PROGRAMME * SOFTWARE *
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:
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-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 nachopencl_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.
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
1006 Worte - Lesezeit: 5 Minute(n)
weitere Artikel

Adobe aus allen Wolken?
30.10.2019 Zwei Meldungen gehen dieser Tage wieder durch die Medien, die meine Zweifel an Cloud- und Abo-Modellen nicht gerade zerstreuen helfen. Beide betreffen zwar 'nur' Adobe, aber wenn man weiterdenkt ...

Paßt der Aufbau meiner Homepage zur Ausstattung meiner Besucher?
31.12.2020 Ab und an schaue ich mir an, welche Browser, Bildschirmgrößen und Betriebssysteme die Besucher meiner Homepage nutzen - schließlich muß ja sichergestellt sein, daß diese Besucher auch was Sinnvolles sehen können ...

Licht und Hintergrund: kleine Ursache, große Wirkung
03.08.2020 Zwei Bilder, selbes Motiv, Aufnahmeabstand 30 Sek. - und die Bildwirkung ist komplett unterschiedlich ...

Taschenkamera 2019 - was macht der Minox-Ersatz?
12.12.2019 Seit Anbeginn der Digitalfotografie (gemeint ist mein persönlicher Einstieg) bin ich auf der Suche nach einem adäquaten Ersatz für meine 'Vollformat-Taschenkamera' Minox 35GT. Wo stehe ich heute mit meiner Suche?
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.
Affiliate-Links
Links zu Bezugsquellen, die ich auf dieser Seite hinterlege, geben dem Leser die Möglichkeit, Genaueres zum jeweiligen Artikel in den dort veröffentlichten Produktbeschreibungen zu erfahren.
Einzelne dieser Links sind speziell gekennzeichnet (siehe Liste unten), sog. "affiliate links". Der Leser hat durch Nutzung eines solchen Links die Möglichkeit, durch Kauf des verlinkten oder auch eines anderen Artikels in dem betreffenden Shop zum Unterhalt dieser Seite beizutragen, indem ich bei einem Kauf eine kleine Provision erhalte.
Derzeit arbeite ich mit folgenden Shops zusammen:
- Augenblicke-eingefangen GbR, 18057 Rostock