PoCL 1.6, a standalone implementation of the OpenCL standard

The new version of the PoCL 1.6 (Portable Computing Language OpenCL) project has just been released . Highlights of version 1.6 include compatibility with Clang/LLVM 11.0, as well as work done to improve CUDA performance and functions, improved compatibility with PowerPC, and improved OpenCL debugging capabilities.

For those unfamiliar with PoCL, it's a portable, open-source (MIT-licensed) implementation of the OpenCL standard (1.2 with some 2.0 compatible features). Besides being a highly portable, multi-device (truly heterogeneous) open-source OpenCL implementation , a primary goal of this project is to improve the interoperability of diverse OpenCL-compatible 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 announcement.

Those interested in learning more about this implementation can consult its official website , where they can find documentation and downloadable 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.


Add as preferred source in Google