darktable page lede image
darktable page lede image

Multiple OpenCL devices – manual settings

10.2.9. Multiple OpenCL devices – manual settings

The scheduling of OpenCL devices on most typical systems can be optimized using the OpenCL scheduling profile settings. However, if your system is equipped with a variety of GPUs you might want to set the relative device priority manually. To do so you need to select the default scheduling profile and do your settings in the opencl_device_priority configuration parameter.

Es importante entender como darktable utiliza los dispositivos OpenCL. Cada secuencia de procesamiento de una imagen – para convertir una entrada a una salida final utilizando un historial de acciones determinado – también se ejecuta en los llamados pixelpipe. Hay cuatro tipos diferentes de pixelpipe en darktable. Un tipo es el responsable de procesar la vista central de la imagen (o vista previa completa) en el modo de cuarto oscuro, otro pixelpipe procesa la vista previa de la imagen (la ventana de navegación) en la parte superior izquierda del modo de cuarto oscuro. De estos dos pixelpipes, solo puede funcionar uno a la vez – con el pixelpipe de vista previa completa o normal corriendo en paralelo. Adicionalmente, pueden existir múltiples pixelpipes en paralelo realizando el exportado de los archivos y pueden existir múltiples pixelpipes en paralelo generando las miniaturas. Si un dispositivo OpenCL está disponible, darktable lo asignará dinámicamente a un pixelpipe específico para una ejecución y luego lo liberará.

The computational demand depends a lot on the pixelpipe type. Preview image and thumbnails have a low resolution and can be processed quickly; center image view is more demanding, let alone the pixelpipe doing a file export.

Configuration parameter opencl_device_priority holds a string with the following structure:

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 tiene un sistema interno de numeración, donde el primer dispositivo OpenCL disponible recibirá un número 0. Todos los demás dispositivos serán numerados consecutivamente. Este número junto con el nombre del dispositivo, se muestra cuando inicia darktable con darktable -d opencl. Puede especificar un dispositivo bien sea por su número o su nombre ( las mayúsculas/minúsculas y espacios no importan). Si tiene más de un dispositivo – todos con el mismo nombre – necesitará utilizar el número del dispositivo para poder diferenciarlos.

A device specifier can be prefixed with an exclamation mark !, in which case the device is excluded from processing this pixelpipe. You can also give an asterisk * as a wildcard, representing all devices not mentioned explicitly before in that group.

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.

If a pixelpipe process is about to be started and if all GPUs in the corresponding group are busy, darktable automatically processes the image on the CPU by default. You can enforce GPU processing by prefixing the list of allowed GPUs with a plus sign +. darktable will not use the CPU but rather suspend processing until the next allowed OpenCL device is available.

darktable's default setting for opencl_device_priority is:

*/!0,*/*/*

Any detected OpenCL device is allowed to process our center view image. The first OpenCL device (0) is not allowed to process the preview pixelpipe. As a consequence, if there is only one GPU owned by your system, preview pixelpipe will always be processed on CPU, keeping your single GPU exclusively for the more demanding center image view. This is a reasonable setting for most systems. No restrictions apply to export and thumbnail pixelpipes.

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.

Para los archivos exportados y la generación de miniaturas, queremos tener las manos sobre la masa. Sin embargo, darktable primero deberá verificar si el dispositivo Tahiti está disponible, porque es mas rápido. Si ese no es el caso, todos los otros dispositivos – solo la GTS450 de fábrica – serán verificados.