The open standard for parallel programming of heterogeneous systems
OpenCL™ (Open Computing Language) is the open, royalty-free standard for cross-platform, parallel programming of diverse processors found in personal computers, servers, mobile devices and embedded platforms. OpenCL greatly improves the speed and responsiveness of a wide spectrum of applications in numerous market categories from gaming and entertainment to scientific and medical software.
OpenCL 2.2 brings the OpenCL C++ kernel language into the core specification for significantly enhanced parallel programming productivity:
- OpenCL C++ kernel language is a static subset of the C++14 standard and includes classes, templates, lambda expressions, function overloads and many other constructs for generic and meta-programming
- Leverages the new Khronos SPIR-V™ 1.1 intermediate language which fully supports the OpenCL C++ kernel language
- OpenCL library functions can now take advantage of the C++ language to provide increased safety and reduced undefined behavior while accessing features such as atomics, iterators, images, samplers, pipes, and device queue built-in types and address spaces
- Pipe storage is new device-side type in OpenCL 2.2 that is useful for FPGA implementations by making connectivity size and type known at compile time, enabling efficient device-scope communication between kernels
- OpenCL 2.2 also includes features for enhanced optimization of generated code: applications can provide the value of specialization constant at SPIR-V compilation time, a new query can detect non-trivial constructors and destructors of program scope global objects, and user callbacks can be set at program release time
These new specifications are released in provisional form to enable developers and implementers to provide feedback before finalization. Your feedback is always welcome on the OpenCL forums.
OpenCL 2.2
- The OpenCL 2.2 provisional specification is available in the Khronos Registry
- The OpenCL C++ compiler reference implementation
- The OpenCL C++ standard library reference implementation
- SPIR-V Tools project including an assembler, binary module parser, disassembler, and validator for SPIR-V
- LLVM framework with SPIR-V support including an LLVM <-> SPIR-V bi-directional converter
- Post a comment on the OpenCL 2.2 feedback thread on the Khronos forums
The OpenCL 2.2 Quick Reference Guide Online Reference Pages will be produced when the specification is finalized.
OpenCL 2.1
- The OpenCL 2.1 headers on GitHub
- The OpenCL 2.1 specification is available in the Khronos Registry
- The OpenCL 2.0 C Language Specification (used in OpenCL 2.1) available in the Khronos Registry
- Post a comment on the OpenCL 2.1 feedback thread on the Khronos forums
- The OpenCL 2.1 Quick Reference Guide ( View on SlideShare )
- The OpenCL 2.1 Online Reference Pages
- SPIR-V Tools project including an assembler, binary module parser, disassembler, and validator for SPIR-V
- LLVM framework with SPIR-V support including an LLVM <-> SPIR-V bi-directional converter
OpenCL 2.1 C++
- The OpenCL 2.1 C++ Provisional Specification is available in the Khronos Registry
OpenCL 2.0
- The OpenCL 2.0 specification and header files are available in the Khronos Registry
- The OpenCL 2.0 C Language Specification available in the Khronos Registry
- The OpenCL 2.0 Quick Reference guide ( View on SlideShare )
- The OpenCL 2.0 Online Reference pages
OpenCL 1.2
- The OpenCL 1.2 specification and header files are available in the Khronos Registry
- The OpenCL 1.2 Quick Reference guide ( View online )
- The OpenCL 1.2 Online Reference Pages
- The OpenCL C++ Wrapper 1.2 Quick Reference Card ( View Online )
OpenCL 1.1
- The OpenCL 1.1 specification and header files are available in the Khronos Registry
- The OpenCL 1.1 Quick Reference Guide ( View online )
- The OpenCL 1.1 Online Reference Pages
OpenCL 1.0
- The OpenCL 1.0 specification and header files are available in the Khronos Registry
- The OpenCL 1.0 Quick Reference Guide ( View online )
The OpenCL 1.0 Online Reference Pages
OpenCL Ecosystem

OpenCL 2.2
Defines C++ kernel language- Together with SYCL 2.2 for single source C++ programming
- Initializer and finalizer function execution modes for constructors and destructors
- Named barriers, subgroup execution, and program scope pipes…
- Only driver update required
- Seeking industry feedback before finalization
- Aiming for finalization at SIGGRAPH or SC16 – depends on feedback

OpenCL C++
The OpenCL C++ kernel language is a static subset of C++14
- Frees developers from low-level coding details without sacrificing performance
C++14 features removed from OpenCL C++ for parallel programming
- Exceptions, Allocate/Release memory, Virtual functions and abstract classes Function pointers, Recursion and goto
Classes, lambda functions, templates, operator overloading etc…
- Fast and elegant sharable code - reusable device libraries and containers
- Templates enable meta-programming for highly adaptive software
- Lambdas used to implement nested/dynamic parallelism
C++11-based standard library optimized for data-parallel programming
- Atomics, meta-programming & type traits, math functions…
- Plus new library features: Work-item & Work-group functions, Dynamic parallelism, Image & Pipe functions…

SPIR-V – Graphics/Compute ‘Rendezvous Spec’

Implementers of OpenCL
- Intel
- NVIDIA Corporation
- Apple, Inc.
- ARM Limited
- QUALCOMM
- Marvell
- Vivante Corporation
- MediaTek Inc
- AMD
- Texas Instruments
- Altera Corporation
- Xilinx, Inc.
- Imagination Technologies
- STMicroelectronics International NV
- IBM Corporation
- Creative Labs
- Samsung Electronics
View a complete list of companies and their conformant products.

