O consórcio Khronos, responsável pelo desenvolvimento das especificações da família OpenGL, Vulkan e OpenCL, sobre a conclusão do desenvolvimento das especificações OpenCL 3.0, que definem a API e as extensões da linguagem C para a organização de computação paralela multiplataforma utilizando CPUs multicores, GPUs, FPGAs, DSPs e outros chips especializados, desde aqueles usados em supercomputadores e servidores em nuvem até chips que podem ser encontrados em dispositivos móveis e em tecnologia embarcada. O padrão OpenCL é totalmente aberto e não requer royalties. Na elaboração do padrão, participaram empresas como IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments e Toshiba.
Na atual fase, a especificação recebeu o status de provisória, o que implica a possibilidade de revisão com base no feedback enviado através de . Após a consideração das observações, a especificação receberá o status final e será publicado o conjunto de testes definitivo para verificar a compatibilidade das implementações existentes.
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
