Khronos anuncio OpenCL 3.0 y estas son características más notables
Khronos Concern, que es responsable del desarrollo de especificaciones para la familia OpenGL, Vulkan y OpenCL, anunció la finalización del desarrollo de las especificaciones OpenCL 3.0 que definen API y extensiones de lenguaje C para organizar la computación paralela multiplataforma utilizando CPU de múltiples núcleos, GPU, FPGA, DSP y otros chips especializados.
Estos son utilizados desde supercomputadoras y servidores en la nube, hasta chips que se pueden encontrar en dispositivos móviles y tecnología integrada. El estándar OpenCL está completamente abierto. Empresas como IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments y Toshiba participaron en el trabajo sobre el estándar.
En la etapa actual de la especificación, el estado es provisional, lo que implica la posibilidad de refinamiento basado en los comentarios enviados a través de GitHub. Después de que se tengan en cuenta los comentarios, la especificación recibirá el estado final y se publicará el conjunto de pruebas final para verificar la compatibilidad de las implementaciones existentes.
Características OpenCL 3.0
La API OpenCL 3.0 ahora cubre todas las versiones de OpenCL (1.2, 2.x), sin proporcionar especificaciones separadas para cada versión. OpenCL 3.0 proporciona la capacidad de expandir la funcionalidad básica a través de la integración de especificaciones adicionales, que se organizarán en forma de opciones, sin bloquear la naturaleza monolítica de OpenCL 1.2/2.X.
Solo la funcionalidad que cumple con OpenCL 1.2 se declara obligatoria y todas las características ofrecidas en las especificaciones OpenCL 2.x se clasifican como opcionales. Este enfoque simplificará la creación de implementaciones especializadas compatibles con OpenCL 3.0 y ampliará la gama de dispositivos en los que se puede utilizar OpenCL 3.0.
Por ejemplo, los fabricantes pueden implementar soporte para OpenCL 3.0 sin darse cuenta de las características individuales de OpenCL 2.x. Para acceder a las funciones opcionales del lenguaje, OpenCL 3.0 agrega un sistema de consulta de prueba que permite evaluar el soporte para elementos API individuales, así como macros especiales.
La unificación con las especificaciones publicadas anteriormente facilita la transferencia de aplicaciones a OpenCL 3.0. Las aplicaciones OpenCL 1.2 podrán ejecutarse en dispositivos que admitan OpenCL 3.0 sin modificación. Las aplicaciones OpenCL 2.x tampoco requerirán cambios de código, pero si el entorno OpenCL 3.0 proporciona la funcionalidad necesaria (para garantizar la portabilidad en el futuro, se recomienda que las aplicaciones OpenCL 2.x agreguen consultas de prueba para evaluar la compatibilidad con las funciones openCL 2.x utilizadas).
Los desarrolladores de controladores con implementaciones de OpenCL podrán actualizar fácilmente sus productos a OpenCL 3.0, agregando solo el procesamiento de solicitudes para la presencia de ciertas llamadas API, y aumentar gradualmente la funcionalidad con el tiempo.
La especificación OpenCL 3.0 está alineada con el entorno, las extensiones y las especificaciones de SPIR-V Universal Intermediate View, que también utiliza la API de Vulkan. El soporte para la especificación SPIR-V 1.3 se incluye en el núcleo de OpenCL 3.0 como una característica opcional. Mediante el uso de la representación intermedia de SPIR-V para los núcleos informáticos, se ha agregado soporte para operaciones con subgrupos.
Se agregó soporte para expansión para realizar operaciones DMA asíncronas, compatible con chips similares a DSP con acceso directo a memoria. El DMA asíncrono permite utilizar transacciones DMA para transferir datos entre la memoria global y local en modo asíncrono, en paralelo con los cálculos realizados u otras operaciones de transferencia de datos.
La especificación de las extensiones de programación paralelas para C se actualizó a la versión 3.0 y el desarrollo de las extensiones de lenguaje OpenCL para C++ se suspendió a favor del proyecto “C++ para OpenCL”.
C++ para OpenCL es un compilador basado en Clang/LLVM que traduce los núcleos C++ y OpenCL C en una representación SPIR-V intermedia o código de máquina de bajo nivel. A través de la traducción a SPIR-V, también se organiza la compilacion de aplicaciones C ++ usando la biblioteca de plantillas SYCL, lo que simplifica la creación de aplicaciones paralelas.
Para traducir OpenCL a través de la API de Vulkan, se propone el compilador clspv, que convierte los núcleos de OpenCL a la vista Vulkan SPIR-V y la capa clvk para permitir que la API de OpenCL funcione sobre Vulkan.
Fuente: https://www.khronos.org