La programación de dispositivos OpenCL en la mayoría de los sistemas típicos se puede optimizar utilizando la configuración de “Perfil de programación OpenCL”. Sin embargo, si su sistema está equipado con varias GPU, es posible que desee establecer la prioridad relativa del dispositivo manualmente. Para hacerlo, debe seleccionar el perfil de programación “predeterminado” y realizar la configuración en el parámetro de configuración “opencl_device_priority”.
It is important to understand how darktable uses OpenCL devices. Each processing sequence of an image – to convert an input to the final output using a certain history stack – is run in a so called pixelpipe. There are four different types of pixelpipe in darktable. One type is responsible to process the center image view (or full view) in darkroom mode, another pixelpipe processes the preview image (navigation window) top left in darkroom mode. Of each of these two pixelpipe there can be one at a time – with the full and the preview pixelpipe running in parallel. In addition there can be multiple parallel pixelpipes doing file exports and there can be multiple parallel pixelpipes generating thumbnails. If an OpenCL device is available darktable dynamically allocates it to one specific pixelpipe for one run and releases it afterwards.
La demanda computacional depende mucho del tipo de la tubería del pixel. La imagen de vista previa y las miniaturas tienen una resolución baja y se pueden procesar rápidamente; la vista central de la imagen es más exigente, aparte de la tubería del pixel que realiza una exportación de archivos.
El parámetro de configuración “opencl_device_priority” contiene una cadena con la siguiente estructura:
a,b,c.../k,l,m.../o,p,q.../x,y,z...
Cada letra representa un dispositivo OpenCL específico. Hay cuatro campos en la cadena de parámetros separados por una barra, cada uno representando un tipo de pixelpipe. “a,b,c...” definen los dispositivos que tienen permitido procesar el pixelpipe de la imagen central (completa). Dispositivos similares “k,l,m...” pueden procesar el pixelpipe de vista previa, los dispositivos “o,p,q...” el pixelpipe de exportado y finalmente, los dispositivos “x,y,z...” el pixelpipe de las miniaturas. Un campo vacío significa que ningún dispositivo OpenCL servirá a este tipo de pixelpipe.
darktable has an internal numbering system, where the first available OpenCL device will receive number “0”. All further devices are numbered consecutively. This number together with the device name is displayed when you start darktable with “darktable -d opencl”. You can specify a device either by number or by name (upper/lower case and whitespace do not matter). If you have more than one device – all with the same name – you need to use the device numbers in order to differentiate them.
Un especificador de dispositivo puede tener como prefijo un signo de exclamación “!”, en cuyo caso el dispositivo queda excluido del procesamiento de este pixel. También puede dar un asterisco “*” como comodín, que representa todos los dispositivos no mencionados explícitamente en ese grupo.
El orden de secuencia dentro de un grupo importa. darktable leerá la lista de izquierda a derecha y cuando intente asignar un dispositivo OpenCL a un pixelpipe, escaneará los dispositivos en ese orden, tomando el primer dispositivo que encuentre.
Si está a punto de iniciarse un proceso de la tubería del pixel y todas las GPU del grupo correspondiente están ocupadas, darktable procesa automáticamente la imagen en la CPU de forma predeterminada. Puede imponer el procesamiento de GPU fijando previamente la lista de GPU permitidas con el signo más “+”. darktable no utilizará la CPU, sino que suspenderá el proceso hasta que esté disponible el siguiente dispositivo OpenCL permitido.
La configuración por defecto de darktable para “opencl_device_priority” es:
*/!0,*/*/*
Cualquier dispositivo OpenCL detectado puede procesar nuestra imagen de vista central. El primer dispositivo OpenCL (0) no tiene permiso para procesar la vista previa de la tubería del pixel. Como consecuencia, si su sistema solo posee una GPU, la vista previa de la tubería del pixel siempre se procesará en la CPU, manteniendo su GPU única y exclusivamente para la vista de imagen central más demandante. Este es un ajuste razonable para la mayoría de los sistemas. No se aplican restricciones a la exportación y la imagen en miniatura.
Los ajustes por defecto son una buena elección si solo tiene un dispositivo. Si tiene varios dispositivos le dará un punto de partida razonable. Sin embargo, como sus dispositivos quizás tengan distintos niveles de poder de procesamiento, tiene sentido invertir un poco en analizar y optimizar su lista de prioridades.
Aquí tiene un ejemplo. Asumamos que tiene un sistema con dos dispositivos, una Radeon HD7950 rápida y una vieja y lenta GeForce GTS450. darktable (iniciado con “darktable -d opencl”) le reportará los siguientes dispositivos:
[opencl_init] successfully initialized. [opencl_init] here are the internal numbers and names of OpenCL devices available to darktable: [opencl_init] 0 'GeForce GTS 450' [opencl_init] 1 'Tahiti' [opencl_init] FINALLY: opencl is AVAILABLE on this system.
Así que la GeForce GTS 450 será detectada como primer dispositivo; la Radeon HD7950 ('Tahiti') como el segundo. Este orden usualmente no cambiará a menos que el hardware o la configuración del dispositivo sean modificados. Pero es mejor utilizar nombres de dispositivos en vez de números para estar sobre seguros.
Como la GTS450 es mas lenta que la HD7950, un opencl_device_priority optimizado se podría ver así:
!GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*
La GTS450 está excluida explícitamente de realizar el pixelpipe de la imagen central; esto se reserva a “todos” los otros dispositivos (i.e. el HD7950/Tahiti). Esto es completamente opuesto a nuestro pixelpipe de vista previa. Aquí el Tahiti será excluido, para que la GTS450 pueda realizar el trabajo.
For file export and thumbnail generation we want all hands on deck. However, darktable should first look if device Tahiti is free, because it's faster. If that's not the case, all other devices – in fact only the GTS450 – are checked.