PoCL 1.6, a standalone implementation of the OpenCL standard

The launch of the new version of the project PoCL 1.6 (Portable Computing Language OpenCL), of the highlights of version 1.6 is the support for Clang / LLVM 11.0, as well as the work done to improve the performance and functions of CUDA, improved compatibility with PowerPC and improved use of OpenCL debugging.

For those unfamiliar with PoCL, you should know what it is a portable open source implementation (licensed by MIT) of the OpenCL standard (1.2 with some 2.0 features supported). As well as being a multi-device open source OpenCL implementation (truly heterogeneous) easily portable, a primary goal of this project is to improve the interoperability of the diversity of OpenCL-compliant devices by integrating them into a single centrally orchestrated platform.

Additionally, one of the key longer-term goals is to improve performance portability of OpenCL programs on device types that use runtime and compilation techniques.

The OpenCL kernel compiler is based on LLVM and Clang is used as the interface to OpenCL C. To provide proper portability and performance, the OpenCL kernel compiler can generate combined functions that can use various hardware resources to parallelize code execution , such as VLIW, superscalar, SIMD, SIMT, multi-core, and multi-threaded. There is support for ICD (Installable Client Driver) drivers. There are backends to provide work through CPU, ASIP (TCE / TTA), GPU based on HSA architecture, and NVIDIA GPU (CUDA).

Main new features of PoCL 1.6

This new version of PoCL 1.6 highlights the ability to compile this implementation with device drivers enabled at compilation time, as well as the availability of the device will be verified at startup (previously, the systems on which PoCL is built and run they should have had the same controller support). Implemented the ability to use the conda package manager to distribute PoCL binary packages with CUDA support for Linux-x86_64 and Linux-ppc64le systems.

Another change that stands out is the support for LLVM 11 along with the expanded possibilities for debugging OpenCL code when using the CPU controller.

In addition, it is highlighted that the performance optimization of the CUDA backend was carried out, which allowed significantly speeding up operations related to the use of local memory (FFT, GEMM).

Benchmarks using SHOC benchmarks (which are now continually tested show that these optimizations resulted in much better performance, particularly for benchmarks involving local memory such as FFT and GEMM, compared to a run of previous reference. PoCL now often achieves competitive performance with Nvidia's proprietary OpenCL driver). We welcome contributions to identify and eliminate the root causes of the remaining problem areas. We also welcome contributions to improve feature coverage for the OpenCL 1.2 / 3.0 standards.

  • PoCL performance in many tests is now close to NVIDIA's proprietary OpenCL driver.
  • Added the HARDENING_ENABLE compilation parameter to enable compiler options to generate a more secure libpocl.so at the cost of performance degradation.
  • Returned support for PowerPC 8/9 systems, for which the OpenCL implementation level when using pthread and CUDA devices corresponds to the CUDA level on x86_64 systems.
  • Changed ABI for CUDA kernels that use __ local blocks. After upgrade, users need to clear pocl cache.
  • Support for the SINGLE_LLVM_LIB build option has been removed, instead of using STATIC_LLVM and llvm-config to define which libraries to bind to.

Finally, if you want to know more about this new version, you can check the details in the original ad. 

While for those interested in knowing more about this implementation, they can consult the official website of this, where you can find the documentation and download files.

The project code is distributed under the MIT license and the work is supported on platforms X86_64, MIPS32, ARM v7, AMD HSA APU and various specialized TTA processors with the VLIW architecture.

The content of the article adheres to our principles of editorial ethics. To report an error click here!.

Be the first to comment

Leave a Comment

Your email address will not be published.



  1. Responsible for the data: Miguel Ángel Gatón
  2. Purpose of the data: Control SPAM, comment management.
  3. Legitimation: Your consent
  4. Communication of the data: The data will not be communicated to third parties except by legal obligation.
  5. Data storage: Database hosted by Occentus Networks (EU)
  6. Rights: At any time you can limit, recover and delete your information.