darktable identificherà automaticamente eventuali problemi nell'esecuzione di OpenCL. In questo caso tutto verrà riprocessato attraverso la CPU: solamente la velocità di esecuzione ne risentirà, il risultato sarà esattamente lo stesso.
Possono essere diversi i motivi che impediscono la buona riuscita della fasi di inizializzazione di OpenCL. Tutto dipende dall'hardware e dalla presenza di certi drivers e librerie. Inoltre tutto deve combinarsi in modo perfetto in base al produttore, al modello e alla suo numero di revisione. Se qualcosa non dovesse combaciare, ovvero il vostro driver grafico (caricato come un modulo del kernel) non dovesse accettare la versione del vostro libOpenCL.so, il supporto ad OpenCL potrebbe non essere disponibile.
In questo caso vi suggeriamo di avviare darktable da console con
darktable -d opencl
In questo modo avrete molte informazioni relative all'inizializzazione e al debug di OpenCL. Prima di tutto cercate una riga che inizia con «[opencl_init] FINALLY ...»: da qui capirete se il supporto ad OpenCL sul vostro sistema è disponibile oppure no. Se l'inizializzazione fallisce cercate, nel messaggio qui sopra, qualcosa simile a «could not be detected» oppure «could not be created». Cercate se esiste una soluzione al problema riscontrato.
Qualche caso che si è verificato in passato:
darktable potrebbe segnalare che per la vostra scheda video non è disponibile alcun supporto OpenCL oppure che la memoria disponibile sulla vostra GPU è poca e che, pertanto, il dispositivo non può essere utilizzato. In questo caso dovreste acquistare una nuova scheda video se veramente volete sfruttare il supporto OpenCL.
darktable potrebbe trovare il file libOpenCL.so ma informarvi che non è in grado di rilevare una piattaforma. I drivers NVIDIA danno spesso degli errori - in questo caso il 1001. Questo accade perché libOpenCL.so è solamente una libreria involucro. Il vero lavoro lo faranno altre librerie - specifiche per produttore, modello e driver - che devono essere caricate ma che, per svariati motivi, possono fallire. In /etc/OpenCL c'è una struttura di files che OpenCL.so consulta per trovare queste librerie. Verificate se trovate qualcosa di strano qui e tentate di risolverlo. Spesso le librerie non vengono trovate dal caricatore dinamico del vostro sistema. Fornendo un percorso completo può aiutare.
darktable potrebbe anche segnalare che non è in grado di creare un contesto. Questo spesso significa che c'è un conflitto di versioni tra i drivers grafici (caricati) e libOpenCL. Verificate se sul vostro sistema sono rimasti vecchi moduli del kernel o librerie grafiche di una vecchia installazione e agite di conseguenza. Nel dubbio reinstallate da zero i vostri drivers grafici. A volte, subito dopo un aggiornamento dei drivers, il kernel caricato non riconosce le librerie appena installate: in questo caso è sufficiente riavviare il sistema.
darktable potrebbe andare in crash all'avvio, anche se in casi molto rari. Questo può accadere se la vostra installazione di OpenCL è completamente inutilizzabile o se i drivers/librerie contengono dei bug gravi. Se non riuscite a risolvere in alcun modo potete sempre avviare darktable con l'opzione «--disable-opencl» che non avvierà l'intero processo di inizializzazione di OpenCL.
darktable potrebbe non riuscire a compilare i sorgenti di OpenCL all'avvio. In questo caso riceverete diversi errori che sono molto simili ai classici errori dei normali compilatori di sorgenti. Questo potrebbe stare a significare che c'è incompatibilità tra la vostra implementazione di OpenCL e la nostra interpretazione di ciò che è standard. In questo caso contattateci a darktable-dev@lists.darktable.org riportando il vostro specifico problema. Quasi sicuramente saremo in grado di aiutarvi. Informateci anche se trovate differenze importanti tra l'elaborazione delle immagini con la GPU piuttosto che con la CPU!
Ci sono anche alcune implementazioni di OpenCL dedicate a particolari CPU che vengono fornite come drivers da Intel o AMD. Abbiamo osservato che questi drivers non forniscono nessun vantaggio reale in termini di velocità rispetto al nostro codice ottimizzato a mano. Per questo motivo queste particolari schede grafiche vengono normalmente ignorate. Potete in ogni momento modificare questo comportamento impostando la variabile di configurazione opencl_use_cpu_devices in TRUE.