Mögliche Probleme und Lösungen

darktable entdeckt OpenCL-Laufzeitfehler automatisch. Wenn es einen Fehler erkennt, wird es alles erneut über die CPU abarbeiten. Während das zwar die Verarbeitungsgeschwindigkeit vermindert, sollte es nicht das Endresultat beeinflussen.

Es gibt unterschiedliche Gründe, warum OpenCL bei der Phase des Aufstarten versagen kann. OpenCL hängt von den Hardware-Anforderungen ab und von gewissen Treibern und Libraries. Zusätzlich müssen alle diese zusammenpassen, was Hersteller, Modell und Revisionsnummer angeht. Falls etwas nicht stimmt (z.B. dein Grafik-Treiber – geladen als Kernel Modul – stimmt nicht mit der Version deines libOpenCL.so), wird OpenCL-Support nicht vorhanden sein.

In einem solchen Fall ist es das Beste darktable von einer Konsole mit darktable -d opencl zu starten.

Das wird zusätzlichen Ausstoß von Fehlersuche für die Aufstartphase und für den Gebrauch von OpenCL ergeben. Als erstes, falls du eine Linie findest, die mit [opencl_init] FINALLY ... findest, sollte das anzeigen, ob OpenCL-Support da ist oder nicht. Falls das Aufstarten misslingt, prüfe bei den Anzeigen nach für etwas wie could not be detected oder could not be created. Prüfe, ob es einen Hinweis gibt, wo etwas falsch lief.

Hier ein paar Fälle, die in der Vergangenheit beobachtet wurden:

  • darktable sagt, es sei keine Grafikkarte, die OpenCL verarbeitet, zu finden oder dass der verfügbare Speicher an deiner GPU zu niedrig ist und die Einheit löscht. In einem solchen Fall mag es sein, dass du eine neue Karte kaufen musst, falls du wirklich OpenCL-Support willst.

  • darktable findet deinen libOpenCL.so, sagt dir dann aber, dass es keine Plattform bekam. NIVIDIA Treiber geben in einem solchen Fall oft den Fehlercode 1001 aus. Das geschieht, weil libOpenCL.so nur eine Wrapper-Library ist. Für das richtige Arbeiten müssen Anbieter-spezifische Libraries geladen werden. Aus irgend einem Grund ging das nicht. ES gibt eine Struktur-Datei /etc/OpenCL auf deinem System, die libOpenCL.so konsultiert, um diese Libraries zu finden. Siehe nach, ob du hier irgendwas Verdächtiges findest und versuche es zu beheben. Oft können die benötigten Libraries durch den dynamischen Lader des Systems nicht gefunden werden. Die Angabe von Pfad-Namen könnte helfen.

  • Darktable zeigt an, dass ein Anwendungsfall (context) nicht erstellt werden konnte. Häufig zeigt dies eine Diskrepanz zwischen dem geladenen Grafiktreiber und libOpenCL an. Überprüfe, ob Du noch Überbleibsel von älteren Kernel-Modulen oder Grafikbibliotheken aus älteren Installationen hast und unternimm dann die entsprechenden Schritte. Im Zweifel führe eine saubere Deinstallation deines Grafiktreibers durch. Manchmal, direkt nach einem Treiberupdate, passt der geladene Kernel-Treiber nicht zu den neu installierten Bibliotheken. In diesem Fall reboote dein System bevor du es erneut versuchst.

  • darktable stürzt während des Starts ab. Dies kann passieren, wenn dein OpenCL-Setup komplett beschädigt ist, oder wenn dein Treiber/Bibliothek einen schweren bug enthält. Wenn du das nicht reparieren kannst, ist es immer noch möglich darktable mit der Option --disable-opencl, was den gesamten OpenCL-Initialisierungsschritt überspringt, zu starten

  • darktable misslingt seine OpenCL-Quelldateien zur Laufzeit zu kompilieren. In diesem Fall wirst Du einige Fehlermeldungen sehen, die wie typische Compiler-Fehlermeldungen aussehen. Dies kann eine Inkompatibilität zwischen deiner OpenCL-Implementation und darktables Interpretation des Standards anzeigen. In diesem Fall bringe den Fall bitte an github und wir hoffen dir helfen können. Bitte berichte auch, wenn du signifikante Unterschiede zwischen der CPU- und GPU-Verarbeitung eines Bildes siehst.

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.

Translations