darktable page lede image
darktable page lede image

Possíveis problemas e soluções

10.2.5. Possíveis problemas e soluções

O darktable detectará problemas de run-time do OpenCL automaticamente. Ele irá então reprocessar tudo na CPU; somente a velocidade é afetada, o resultado final não deverá ser comprometido.

Pode haver muitas razões pelas quais o OpenCL falha durante a fase de inicialização. Dependemos de requisitos de hardware e da presença de certos drivers e bibliotecas. Além disso, todos estes devem combinar, em termos de fabricante, modelo e número de revisão. Se alguma coisa não combinar -- por exemplo se seu driver de gráficos (carregado como módulo do kernel) não combina com a versão da sua libOpenCL.so -- o suporte a OpenCL provavelmente não estará disponível.

Neste caso, o melhor é iniciar o darktable no console com

darktable -d opencl

Isto dará saída adicional de depuração sobre a inicialização e uso do OpenCL. Primeiro veja se você encontra uma linha que começa com [opencl_init] FINALLY ... Isto deveria te informar se o suporte a OpenCL está disponível ou não. Se a inicialização falhou, veja as mensagens acima para qualquer coisa que se pareça com could not be detected ou could not be created. Cerifique se há alguma dica sobre onde foi a falha.

Aqui estão alguns casos observados no passado:

  • O darktable pode te dizer que nenhuma placa gráfica com suporte a OpenCL foi detectada ou que a memória disponível na sua GPU é muito pouca e que o dispositivo foi descartado. Neste caso, você pode ter que comprar uma placa nova, se realmente quiser suporte a OpenCL.

  • O darktable pode encontrar seu libOpenCL.so mas então te dizer que não conseguiu uma plataforma. Os drivers da NVIDIA muitas vezes retornam um código de erro -1001 neste caso. Isto acontece porque a libOpenCL.so é só uma biblioteca wrapper. Para o trabalho de verdade ser feito outras bibliotecas - específicas para fabricante, dispositivo e driver - precisam ser carregadas. Isto falhou por algum motivo. Há uma estrutura de arquivos em /etc/OpenCL no seu sistema, que a libOpenCL.so consulta para obter estas bibliotecas. Verifique se encontra algo estranho lá e tente resolver. Frequentemente as bibliotecas não são achadas pelo dynamic loader do seu sistema. Dar caminhos completos pode ajudar.

  • O darktable também pode te dizer que um contexto não pode ser criado. Isto indica que as versões do driver de gráfico e da libOpenCL não combinam. Verifique se você tem módulos de kernel antigos ou bibliotecas gráficas de instalações antigas e corrija a situação. Se estiver em dúvida, reinstale seu driver de placa gráfica novamente. Algumas vezes, imediatamente depois de uma atualização de driver gráfico, o driver carregado no kernel pode não combinar com a biblioteca recentemente instalada: nesta caso reinicie o sistema.

  • O darktable pode travar em alguns casos muito raros durante a inicialização. Isto pode acontecer se seu setup de OpenCL está completamente quebrado ou se o driver ou a biblioteca contém algum bug severo. Se não puder resolver o problema, pode ainda pode iniciar o darktable com a opção --disable-opencl, que pulará totalmente a inicialização do OpenCL.

  • O darktable pode não conseguir compilar seus fontes OpenCL em tempo de execução. Neste caso, você verá um número de mensagens parecendo com típicos erros de compilação. Isto pode indicar incompatibilidade entre a sua implementação de OpenCL e nossa interpretação do padrão. Neste caso visite-nos no canal IRC #darktable no FreeNode ou na lista de emails de desenvolvedores em darktable-dev@lists.darktable.org e reporte o problema. Há boas chances de conseguirmos te ajudar. por favor, reporte também se você perceber diferenças significativas entre o processamento de uma imagem pela CPU e pela GPU!

Também há algumas implementações em-CPU de OpenCL. Estas vem com drivers providos pela INTEL ou AMD. Nós observamos que elas não dão nenhum ganho de desempenho comparando com nosso código otimizado para CPU. Assim, simplesmente descartamos esses dispositivos por default. Este comportamento pode ser mudado definindo a variável de configuração opencl_use_cpu_devices como TRUE.