darktable page lede image
darktable page lede image

Configurando OpenCL para dispositivos AMD/ATI

10.2.6. Configurando OpenCL para dispositivos AMD/ATI

Mientras que los dispositivos NVIDIA y la mayoría de los dispositivos AMD/ATI funcionarán usualmente de paquete, hay mas por hacer sobre las antiguas tarjetas gráficas AMD/ATI, especialmente aquellas anteriores a la serie HD7xxx. Esto comienza con el hecho de que dichos dispositivos solo le reportarán a darktable parte de su memoria GPU total. Para dispositivos de 1GB esto se muestra usualmente como 512MB, un valor que darktable rechazará en sus configuraciones básicas ya que no es suficiente para sus tareas. Consecuencia: El dispositivo no se utilizará.

Quizás pueda encontrar en la web consejos para configurar la variable ambiental GPU_MAX_HEAP_SIZE a un valor de 100 para este caso. De hecho esto causará que el driver AMD/ATI le reporte la memoria completa instalada. Sin embargo, hay un problema. ¡En varias (¿Casi todas?) las tarjetas esto causará que el buffer sea asignado a su computador (huésped) y no sobre la tarjeta de video! En este caso, todos los accesos a la memoria tendrán que pasar por el lento bus PCIe. Esto tendrá un costo de 10x en términos de desempeño y el renderizado de OpenCL no tendrá utilidad para usted, especialmente al exportar archivos.

Otra variable de entorno que cambia el comportamiento del driver es GPU_MAX_ALLOC_PERCENT. Usted puede configurar este valor a 100 para permitir una mayor asignación de memoria tan alta como 1GB en su tarjeta AMD/ATI. El problema es que esto tiende a causar que darktable falle tarde o temprano.

Nuestra recomendación es que deje estos ajustes sin tocar. Usualmente su tarjeta será reconocida con una memoria de 512MB y un tamaño de asignación máximo de 128MB. Hay tres parámetros de configuración que puede ajustar en $HOME/.config/darktable/darktablerc para que las cosas funcionen. Aquí tiene los detalles:

opencl_memory_requirement

Ajuste este parámetro a 500 para que darktable acepte su memoria gráfica de 512 MB como suficiente memoria.

opencl_memory_headroom

Este parámetro controla cuanta memoria gráfica (fuera de la reportada) darktable tendrá que dejar sin tocar para el driver y que sea utilizada por el monitor. Para los drivers AMD/ATI solo podemos disponer de la mitad de la RAM disponible, es seguro ajustar este valor a cero. Así que los 512MB completos pueden ser utilizados por darktable.

opencl_avoid_atomics

Las operaciones atomic en OpenCL son una forma especial de sincronización de datos. Solo se utilizan en unos pocos kernels. Desafortunadamente, algunos (¿la mayoría?) de los dispositivos AMD/ATI son extremadamente lentos para procesar atomics. Es mejor procesar los módulos afectados en el CPU que aceptar una ruta extremadamente lenta del GPU. Ajuste este parámetro a VERDADERO si experimenta un procesamiento lento en módulos como sombras y luces altas, monocromo, contraste local, o mapeo tonal global o si experimenta congelamientos intermitentes del sistema.

Estas recomendaciones no aplican a las series más recientes Radeon HD7xxx con arquitectura GCN. Además de ser muy rápido en términos de computo GPU, normalmente funcionan de paquete. Quizás solo deba considerar probar algunas opciones para optimizar el desempeño, las cuales son descritas en la sección a continuación.