múltiples dispositivos
La programación de dispositivos OpenCL se puede optimizar en la mayoría de los sistemas mediante la configuración del “perfil de programación OpenCL”. Sin embargo, si su sistema está equipado con más de una GPU, es posible que desee establecer manualmente la prioridad relativa del dispositivo. Para hacer esto, debe seleccionar el perfil de programación “predeterminado” y cambiar la configuración en el parámetro de configuración “opencl_device_priority”.
Es importante comprender cómo usa darktable los dispositivos OpenCL. Cada secuencia de procesamiento de una imagen, para convertir una entrada en la salida final utilizando una pila de historial, se ejecuta en un pixelpipe. Hay cuatro tipos diferentes de pixelpipe en darktable. Un tipo es responsable de procesar la vista de la imagen central (o vista completa) en el modo de cuarto oscuro, otro pixelpipe procesa la imagen de vista previa (ventana de navegación). Puede haber uno de cada uno de estos dos pixelpipes ejecutándose en cualquier momento, con los pixelpipes completos y de vista previa ejecutándose en paralelo. Además, puede haber varios píxeles paralelos que realizan exportaciones de archivos, así como varios píxeles paralelos que generan miniaturas. Si hay un dispositivo OpenCL disponible, darktable lo asigna dinámicamente a un pixelpipe específico para una ejecución y luego lo libera.
La demanda computacional varía significativamente según el tipo de pixelpipe que se esté ejecutando. La imagen de vista previa y las miniaturas son de baja resolución y se pueden procesar rápidamente, mientras que procesar la vista de la imagen central es más exigente. Un pixelpipe de exportación completo es aún más exigente.
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...
define los dispositivos que pueden procesar el pixelpipe (completo) de la imagen central. Asimismo, los dispositivos k,l,m...
pueden procesar el pixelpipe de vista previa, los dispositivos o,p,q...
los pixelpipes de exportación y finalmente los dispositivos x,y,z...
los pixelpipes en miniatura. Un campo vacío significa que ningún dispositivo OpenCL puede servir este tipo de pixelpipe.
darktable tiene un sistema de numeración interno, mediante el cual el primer dispositivo OpenCL disponible recibe el número 0. Todos los demás dispositivos se numeran consecutivamente. Este número, junto con el nombre del dispositivo, se muestra cuando inicia darktable con darktable -d opencl
. Puede especificar un dispositivo por número o por nombre (las mayúsculas/minúsculas y los espacios en blanco no importan). Si tiene más de un dispositivo con el mismo nombre, debe usar los números de dispositivo para diferenciarlos.
Un especificador de dispositivo puede tener como prefijo un signo de exclamación !
, En cuyo caso el dispositivo se excluye del procesamiento de un pixelpipe determinado. También puede usar un asterisco *
como comodín, que representa todos los dispositivos que no se mencionaron explícitamente anteriormente en ese grupo.
El orden de secuencia dentro de un grupo es importante – darktable leerá la lista de izquierda a derecha y cada vez que intente asignar un dispositivo OpenCL a un pixelpipe, escaneará los dispositivos en ese orden, tomando el primer dispositivo libre que encuentre.
Si un proceso de pixelpipe está a punto de iniciarse 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 la GPU prefijando la lista de GPU permitidas con un signo más “+”. En este caso, darktable no utilizará la CPU, sino que suspenderá el procesamiento hasta que esté disponible el siguiente dispositivo OpenCL permitido.
el ajuste por defecto de darktable para “opencl_device_priority” es */!0,*/*/*
.
Cualquier dispositivo OpenCL detectado puede procesar la imagen de la vista central. El primer dispositivo OpenCL (0) no puede procesar el pixelpipe de vista previa. Como consecuencia, si solo hay una GPU disponible en su sistema, el pixelpipe de vista previa siempre se procesará en la CPU, manteniendo su única GPU exclusivamente para la vista de imagen central más exigente. Esta es una configuración razonable para la mayoría de los sistemas. No se aplican tales restricciones a la exportación y las miniaturas de píxeles.
El valor predeterminado es una buena opción si solo tiene un dispositivo. Si tiene varios dispositivos, constituye un punto de partida razonable. Sin embargo, como sus dispositivos pueden tener niveles bastante diferentes de potencia de procesamiento, tiene sentido invertir algo de tiempo en optimizar su lista de prioridades.
Aquí hay un ejemplo. Supongamos que tenemos un sistema con dos dispositivos, una Radeon HD7950 rápida y una GeForce GTS450 más antigua y lenta. darktable (comenzado con darktable -d opencl
) 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.
Aquí, la GeForce GTS 450 se detecta como el primer dispositivo y la Radeon HD7950 (‘Tahití’) como el segundo. Este orden normalmente no cambiará a menos que se modifique la configuración del hardware o del controlador, pero es mejor usar nombres de dispositivos en lugar de números para estar seguro.
Dado que GTS450 es más lenta que HD7950, un “opencl_device_priority” optimizado podría ser: !GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*
.
El GTS450 está explícitamente excluido del procesamiento del pixelpipe de la imagen central; esto está reservado para “todos” los demás dispositivos (es decir, el HD7950 / Tahiti). Por el contrario, para el pixelpipe de vista previa, se excluye el Tahiti, por lo que solo el GTS450 puede realizar el trabajo.
Para la exportación de archivos y la generación de miniaturas queremos que todos se pongan manos a la obra. Sin embargo, darktable debería comprobar primero si el dispositivo Tahiti está libre, porque es más rápido. Si no está libre, se verifican todos los demás dispositivos, de hecho solo el GTS450.