The Khronos Group has announced OpenCL 3.0, the latest version of its open framework for programming GPUs and other compute accelerators.
OpenCL was originally developed by Apple, and aimed to create a common API for parallel programming. It has been used for a wide range of purposes from embedded processors and DSPs up to powerful GPUs. Its popularity is not as high as it used to be, though. Apple has moved to its own Metal API, and Nvidia uses its own CUDA API.
Perhaps in view of this, the main changes to the latest release are to remove features in the hope the new version will be more widely adopted.
Khronos says that:
“to cater to a widening diversity of OpenCL devices, OpenCL 3.0 makes all functionality beyond version 1.2 optional.”Khronos
All OpenCL 1.2 applications will continue to run unchanged on any OpenCL 3.0 device. All OpenCL 2.X features are coherently defined in the new unified specification, and current OpenCL 2.X implementations that upgrade to OpenCL 3.0 can continue to ship with their existing functionality with full backwards compatibility.
All OpenCL 2.X API features can be queried, and OpenCL C 3.0 adds macros for querying optional language features. What this means is that vendors will no longer have to support every OpenCL feature, so if there are some features that aren’t relevant for their platform, they can just ignore them.
Khronos says it is ‘realigning the OpenCL roadmap to enable developer-requested functionality to be broadly deployed by hardware vendors”. OpenCL 3.also integrates subgroup functionality into the core specification, ships with a new OpenCL C 3.0 language specification, uses a new unified specification format, and introduces extensions for asynchronous data copies to enable a new class of embedded processors.
For C++ kernel development, the OpenCL Working Group has moved from the original OpenCL C++ kernel language, defined in OpenCL 2.2, to the ‘C++ for OpenCL’ community, open-source project supported by Clang.
C++ for OpenCL provides compatibility with OpenCL C, enables developers to use most C++17 features in OpenCL kernels, and is compatible with any OpenCL 2.X or OpenCL 3.0 implementation that supports SPIR-V™ ingestion.