mogelijke problemen & oplossingen

Darktable detecteert automatisch OpenCL-runtime-fouten. Bij het detecteren van een fout, zal het vervolgens alles op de CPU opnieuw verwerken. Hoewel dit de verwerking vertraagt, mag dit het eindresultaat niet beïnvloeden.

Er kunnen verschillende redenen zijn waarom OpenCL tijdens de initialisatiefase zou kunnen mislukken. OpenCL is afhankelijk van hardwarevereisten en van de aanwezigheid van bepaalde stuurprogramma’s en bibliotheken. Bovendien moeten deze allemaal passen qua maker, model en revisienummer. Als iets niet past (bijv. jouw grafisch stuurprogramma (driver) – geladen als een kernelmodule – komt niet overeen met de versie van jouw libOpenCL.so), is OpenCL-ondersteuning waarschijnlijk niet beschikbaar.

In dit geval kan je darktable het beste starten vanaf een console met darktable -d opencl.

Dit geeft extra foutopsporingsoutput over de initialisatie en het gebruik van OpenCL. Ten eerste, als je een regel vindt die begint met [opencl_init] FINALLY ..., zou dat je moeten vertellen of OpenCL-ondersteuning voor jou beschikbaar is of niet. Als de initialisatie is mislukt, kijk dan in de bovenstaande berichten voor iets dat leest als ‘kon niet worden gedetecteerd’ of ‘kon niet worden gemaakt’. Controleer of er een hint is over waar het is mislukt.

Hier zijn een paar gevallen die in het verleden zijn waargenomen:

  • darktable stelt dat er geen OpenCL-bewuste grafische kaart wordt gedetecteerd of dat het beschikbare geheugen op jouw GPU te laag is en dat het apparaat wordt genegeerd. In dat geval moet je mogelijk een nieuwe kaart kopen als je echt OpenCL-ondersteuning wilt.

  • darktable vindt jouw libOpenCL.so maar vertelt je dan dat het geen platform kon krijgen. NVIDIA-stuurprogramma’s geven in dit geval vaak foutcode -1001. Dit gebeurt omdat libOpenCL.so slechts een wrapper-bibliotheek is. Voor het echte werk moeten nog andere leveranciersspecifieke bibliotheken worden geladen. Dit is om de een of andere reden mislukt. Er is een structuur van bestanden in /etc/OpenCL op jouw systeem die libOpenCL.so raadpleegt om deze bibliotheken te vinden. Kijk of je daar iets vreemds kunt vinden en probeer het te repareren. Vaak kunnen de vereiste bibliotheken niet worden gevonden door de dynamische lader van jouw systeem. Het kan helpen om volledige padnamen te geven.

  • darktable stelt dat er geen context kon worden gemaakt. Dit duidt vaak op een mismatch tussen het geladen grafisch stuurprogramma en libOpenCL. Controleer of je overblijvende kernelmodules of grafische bibliotheken van een oudere installatie hebt en onderneem de juiste actie. Voer bij twijfel een schone herinstallatie van jouw grafisch stuurprogramma uit. Soms komt het geladen kernelstuurprogramma direct na een stuurprogramma-update niet overeen met de nieuw geïnstalleerde bibliotheken. In dit geval start je jouw systeem opnieuw op voordat je het opnieuw probeert.

  • darktable crasht tijdens het opstarten. Dit kan gebeuren wanneer jouw OpenCL-setup volledig kapot is of als jouw stuurprogramma/bibliotheek een ernstige bug bevat. Als je het niet kunt repareren, kan je nog steeds darktable gebruiken met de optie --disable-opencl, die de hele OpenCL-initialisatiestap overslaat.

  • darktable kan zijn OpenCL-bronbestanden tijdens runtime niet compileren. In dit geval ziet je een aantal foutmeldingen die eruitzien als typische compilerfouten. Dit kan wijzen op een incompatibiliteit tussen jouw OpenCL-implementatie en de interpretatie van de standaard door darktable. Stel in dat geval een probleem op github en we zullen proberen te helpen. Rapporteer ook als je significante verschillen ziet tussen CPU- en GPU-verwerking van een afbeelding.

Er bestaan ook enkele on-CPU-implementaties van OpenCL, die worden geleverd als stuurprogramma’s die worden geleverd door INTEL of AMD. We hebben vastgesteld dat ze geen snelheidswinst opleveren in vergelijking met onze met de hand geoptimaliseerde CPU-code. Daarom negeert darktable deze apparaten gewoon standaard. Dit gedrag kan worden gewijzigd door de configuratievariabele opencl_use_cpu_devices (in $HOME/.config/darktablerc) in te stellen op TRUE.

translations