OpenCL
O ImageMagick tem suporte integrado para algumas operações aceleradas por OpenCL. No entanto, há algumas condições para seu funcionamento. Esses requisitos estão listados abaixo.
- SO e drivers:
- macOS: tem suporte integrado a OpenCL. Nenhuma outra ação é necessária.
- Linux/Windows: em plataformas suportadas, instale os drivers necessários para habilitar o OpenCL.
- Móvel: o suporte a OpenCL do ImageMagick não está disponível em SOs móveis (iOS/Android).
- Flag de compilação: o OpenCL do ImageMagick deve ser explicitamente habilitado ao compilar. Isso é feito executando configure com a flag --enable-opencl definida.
- Verificar o suporte em tempo de execução: para verificar se o suporte a OpenCL está habilitado, execute magick --version. A saída do comando deve exibir Features: ... OpenCL ...
- Flag de tempo de execução: o OpenCL é desabilitado por padrão em tempo de execução. Para habilitá-lo, use a variável de ambiente MAGICK_OCL_DEVICE=true, por exemplo MAGICK_OCL_DEVICE=true magick
. E para habilitar apenas um dispositivo específico, use MAGICK_OCL_DEVICE=GPU ou MAGICK_OCL_DEVICE=CPU. - Utilitário de linha de comando: para um suporte adequado a OpenCL, recomenda-se usar o utilitário magick em vez de convert, mogrify e outros.
- Tipo de imagem: a aceleração por OpenCL só funciona em imagens sem mapa de cores. Use imagens em cores reais (true color).
- Operadores: a seguir está uma lista de operadores de imagem que foram acelerados por OpenCL.
blur contrast charcoal function grayscale motion-blur resize
Os operadores a seguir também são acelerados por OpenCL, mas exigem que o canal alfa esteja habilitado, por exemplo magick sample.jpg -alpha on -despeckle null:.
despeckle
equalize
modulate
Notas sobre o funcionamento do OpenCL
Quando alguns dos operadores acelerados por OpenCL são invocados pela primeira vez e todas as condições acima são atendidas, o ImageMagick conduz uma série de testes para configurar o ambiente OpenCL de acordo com o hardware do sistema; portanto, é normal experimentar uma latência maior na primeira vez que você usa uma opção acelerada. Os kernels OpenCL estão embutidos dentro do ImageMagick em formato de código-fonte. Durante a configuração inicial, o ImageMagick descobre todos os dispositivos OpenCL disponíveis e compila os kernels para cada um desses destinos. O ImageMagick também executa internamente vários testes de desempenho para determinar o dispositivo preferencial a ser usado. O código de kernel compilado e os resultados dos testes de desempenho são armazenados no diretório de cache para que os dados possam ser reutilizados por invocações subsequentes do caminho OpenCL. Por padrão, os dados de cache do OpenCL são armazenados em $HOME/.cache/ImageMagick no Linux e no macOS ou em %LOCALAPPDATA%\ImageMagick no Windows. Para executar esses testes pela primeira vez, use o comando abaixo:
MAGICK_OCL_DEVICE=true magick sample.jpg -blur 0x5 null:
No Windows, a parte MAGICK_OCL_DEVICE=true deve ser removida, e o comando set MAGICK_OCL_DEVICE=true deve ser executado antes de executar o comando acima para habilitar as operações OpenCL.
Para alterar o diretório de cache, defina a variável de ambiente MAGICK_OPENCL_CACHE_DIR. O ImageMagick é capaz de detectar mudanças de hardware, atualizações de drivers e novos códigos-fonte de kernel e reexecutar a configuração e o teste de calibração. Você também pode forçar o ImageMagick a reexecutar o processo removendo o conteúdo do diretório de cache.
Além das variáveis de ambiente mencionadas acima, o ImageMagick fornece um conjunto de APIs que permitem aos desenvolvedores obter um controle mais refinado da aceleração por OpenCL. Por exemplo, use a função InitializeOpenCL() para inicializar o ambiente OpenCL:
clEnv=GetCurrentOpenCLEnv();
if (InitializeOpenCL(clEnv,exception) == MagickFalse)
{
/* looks like OpenCL is not supported */
}