Mögliche Probleme und Lösungen
darktable entdeckt OpenCL-Laufzeitfehler automatisch. Nach einem Fehler wird alles erneut über die CPU berechnet. Das verringert zwar die Verarbeitungsgeschwindigkeit, sollte aber nicht das Endergebnis ändern.
Es gibt unterschiedliche Gründe, warum OpenCL während der Initialisierung fehlschlägt. OpenCL hängt von den Hardware-Anforderungen ab und von gewissen Treibern und Bibliotheken. Zusätzlich müssen alle diese hinsichtlich Hersteller, Modell und Revisionsnummer zusammenpassen. Falls etwas nicht stimmt (z.B. der Grafiktreiber, als Kernel Modul geladen, passt nicht zur Version der libOpenCL.so
), wird eine OpenCL-Unterstützung wohl nicht verfügbar sein.
In einem solchen Fall ist es das Beste, darktable in einer Konsole mit darktable -d opencl
zu starten.
Dies liefert zusätzliche Debugging-Informationen zur Intialisierung und Verwendung von OpenCL. Zunächst zeigt eine Zeile, die mit [opencl_init] FINALLY ...
beginnt, ob OpenCL-Unterstützung vorhanden ist oder nicht. Falls die Initialisierung misslingt, hilft die Suche nach Meldungen der Art could not be detected
oder could not be created
, und der Hinweis dort, was falsch lief.
Hier ein paar Fälle, die in der Vergangenheit beobachtet wurden:
-
darktable stellt fest, das keine Grafikkarte mit OpenCL-Unterstützung gefunden wurde oder der verfügbare Speicher der Grafikkarte zu gering ist, und die Karte wird verworfen. In einem solchen Fall sollte eine neue Karte gekauft werden, falls wirklich eine OpenCL-Unterstützung gewünscht ist.
-
darktable findet deine
libOpenCL.so
, sagt dir dann aber, dass es keine Plattform bekommen hat. NIVIDIA Treiber geben in einem solchen Fall oft den Fehlercode -1001 aus. Das passiert, weillibOpenCL.so
nur eine Wrapper-Library ist. Für die tatsächliche Arbeit müssen weitere anbieterspezifische Bibliotheken geladen werden. Aus irgend einem Grund hat das nicht geklappt. Es gibt auf deinem System innerhalb von/etc/OpenCL
eine Dateistruktur , dielibOpenCL.so
konsultiert, um diese Bibliotheken zu finden. Siehe dort nach, ob du irgend etwas Verdächtiges findest und versuche es zu beheben. Häufig findet der dynamische Lader einfach die benötigten Bibliotheken nicht. Die Angabe von kompletten Pfadnamen könnte dann schon helfen. -
darktable stellt fest, dass ein Anwendungsfall (context) nicht erzeugt werden konnte. Häufig besteht dann ein Versionskonflikt zwischen dem geladenen Grafiktreiber und der libOpenCL. Ursache können Reste älterer Kernel-Modulen oder Grafikbibliotheken aus früheren Installationen hast sein, die beseitigt werden müssen. Im Zweifel sollte der Grafiktreibers saubere desinstalliert werden. Manchmal, direkt nach einem Treiber-Update, passt der geladene Kernel-Treiber nicht zu den neu installierten Bibliotheken, und das System sollte – vor allen weiteren Versuchen – neugestartet werden.
-
darktable stürzt während des Starts ab. Dies kann passieren, wenn die OpenCL-Installation komplett beschädigt ist, oder wenn der/die Treiber/Bibliothek einen schweren Fehler enthält. Wenn das nicht behebbar ist, bleibt nur die Möglichkeit, darktable mit der Option
--disable-opencl
zu starten, die den gesamten OpenCL-Initialisierungsschritt weglässt. -
darktable kann seine OpenCL-Quelldateien zur Laufzeit nicht kompilieren. In diesem Fall sind einige Fehlermeldungen zu sehen, die wie typische Compiler-Fehlermeldungen aussehen. Dies kann auf eine Inkompatibilität zwischen der OpenCL-Implementation und darktables Interpretation des Standards anzeigen hinweisen. In diesem Fall den Fehler bitte auf github berichten,und wir werden versuchen, zu helfen. Bitte auch berichten, wenn signifikante Unterschiede zwischen der CPU- und GPU-Verarbeitung eines Bildes zu sehen sind.
Es gibt auch einige OpenCL-Anwendungen auf CPU, sie kommen als Treiber von INTEL oder AMD. Wir haben beobachtet, dass diese keinen Gewinn an Schnelligkeit im Vergleich zu unseren CPU-kodierten Einheiten erbringen. Deshalb löscht darktable diese als Standard. Dieses Verhalten kann geändert werdenn, indem die Konfiguration-Variable opencl_use_cpu_devices
(in $HOME/.config/darktablerc
) auf TRUE
.