Die Planung von OpenCL-Geräten auf den meisten typischen Systemen kann mit den Einstellungen „OpenCL-Scheduling-Profil“ optimiert werden. Wenn Ihr System jedoch mit einer Vielzahl von Grafikprozessoren ausgestattet ist, können Sie die relative Gerätepriorität manuell einstellen. Dazu müssen Sie das Profil „default“ Scheduling-Profil auswählen und Ihre Einstellungen im Konfigurationsparameter „opencl_device_priority“ vornehmen.
Es ist wichtig zu verstehen, wie darktable OpenCL-Geräte verwendet. Jede Verarbeitungssequenz eines Bildes – um einen Input mit Hilfe eines bestimmten History-Stacks in die finale Ausgabe zu konvertieren – wird in einer so genannten Pixelpipe ausgeführt. Es gibt vier verschiedene Arten von Pixelpipe in darktable. Ein Typ ist dafür verantwortlich, die zentrale Bildansicht (oder Vollansicht) im Dunkelkammer-Modus zu bearbeiten, ein anderer Pixelpipe verarbeitet das Vorschaubild (Navigationsfenster) oben links im Dunkelkammer-Modus. Von jeder dieser beiden Pixelpfeifen kann es eine nach der anderen geben – wobei die Voll- und die Vorschau-Pixelpfeife parallel laufen. Zusätzlich kann es mehrere parallele Pixelpipes geben, die Dateien exportieren, und es kann mehrere parallele Pixelpipes geben, die Miniaturansichten erzeugen. Wenn ein OpenCL-Gerät verfügbar ist, weist darktable es dynamisch einem bestimmten Pixelpipe für einen Lauf zu und gibt es anschließend frei.
Der Rechenaufwand hängt stark vom Pixelpipe-Typ ab. Vorschaubild und Thumbnails haben eine niedrige Auflösung und können schnell verarbeitet werden; die Ansicht des mittleren Bildes ist anspruchsvoller, ganz zu schweigen von der Pixelpipe, die einen Dateiexport durchführt.
Der Konfigurationsparameter „opencl_device_priority“ enthält einen String mit folgender Struktur:
a,b,c.../k,l,m.../o,p,q.../x,y,z...
Jeder Buchstabe steht für ein bestimmtes OpenCL-Gerät. Es gibt vier Felder im Parameterstring, die durch einen Schrägstrich getrennt sind und jeweils einen Pixelpipe-Typ repräsentieren. „a,b,c...“ definiert die Geräte, die das mittlere Bild (volle) Pixelpipe verarbeiten dürfen. Ebenso können Geräte „k,l,m...“ die Vorschau-Pixelpipes verarbeiten, Geräte „o,p,q...“ die Exportpixelpipes und schließlich Geräte „x,y,z...“ die Thumbnail-Pixelpipes. Ein leeres Feld bedeutet, dass kein OpenCL-Gerät diesen Pixelpipe-Typ bedienen darf.
darktable hat ein internes Nummerierungssystem, bei dem das erste verfügbare OpenCL-Gerät die Nummer „0“ erhält. Alle weiteren Geräte werden fortlaufend nummeriert. Diese Nummer wird zusammen mit dem Gerätenamen angezeigt, wenn Sie darktable mit „darktable -d opencl“ starten. Sie können ein Gerät entweder nach Nummer oder nach Name spezifizieren (Groß-/Kleinschreibung und Leerzeichen spielen keine Rolle). Wenn Sie mehr als ein Gerät – alle mit demselben Namen – haben, müssen Sie die Gerätenummern verwenden, um sie zu unterscheiden.
Einem Gerätespezifikator kann ein Ausrufezeichen „!“ vorangestellt werden, in diesem Fall wird das Gerät von der Verarbeitung dieser Pixelpipe ausgeschlossen. Sie können auch ein Sternchen „*“ als Platzhalter angeben, das alle Geräte repräsentiert, die in dieser Gruppe nicht explizit erwähnt wurden.
Die Reihenfolge innerhalb einer Gruppe ist entscheidend. darktable liest die Liste von links nach rechts und jedes Mal, wenn es versucht, einem Pixelpipe ein OpenCL-Gerät zuzuordnen, scannt es die Geräte in dieser Reihenfolge und nimmt das erste freie Gerät, das es findet.
Wenn ein Pixelpipe-Prozess gestartet werden soll und alle GPUs der entsprechenden Gruppe belegt sind, verarbeitet darktable standardmäßig automatisch das Bild auf der CPU. Sie können die GPU-Verarbeitung erzwingen, indem Sie der Liste der erlaubten GPUs ein Pluszeichen voranstellen: „+. darktable wird nicht die CPU verwenden, sondern die Verarbeitung unterbrechen, bis das n“
Die Standardeinstellung von darktable für „opencl_device_priority“ ist:
*/!0,*/*/*
Jedes erkannte OpenCL-Gerät darf unser zentrales Ansichtsbild verarbeiten. Das erste OpenCL-Gerät (0) darf die Vorschau-Pixelpipe nicht verarbeiten. Folglich, wenn nur ein Grafikprozessor im Besitz Ihres Systems ist, wird die Vorschau-Pixelpipe immer auf der CPU verarbeitet, sodass Ihr einzelner Grafikprozessor ausschließlich für die anspruchsvollere Ansicht des mittleren Bildes verwendet wird. Dies ist eine sinnvolle Einstellung für die meisten Systeme. Für den Export und die Miniaturansichten von Pixelpipes gibt es keine Einschränkungen.
Die Standardeinstellung ist eine gute Wahl, wenn Sie nur ein Gerät haben. Wenn Sie mehrere Geräte haben, bildet es einen vernünftigen Ausgangspunkt. Da Ihre Geräte jedoch sehr unterschiedliche Rechenleistungen haben können, ist es sinnvoll, einige Überlegungen anzustellen und Ihre Prioritätenliste zu optimieren.
Hier ist ein Beispiel. Nehmen wir an, wir haben ein System mit zwei Geräten, einer schnellen Radeon HD7950 und einer älteren und langsameren GeForce GTS450. darktable (gestartet mit „darktable -d opencl“) meldet die folgenden Geräte:
[opencl_init] successfully initialized. [opencl_init] here are the internal numbers and names of OpenCL devices available to darktable: [opencl_init] 0 'GeForce GTS 450' [opencl_init] 1 'Tahiti' [opencl_init] FINALLY: opencl is AVAILABLE on this system.
So wird die GeForce GTS 450 als erstes Gerät erkannt, die Radeon HD7950 ('Tahiti') als zweites. Diese Reihenfolge ändert sich normalerweise nicht, es sei denn, die Hardware- oder Treiberkonfiguration wird geändert. Aber es ist besser, Gerätenamen statt Nummern zu verwenden, um auf der sicheren Seite zu sein.
Da das GTS450 langsamer ist als die HD7950, könnte eine optimierte opencl_device_priority aussehen:
!GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*
Das GTS450 ist explizit von der Verwendung der Pixelpipe in der Bildmitte ausgeschlossen; dies ist für „alle“ anderen Geräten (z. B. HD7950/Tahiti) vorbehalten. Ganz im Gegenteil für unsere Vorschau-Pixelpipe. Hier ist das Tahiti ausgeschlossen, sodass nur der GTS450 die Arbeit verrichten darf.
Für den Dateiexport und die Erzeugung von Thumbnails benötigen wir alle Hände an Deck. Allerdings sollte darktable zuerst nachsehen, ob das Gerät Tahiti frei ist, denn es ist schneller. Ist dies nicht der Fall, werden alle anderen Geräte – eigentlich nur das GTS450 – überprüft.