darktable page lede image
darktable page lede image

Mögliche Probleme und Lösungen

10.2.5. Mögliche Probleme und Lösungen

darktable erkennt OpenCL-Laufzeitprobleme automatisch. Es wird dann alles auf der CPU nachbearbeitet; nur die Geschwindigkeit wird beeinflusst, das Endergebnis sollte nicht gefährdet werden.

Es kann verschiedene Gründe dafür geben, dass OpenCL während der Initialisierungsphase fehlschlägt. Wir sind abhängig von den Hardware-Anforderungen und dem Vorhandensein bestimmter Treiber und Bibliotheken. Außerdem müssen alle diese in Bezug auf Herstellermodell und Revisionsnummer passen. Wenn etwas nicht passt, z. B. Ihr Grafiktreiber (als Kernelmodul geladen) nicht mit der Version Ihrer libOpenCL.so übereinstimmt, ist die OpenCL-Unterstützung wahrscheinlich nicht verfügbar.

In diesem Fall ist es ratsam darktable mit folgendem Befehl von einer Konsole aus zu starten.

darktable -d opencl

Dadurch erhalten Sie zusätzliche Debugging-Ausgaben über die Initialisierung und Verwendung von OpenCL. Zuerst sehen Sie, ob Sie eine Zeile finden, die mit [opencl_init] FINALLY... beginnt. Dies sollte Ihnen sagen, ob OpenCL-Unterstützung für Sie verfügbar ist oder nicht. Wenn die Initialisierung fehlgeschlagen ist, schauen Sie sich die obigen Meldungen an, um etwas zu finden, das sich wie konnte nicht erkannt werden oder konnte nicht erstellt werden. Überprüfen Sie, ob es einen Hinweis darauf gibt, wo es fehlgeschlagen ist.

Hier sind einige Fälle, die in der Vergangenheit beobachtet wurden:

  • darktable teilt ihnen mit, dass keine OpenCL-fähige Grafikkarte erkannt wird oder dass der verfügbare Speicher auf der GPU zu gering ist und das Gerät abgelegt wird. In diesem Fall müssen Sie eventuell eine neue Karte kaufen, wenn Sie wirklich OpenCL-Unterstützung wünschen.

  • darktable findet Ihre libOpenCL.so sagt Ihnen dann aber, dass es keine Plattform bekommen konnte. NVIDIA-Treiber geben in diesem Fall oft den Fehlercode -1001 an. Dies geschieht, weil libOpenCL.so nur eine Wrapper-Bibliothek ist. Für die eigentliche Arbeit müssen weitere Bibliotheken – spezifisch für Hersteller, Gerät und Treiber – geladen werden. Dies ist aus irgendeinem Grund fehlgeschlagen. Es gibt eine Struktur von Dateien in /etc/OpenCL auf Ihrem System, die libOpenCL.so konsultiert, um diese Bibliotheken zu finden. Überprüfen Sie, ob Sie etwas verdächtiges darin finden und versuchen Sie, es zu reparieren. Oftmals können die benötigten Bibliotheken vom Dynamic Loader Ihres Systems nicht gefunden werden. Die Angabe vollständiger Pfadnamen könnte hilfreich sein.

  • darktable meldet, dass ein Kontext nicht erstellt werden konnte. Dies deutet oft auf eine Versionsfehlanpassung zwischen (geladenem) Grafiktreiber und libOpenCL hin. Überprüfen Sie, ob Sie noch übriggebliebene Kernelmodule oder Grafikbibliotheken einer älteren Installation haben und ergreifen Sie entsprechende Maßnahmen. Im Zweifelsfall sollten Sie eine saubere Neuinstallation des Grafiktreibers durchführen. Manchmal stimmt der geladene Kernel-Treiber unmittelbar nach einem Treiber-Update nicht mit den neu installierten Bibliotheken überein: Starten Sie in diesem Fall Ihr System neu.

  • darktable kann in sehr seltenen Fällen direkt beim Start abstürzen. Dies kann passieren, wenn Ihr OpenCL-Setup komplett defekt ist oder wenn Treiber/Bibliothek einen schwerwiegenden Fehler enthält. Wenn Sie es nicht reparieren können, können Sie darktable mit der Option --disable-opencl verwenden, die den gesamten OpenCL-Initialisierungsschritt überspringt.

  • darktable kann es möglicherweise nicht schaffen, seine OpenCL-Quelldateien zur Laufzeit zu kompilieren. In diesem Fall erhalten Sie eine Reihe von Fehlermeldungen, die wie typische Compilerfehler aussehen. Dies könnte auf eine Inkompatibilität zwischen Ihrer OpenCL-Implementierung und unserer Interpretation des Standards hinweisen. In diesem Fall besuchen Sie uns im IRC in #darktable auf FreeNode oder auf der Entwickler-Mailingliste unter darktable-dev@lists.darktable.org und melden Sie das Problem. Die Chancen stehen gut, dass wir Ihnen helfen können. Bitte berichten Sie auch, wenn Sie signifikante Unterschiede zwischen CPU- und GPU-Verarbeitung eines Bildes feststellen!

Es gibt auch einige On-CPU-Implementierungen von OpenCL. Diese kommen als Treiber von INTEL oder AMD. Wir haben beobachtet, dass sie uns keinen Geschwindigkeitsgewinn gegenüber unserem handoptimierten CPU-Code bringen. Deshalb verwerfen wir diese Geräte einfach standardmäßig. Dieses Verhalten kann geändert werden, indem die Konfigurationsvariable opencl_use_cpu_devices auf TRUE gesetzt wird.