possíveis problemas e soluções
O darktable detectará erros de tempo de execução OpenCL automaticamente. Ao detectar um erro, ele irá reprocessar tudo na CPU. Embora isso retarde o processamento, não deve afetar o resultado final.
Podem haver vários motivos para o OpenCL falhar durante a fase de inicialização. O OpenCL depende dos requisitos de hardware e da presença de certos controladores e bibliotecas. Além disso, todos eles devem se ajustar em termos de fabricante, modelo e número de revisão. Se algo não estiver correto (por exemplo, seu controlador gráfico – carregado como um módulo do kernel – não corresponde à versão de seu libOpenCL.so
), o suporte a OpenCL provavelmente não estará disponível.
Neste caso, a melhor coisa a fazer é iniciar o darktable de um console com darktable -d opencl
.
Isso fornecerá saída de depuração adicional sobre a inicialização e o uso do OpenCL. Inicialmente, se você encontrar uma linha que começa com [opencl_init] FINALLY ...
, esta linha deve dizer se o suporte OpenCL está disponível para você ou não. Se a inicialização falhou, procure nas mensagens acima algo como could not be detected
ou could not be created
. Verifique se há uma dica sobre onde ele falhou.
Aqui estão alguns casos que foram observados no passado:
-
O darktable afirma que nenhuma placa gráfica compatível com o OpenCL foi detectada ou que a memória disponível em sua GPU está muito baixa e o dispositivo foi descartado. Nesse caso, você pode precisar comprar uma nova placa se realmente quiser o suporte ao OpenCL.
-
O darktable encontra seu
libOpenCL.so
, mas informa que não conseguiu obter uma plataforma. Os drivers NVIDIA geralmente fornecem o código de erro -1001 neste caso. Isso acontece porquelibOpenCL.so
é apenas uma biblioteca wrapper. Para o trabalho real, outras bibliotecas específicas do fornecedor precisam ser carregadas. Isso falhou por algum motivo. Existe uma estrutura de arquivos em/etc/OpenCL
em seu sistema que alibOpenCL.so
consulta para encontrar essas bibliotecas. Veja se consegue encontrar algo suspeito ali e tente consertar. Frequentemente, as bibliotecas necessárias não podem ser encontradas pelo carregador dinâmico de seu sistema. Fornecer nomes de caminhos completos pode ajudar. -
O darktable afirma que não foi possível criar um contexto. Isso geralmente indica uma incompatibilidade de versão entre o controlador gráfico carregado e o libOpenCL. Verifique se você deixou módulos do kernel ou bibliotecas gráficas de uma instalação mais antiga e tome as medidas adequadas. Em caso de dúvida, execute uma reinstalação limpa do controlador gráfico. Às vezes, imediatamente após uma atualização de controlador, o controlador de kernel carregado não corresponde às bibliotecas recém-instaladas. Neste caso reinicie o seu sistema antes de tentar novamente.
-
O darktable trava durante a inicialização. Isso pode acontecer se a configuração do OpenCL estiver completamente corrompida ou se o controlador/biblioteca contiver um bug grave. Se você não puder consertar, você ainda pode usar o darktable com a opção
--disable-opencl
, que irá pular toda a etapa de inicialização do OpenCL. -
O darktable falha ao compilar seus arquivos de código-fonte OpenCL em tempo de execução. Nesse caso, você verá várias mensagens de erro parecidas com erros típicos do compilador. Isso pode indicar uma incompatibilidade entre a implementação do OpenCL e a interpretação do padrão pelo darktable. Nesse caso, relate o problema no github e nós tentaremos ajudá-lo. Relate também se você notar diferenças significativas entre o processamento de CPU e GPU de uma imagem.
Algumas implementações do OpenCL na CPU também existem, vindo como controladores fornecidos pela INTEL ou AMD. Observamos que eles não fornecem nenhum ganho de velocidade em comparação com nosso código de CPU otimizado manualmente. Portanto, o darktable simplesmente descarta esses dispositivos por padrão. Este comportamento pode ser alterado definindo a variável de configuração opencl_use_cpu_devices
(em $HOME/.config/darktablerc
) para TRUE
.