O consórcio Khronos, responsável pelo desenvolvimento das especificações da família OpenGL, Vulkan e OpenCL, anunciou a publicação das especificações finais , que definem a API e extensões da linguagem C para organizar computação paralela multiplataforma usando CPUs multicore, GPUs, FPGAs, DSPs e outros chips especializados, que vão desde aqueles utilizados em supercomputadores e servidores em nuvem até chips que podem ser encontrados em dispositivos móveis e eletrônicos embarcados. O padrão OpenCL é totalmente aberto e não requer pagamento de royalties.
Ao mesmo tempo um SDK OpenCL aberto com ferramentas, exemplos, documentação, arquivos de cabeçalho, wrappers para C++ e bibliotecas C para o desenvolvimento de aplicativos compatíveis com OpenCL 3.0. Também uma implementação inicial do OpenCL 3.0 baseada no compilador Clang, que está em fase de revisão de patches para inclusão no núcleo do LLVM. Empresas como IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments e Toshiba participaram do trabalho sobre o padrão.
As melhorias mais notáveis :
- A API OpenCL 3.0 agora abrange todas as versões do OpenCL (1.2, 2.x), sem fornecer especificações separadas para cada versão. O OpenCL 3.0 prevê a possibilidade de ampliar a funcionalidade principal através da integração de especificações adicionais, que serão aplicadas na forma de opções, sem bloquear a natureza monolítica do OpenCL 1.2/2.X.
- Apenas a funcionalidade correspondente ao OpenCL 1.2 é considerada obrigatória, enquanto todas as funcionalidades propostas nas especificações OpenCL 2.x são consideradas opcionais. Essa abordagem facilitará a criação de implementações especializadas compatíveis com OpenCL 3.0 e expandirá a gama de dispositivos em que o OpenCL 3.0 pode ser utilizado. Por exemplo, os fabricantes podem implementar suporte ao OpenCL 3.0 sem implementar funcionalidades separadas do OpenCL 2.x. Para acessar as funcionalidades opcionais da linguagem no OpenCL 3.0, foi adicionada um sistema de consultas de verificação, permitindo avaliar o suporte a elementos individuais da API, bem como macros especiais.
- A unificação com as especificações anteriores facilita a tradução de aplicativos para OpenCL 3.0. Aplicativos OpenCL 1.2 poderão funcionar em dispositivos compatíveis com OpenCL 3.0 sem necessidade de modificações. Aplicativos OpenCL 2.x também não exigirão alteração de código, mas se o ambiente OpenCL 3.0 fornecer a funcionalidade necessária (para garantir a portabilidade nos futuros aplicativos OpenCL 2.x, recomenda-se adicionar verificações para avaliar o suporte das funcionalidades utilizadas do OpenCL 2.x). Desenvolvedores de drivers com implementações OpenCL poderão atualizar facilmente seus produtos para OpenCL 3.0, adicionando apenas o tratamento de solicitações para determinadas chamadas de API e, ao longo do tempo, aumentar gradualmente a funcionalidade.
- A especificação OpenCL 3.0 foi alinhada com o ambiente, extensões e especificações da representação intermediária universal SPIR-V, que também é aplicada na API Vulkan. O suporte à especificação SPIR-V 1.3 foi incorporado ao OpenCL 3.0 como uma possibilidade opcional. Através do uso da representação intermediária para núcleos computacionais, foi adicionada a suporte a operações com subgrupos.
- Foi adicionada a suporte a uma extensão para a execução de operações DMA assíncronas (Asynchronous DMA), suportada em chips semelhantes a DSP com acesso direto à memória. A Asynchronous DMA permite o uso de transações DMA para transferir dados entre a memória global e local de forma assíncrona, juntamente com as computações realizadas ou outras operações de transferência de dados.
- A especificação de extensões de programação paralela para a linguagem C foi atualizada para , enquanto o desenvolvimento das extensões da linguagem OpenCL para C++ foi interrompido em favor do projeto "C++ for OpenCL". C++ for OpenCL é um compilador baseado em Clang/LLVM e núcleos de C++ e OpenCL C para a representação intermediária SPIR-V ou código de máquina de baixo nível. Através da transpiração para SPIR-V, também é organizada a construção de aplicativos C++ que utilizam a biblioteca de templates SYCL, que simplifica a criação de aplicativos paralelos.
- Para a transpiração de OpenCL através da API Vulkan, são propostos o compilador , que transforma núcleos OpenCL na representação Vulkan SPIR-V, e uma camada para garantir o funcionamento da API OpenCL sobre Vulkan.
Fonte: opennet.ru
