darktable page lede image
darktable page lede image

Configurando OpenCL para dispositivos AMD/ATI

10.2.6. Configurando OpenCL para dispositivos AMD/ATI

Apesar de dispositivos NVIDIA e a maioria dos dispositivos modernos AMD/ATI funcionarem usualmente sem necessidade de ajustes, há providências a tomar para placas AMD/ATI mais antigas -- aquelas anteriores à série HD7xxx. Começamos com o fato dessas placas reportarem ao darktable somente parte da memória da GPU. Uma placa de 1Gb usualmente reporta 512Mb, um valor que o darktable, em sua configuração padrão, recusa como não sendo suficiente para suas tarefas. Consequência: o dispositivo não será usado.

Na internet você pode encontrar como dica definir a variável de ambiente GPU_MAX_HEAP_SIZE para um valor de 100 neste caso. De fato, isto fará o driver AMD/ATI reportar a memória toda instalada ao darktable. No entanto, há um problema. Em muitas (a maioria?) das placas isto fará os buffers serem alocados em seu computador e não na placa de vídeo! Neste caso todo acesso à memória será feito através de um lento barramento PCIe. Isto terá um custo da ordem de 10x ou mais em desempenho e tornará o OpenCL inútil a você, especialmente quando estiver exportando arquivos.

Outra variável de ambiente que muda o comportamento do driver é GPU_MAX_ALLOC_PERCENT. Você pode definir seu valor em 100 para permitir alocações de memória grandes como 1Gb em sua placa AMI/ATI. O problema é que isto tende a fazer o darktable travar, cedo ou tarde.

Nossa recomendação é deixar esses parâmetros como estão. Muitas vezes sua placa será reconhecida com 512MB de memória. Há três parâmetros de configuração que você pode definir em $HOME/.config/darktable/darktablerc para conseguir que tudo funcione. Aqui estão os detalhes:

opencl_memory_requirement

Defina este parâmetro para 500 para que o darktable aceite sua placa gráfica com 512Mb de memória como sendo suficiente.

opencl_memory_headroom

Este parâmetro controla quando da memória de gráficos (da quantidade reportada) o darktable deveria deixar intocada para que o driver usar. Como para dispositivos AMD/ATI só conseguimos obter metade da RAM disponível, é seguro deixar este parâmetro definido em zero. Assim, todos os 512Mg podem ser usados pelo darktable.

opencl_avoid_atomics

Operações atômicas em OpenCL são uma forma especial de sincronização de dados. Só são usadas em alguns kernels. Infelizmente, alguns (a maioria?) dispositivos AMD/ATI são extremamente lentos ao processar operações atômicas. É melhor processar os módulos afetados na CPU ao invés de aceitar uma CPU ultra-lenta. Defina este parâmetro como TRUE se perceber lentidão em módulos como sombras e realces, monocromático, contraste local, ou mapa de tons global ou se percebe congelamentos intermitentes.

Estas recomendações não se aplicam à série mais recente Radeon HD7xxx com arquitetura GCN. Além de serem mais rápidas em termos de computação em GPU, elas normalmente funcionam sem necessidade de ajustes. Você pode talvez considerar algumas de optimizações de desempenho descritas na próxima seção.