darktable detectará problemas en las rutinas de OpenCL de forma automática. Si esto sucede, re-procesará todo en el CPU; solo la velocidad se verá afectada, el resultado final no se verá afectad.
Pueden existir varias razones por las cuales OpenCL podría fallar durante la fase de inicialización. Dependemos de los requerimientos de hardware y sobre la presencia de ciertos drivers y librerías. Adicionalmente, todos estos tienen que encajar en los términos del modelo del fabricante y el número de revisión. Si algo no cuadra, e.g. su driver gráfico (cargado en los módulos del kernel) no coincide con la versión de su libOpenCL.so, entonces el soporte OpenCL no estará disponible.
En ese caso, lo mejor que puede hacer es iniciar darktable desde la consola con
darktable -d opencl
Esto le dará una salida adicional de depuración sobre la inicialización y uso de OpenCL. Primero vea si encuentra una línea que inicie con “[opencl_init] FINALLY ...” Esto le debería indicar, si el soporte OpenCL está disponible o no. Si la inicialización falla, mire los mensajes y busque algo que diga “no se pudo detectar” o “no se pudo crear”. Revise si hay una pista sobre la razón del fallo.
Aquí tiene algunos casos observados en el pasad:
darktable quizás le indique que no se ha detectado una tarjeta gráfica con OpenCL o que la memoria disponible de su GPU es muy bajo, y por ende, el dispositivo será descartado. En ese caso, quizás necesite comprar una tarjeta nueva, si realmente quiere el soporte OpenCL.
darktable might find your libOpenCL.so but then tell you that it couldn't get a platform. NVIDIA drivers will often give error code -1001 in that case. This happens because libOpenCL.so is only a wrapper library. For the real work further libraries – specific to vendor, device and driver – need to be loaded. This failed for some reason. There is a structure of files in /etc/OpenCL on your system that libOpenCL.so consults to find these libraries. Check if you find something fishy in there and try to fix it. Often the needed libraries cannot be found by your system's dynamic loader. Giving full path names might help.
darktable quizás también le diga que un contexto no pudo ser creado. Esto indica usualmente una diferencia de versión entre los drivers gráficos (cargados) y libOpenCL. Revise si tiene módulos de kernel sobrantes o librerías gráficas de alguna instalación antigua, y tome las acciones apropiadas. En caso de duda, haga una instalación fresca de sus drivers gráficos. A veces, inmediatamente luego de la actualización de un driver, el driver cargado del kernel no coincidirá con las librerías recién instaladas: en dicho caso, reinicie su sistema.
darktable quizás se cuelgue en raras ocasiones de forma directa durante el inicio. Esto puede suceder si su configuración de OpenCL está completamente rota o si driver/library contiene errores severos, Si no puede solucionarlo, aún puede utilizar darktable con la opción “--disable-opencl”, la cual se saltará completamente el paso de inicialización de OpenCL.
darktable quizás falle al compilar sus propias fuentes OpenCL al iniciar. En dicho caso, obtendrá un número de mensajes de error que lucirán como un típico error de compilación. Esto le indicará una incompatibilidad entre su implementación de OpenCL y nuestros estándares de interpretación. En este caso, visítenos en IRC en #darktable en Freenode o en la lista de correo de desarrolladores darktable-dev@lists.darktable.org y reporte el problema. Hay altas probabilidades de que podamos ayudarle. ¡Por favor, también reporte cualquier diferencia significativa entre las imágenes procesadas por su CPU y GPU!
También existen algunas implementaciones sobre CPU para OpenCL. Estas vienen como drivers provistos por INTEL o AMD. Hemos observado que no ganamos velocidad sobre nuestro código CPU optimizado manualmente. Por ende, descartamos estos dispositivos por defecto. Este comportamiento puede ser cambiado al ajustar la variable de configuración opencl_use_cpu_devices a VERDADERO (TRUE).