A nova versão do projeto PoCL 1.6 (Portable Computing Language OpenCL) acaba de ser lançada . Os destaques da versão 1.6 incluem compatibilidade com Clang/LLVM 11.0, além de melhorias no desempenho e nas funções do CUDA, maior compatibilidade com PowerPC e recursos aprimorados de depuração do OpenCL.
Para quem não conhece o PoCL, trata-se de uma implementação portátil e de código aberto (licença MIT) do padrão OpenCL (versão 1.2 com alguns recursos compatíveis com a 2.0). Além de ser uma implementação OpenCL de código aberto altamente portátil e multidispositivo (verdadeiramente heterogênea) , um dos principais objetivos deste projeto é melhorar a interoperabilidade de diversos dispositivos compatíveis com OpenCL, integrando-os em uma única plataforma orquestrada centralmente.
Além disso, um dos principais objetivos de longo prazo é melhorar a portabilidade do desempenho de programas OpenCL em tipos de dispositivos que usam técnicas de tempo de execução e compilação.
O compilador de kernel OpenCL é baseado em LLVM e Clang é usado como interface para OpenCL C. Para fornecer portabilidade e desempenho adequados, o compilador de kernel OpenCL pode gerar funções combinadas que podem usar vários recursos de hardware para paralelizar a execução de código , como VLIW, superescalar, SIMD, SIMT, multi-core e multi-threaded. Há suporte para drivers ICD (driver de cliente instalável). Existem back-ends para fornecer trabalho por meio de CPU, ASIP (TCE / TTA), GPU baseada na arquitetura HSA e GPU NVIDIA (CUDA).
Principais novos recursos do PoCL 1.6
Esta nova versão do PoCL 1.6 destaca a capacidade de compilar esta implementação com drivers de dispositivo habilitados no momento da compilação, bem como a disponibilidade do dispositivo será verificada na inicialização (anteriormente, os sistemas nos quais o PoCL é construído e executado eles deveriam ter o mesmo suporte de controlador). Implementada a capacidade de usar o gerenciador de pacotes conda para distribuir pacotes binários PoCL com suporte CUDA para sistemas Linux-x86_64 e Linux-ppc64le.
Outra mudança que se destaca é o suporte para LLVM 11 junto com as possibilidades expandidas de depuração de código OpenCL ao usar o controlador da CPU.
Além disso, deve-se destacar que foi realizada a otimização do desempenho do backend CUDA, o que agilizou significativamente as operações relacionadas ao uso de memória local (FFT, GEMM).
Benchmarks usando benchmarks SHOC (que agora são continuamente testados mostram que essas otimizações resultaram em um desempenho muito melhor, particularmente para benchmarks envolvendo memória local, como FFT e GEMM, em comparação com uma execução de PoCL agora frequentemente atinge desempenho competitivo com driver OpenCL proprietário da Nvidia). Aceitamos contribuições para identificar e eliminar as causas raízes das demais áreas problemáticas. Também agradecemos contribuições para melhorar a cobertura de recursos para os padrões OpenCL 1.2 / 3.0.

- O desempenho do PoCL em muitos testes está agora próximo do driver OpenCL proprietário da NVIDIA.
- Adicionado o parâmetro de compilação HARDENING_ENABLE para habilitar as opções do compilador para gerar um libpocl.so mais seguro ao custo da degradação do desempenho.
- Retornou o suporte para sistemas PowerPC 8/9, para os quais o nível de implementação OpenCL ao usar dispositivos pthread e CUDA corresponde ao nível CUDA em sistemas x86_64.
- ABI alterado para kernels CUDA que usam __ blocos locais. Após a atualização, os usuários precisam limpar o cache do pocl.
- O suporte para a opção de construção SINGLE_LLVM_LIB foi removido, em vez de usar STATIC_LLVM e llvm-config para definir quais bibliotecas ligar.
Por fim, se você quiser saber mais sobre esta nova versão, pode conferir os detalhes no anúncio original.
Os interessados em saber mais sobre essa implementação podem consultar o site oficial , onde encontrarão documentação e arquivos para download.
O código do projeto é distribuído sob a licença MIT e o trabalho é suportado nas plataformas X86_64, MIPS32, ARM v7, AMD HSA APU e vários processadores TTA especializados com a arquitetura VLIW.