múltiplos dispositivos

O agendamento de dispositivos OpenCL pode ser otimizado na maioria dos sistemas usando as configurações de “perfil de agendamento OpenCL”. No entanto, se o seu sistema estiver equipado com mais de uma GPU, você pode querer definir a prioridade relativa do dispositivo manualmente. Para fazer isso, você precisa selecionar o perfil de agendamento “padrão” e alterar as configurações no parâmetro de configuração “opencl_device_priority”.

É importante entender como o darktable usa dispositivos OpenCL. Cada sequência de processamento de uma imagem - para converter uma entrada em saída final usando uma pilha de histórico – é executada em um pixelpipe. Existem quatro tipos diferentes de pixelpipe no darktable. Um tipo é responsável por processar a visualização da imagem central (ou visualização completa) no modo de sala escura, outro pixelpipe processa a imagem de visualização (janela de navegação). Pode haver um de cada um desses dois pixelpipes em execução a qualquer momento, com os pixelpipes completos e de visualização em execução em paralelo. Além disso, pode haver vários pixelpipes paralelos realizando exportações de arquivos, bem como vários pixelpipes paralelos gerando miniaturas. Se um dispositivo OpenCL estiver disponível, o darktable dinamicamente o aloca para um pixelpipe específico para uma execução e o libera depois.

A demanda computacional varia significativamente dependendo do tipo de pixelpipe sendo executado. A imagem de visualização e as miniaturas são de baixa resolução e podem ser processadas rapidamente, enquanto o processamento da visualização da imagem central é mais exigente. Um pixelpipe de exportação completo é ainda mais exigente.

O parâmetro de configuração “opencl_device_priority” segura uma corda com a seguinte estrutura: a,b,c.../k,l,m.../o,p,q.../x,y,z.... Cada letra representa um dispositivo OpenCL específico. Existem quatro campos na string de parâmetro separados por uma barra, cada um representando um tipo de pixelpipe. a,b,c... define os dispositivos que têm permissão para processar a imagem central (full) pixelpipe. Dispositivos semelhantesk,l,m... pode processar o pixelpipe de visualização, dispositivos o,p,q... os pixelpipes de exportação e, finalmente, dispositivos x,y,z... as pixelpipes em miniatura. Um campo vazio significa que nenhum dispositivo OpenCL pode servir este tipo de pixelpipe.

o darktable tem um sistema de numeração interno, pelo qual o primeiro dispositivo OpenCL disponível recebe o número 0. Todos os outros dispositivos são numerados consecutivamente. Este número, junto com o nome do dispositivo, é exibido quando você inicia o darktable com darktable -d opencl. Você pode especificar um dispositivo por número ou nome (maiúsculas/minúsculas e espaços em branco não importam). Se você tiver mais de um dispositivo com o mesmo nome, precisará usar os números dos dispositivos para diferenciá-los.

Um especificador de dispositivo pode ser prefixado com um ponto de exclamação !, em caso onde o dispositivo é excluído do processamento de um determinado pixelpipe. Você também pode usar um asterisco * como um caractere coringa, representando todos os dispositivos não mencionados anteriormente explicitamente naquele grupo.

A ordem de sequência dentro de um grupo é importante – o darktable irá ler a lista da esquerda para a direita e sempre que tentar alocar um dispositivo OpenCL para um pixelpipe, ele fará a varredura dos dispositivos nessa ordem, pegando o primeiro dispositivo livre que encontrar.

Se um processo pixelpipe estiver prestes a ser iniciado e todas as GPUs no grupo correspondente estiverem ocupadas, o darktable processa automaticamente a imagem na CPU por padrão. Você pode forçar o processamento da GPU prefixando a lista de GPUs permitidas com um sinal de mais +. Neste caso, o darktable não usará a CPU, mas suspenderá o processamento até que o próximo dispositivo OpenCL permitido esteja disponível.

configuração padrão do darktable para “opencl_device_priority” é */!0,*/*/*.

Qualquer dispositivo OpenCL detectado tem permissão para processar a imagem da vista central. O primeiro dispositivo OpenCL (0) não tem permissão para processar o pixelpipe de visualização. Como consequência, se houver apenas uma GPU disponível em seu sistema, o pixelpipe de visualização sempre será processado na CPU, mantendo sua única GPU exclusivamente para a visualização da imagem central mais exigente. Esta é uma configuração razoável para a maioria dos sistemas. Essas restrições não se aplicam à exportação e miniaturas de pixelpipes.

O padrão é uma boa escolha se você tiver apenas um dispositivo. Se você tiver vários dispositivos, ele constitui um ponto de partida razoável. No entanto, como seus dispositivos podem ter níveis bastante diferentes de poder de processamento, faz sentido investir algum tempo otimizando sua lista de prioridades.

Aqui está um exemplo: vamos supor que temos um sistema com dois dispositivos, uma rápida Radeon HD7950 e uma GeForce GTS450 mais antiga e mais lenta. O darktable (iniciado com darktable -d opencl) relatará os seguintes dispositivos:

[opencl_init] iniciado com sucesso.
[opencl_init] aqui estão os números internos e nomes de
 Dispositivos OpenCL disponíveis para o darktable:
[opencl_init]           0       'GeForce GTS 450'
[opencl_init]           1       'Tahiti'
[opencl_init] FINALMENTE: opencl está DISPONÍVEL neste sistema.

Aqui, a placa GeForce GTS 450 é detectada como o primeiro dispositivo e a Radeon HD7950 (‘Tahiti’) como o segundo. Esta ordem normalmente não mudará a menos que a configuração do hardware ou driver seja modificada, mas é melhor usar nomes de dispositivos em vez de números para ficar no lado seguro.

Como o GTS450 é mais lento que o HD7950, um “opencl_device_priority” otimizado poderia ser parecido com: !GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*.

O GTS450 é explicitamente excluído do processamento do pixelpipe da imagem central; isso é reservado para “todos” os outros dispositivos (ou seja, o HD7950/Tahiti). Por outro lado, para o pixelpipe de visualização, o Tahiti é excluído, de modo que apenas o GTS450 tem permissão para fazer o trabalho.

Para exportação de arquivos e geração de miniaturas, queremos todas as mãos no deck. No entanto, o darktable deve primeiro verificar se o dispositivo Tahiti é livre, porque é mais rápido. Se não for livre, todos os outros dispositivos – na verdade, apenas o GTS450 – são verificados.

Traduções