darktable page lede image
darktable page lede image

Múltiplos dispositivos OpenCL - configurações manuais

10.2.9. Múltiplos dispositivos OpenCL - configurações manuais

o escalonamento de múltiplos dispositivos OpenCL na maioria dos sistemas típicos pode ser otimizado usando as configurações perfil de escalonamento OpenCL. No entanto, se seu sistema vem equipado com uma variedade de GPUs, você pode querer definir a prioridade relativa dos dispositivos manualmente. Para fazer isto, você precisa selecionar o perfil de escalonamento default e fazer as configurações no parâmetro opencl_device_priority.

É importante entender como darktable usa os dispositivos OpenCL. Cada sequência de processamento de uma imagem - converter uma entrada para a saída final usando uma dada pilha de histórico - é executada em uma pixelpipe. Há quatro tipos diferentes de pixelpipe no darktable. Um tipo é responsável pelo processamento da imagem central (a visão cheia) na sala escura, outra processa a imagem em modo de pré-visualização (a janela de navegação) no topo e à esquerda, na sala escura. De cada um desses tipos, somente uma pode ser trabalhada ao mesmo tempo - com a pixelpipe cheia e a de pré-visualização rodando em paralelo. Além disso, pode haver múltiplas pixelpipes paralelas para gerar miniaturas. Se um dispositivo OpenCL estiver disponível, o darktable o aloca dinamicamente para uma das pixelpipes específicas para uma execução e o libera logo após ele terminar.

A demanda computacional depende muito do tipo de pixelpipe. Pré-visualização de imagens e miniaturas tem resolução baixa e podem ser processadas rapidamente; a imagem na visão central é mais demandante, e mais ainda uma pixelpipe trabalhando na exportação para arquivo.

O parâmetro de configuração opencl_device_priority contém uma string com a estrutura a seguir:

a,b,c.../k,l,m.../o,p,q.../x,y,z...

Cada letra representa um dispositivo OpenCL. Há quatro campos na string de parâmetro separas por barras, cada um representando um tipo de pixelpipe. a,b,c... define os dispositivos aos quais é permitido processar a pixelpipe (completa) da imagem central. Da mesma forma, os dispositivos k,l,m... podem processar as pixelpipes de pré-visualização, dispositivos o,p,q... as pixelpipes de exportação e, finalmente, os dispositivos x,y,z... as pixelpipes de miniaturas. Um campo vazio significa que nenhum dispositivo OpenCL pode servir aquele tipo de pixelpipe.

O darktable tem um sistema interno de numeração, onde o primeiro dispositivo OpenCL receberá o número 0. Todos os outros dispositivos são numerados consecutivamente. Este número, junto com o nome do dispositivo, é mostrado quando você inicia o darktable com -d opencl. Você pode especificar um dispositivo pelo número ou pelo nome (caixa alta/baixa e espaços não importam). Se tiver mais de um dispositivo - todos com o mesmo nome - você precisa usar os números de dispositivos para diferenciá-los.

Um especificador de dispositivo pode ser prefixado com um ponto de exclamação !, e neste caso o dispositivo será excluído do processamento desta pixelpilpe. Você também pode usar um asterisco, *, como curinga, representando todos os dispositivos não mencionados explicitamente naquele grupo.

A ordem da sequência em um grupo é relevante. O darktable lerá a lista da esquerda para a direita sempre que tentar alocar um dispositivo OpenCL para a pixelpipe, e escolherá o primeiro que encontrar.

Se um processo de pixelpipe está para começar e todas as GPUs no grupo correspondente estão ocupadas, o darktable automaticamente processa a imagem na CPU por default. Você pode forçar processamento em GPU prefixando a lista de GPUs permitidas com um sinal de mais +. O darktable não usará a CPU, e ao invés disso suspenderá o processamento até que o próximo dispositivo OpenCL esteja disponível.

A configuração default de opencl_device_priority é:

*/!0,*/*/*

A qualquer dispositivo OpenCL detectado é permitido processar nossa imagem na visão central. O primeiro dispositivo OpenCL (0) não pode processar a pixelpipe de pré-visualização. Como consequência, se houver somente uma GPU no sistema, a pixelpipe de pré-visualização será sempre processada na CPU, mantendo sua única GPU exclusivamente para a tarefa mais demandante da imagem central. Esta é uma configuração razoável para a maioria dos sistemas. Não há restrições para as pixelpipes de exportação e miniaturas.

O default é uma boa escolha se você só tem um dispositivo. Se tem vários, o default será um bom ponto de partida. No entanto, como seus dispositivos podem ter níveis diferentes de poder de processamento, faz sentido investir um pouco de tempo e otimizar sua lista de prioridades.

Aqui está um exemplo. Vamos presumir que temos um sistema com dois dispositivos, uma Radeon HD7950 e uma Geforce GTS450, mais antiga e mais lenta. O darktable (iniciado com darktable -d opencl reportará os 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.

Então a GeForce GTS 450 é detectada como primeiro dispositivo; a Radeon HD7950 ('Tahiti') como segundo. Esta ordem normalmente não muda, a não ser que a configuração do driver ou do hardware seja modificada. Mas é melhor usar nomes de dispositivos ao invés de números por segurança.

Como a GTS450 é mais lenta que a HD7950, um opencl_device_priority otimizado poderia se parecer com:

!GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*

A GTS450 é explicitamente excluída do trabalho na pixelpipe da imagem central; isto é reservado para todos os outros dispositivos (ou seja, a Tahiti). Completamente o oposto da nossa pixelpipe de pré-visualização. Ali, a Tahiti é excluída, já que somente permitimos que a GTS450 faça o trabalho.

Para exportação de arquivos e geração de miniaturas, queremos toda ajuda possível. No entanto, o darktable deve primeiro verificar se o dispositivo Tahiti está livre, porque é o mais rápido. Se não for o caso, outros dispositivos - de gato somente a GTS450 - são verificados.