PoCL is a portable open source (MIT-licensed) implementation of the OpenCL standard. In addition to being an easily portable/layered multi-device open-source OpenCL implementation, a major goal of this project is improving interoperability of diversity of OpenCL-capable devices by integrating them to a single centrally orchestrated platform. Also one of the key goals is to enhance performance portability of OpenCL programs across device types utilizing runtime and compiler techniques.

PoCL currently supports various CPU architectures (x86, ARM, RISC-V), NVIDIA GPUs via libCUDA, Intel GPUs via Level Zero and TCE ASIPs (OpenASIP) at different feature coverage levels. It also supports a remote backend for distributed OpenCL execution. PoCL is also known to have multiple (private) adaptations in active production use.

PoCL uses Clang as an OpenCL C frontend and LLVM for kernel compiler implementation, and as a portability layer. Thus, if your desired target has an LLVM backend, it should be able to get OpenCL support easily by using PoCL.

News

2023-12-19: Portable Computing Language (PoCL) v5.0 released

PoCL v5.0 is out! The release notes can be read here and a packaged release is available here.

2023-09-04: No-MPI OpenCL-Only Distributed Computing With PoCL-Remote

PoCL now has a new backend that allows transparently offloading OpenCL tasks to other nodes on the network, thus enabling distributing compute without using MPI or similar APIs. Since the standard OpenCL API suffices, compute offloading can be performed identically whether using local or remote devices, which makes it useful for selective/adaptive edge offloading and other use cases.

In contrast to previous similar distributing OpenCL implementations, PoCL-Remote does not merely forward API calls as is, but performs smart memory management and distributed command scheduling to keep latency down and scale well to multiple nodes.

The driver is now considered ready for out-of-lab testing and has been integrated to the main branch for the upcoming v5.0 release. Why not give it a run?

2023-06-22: Portable Computing Language (PoCL) v4.0 released

2022-12-05: Portable Computing Language (PoCL) v3.1 released

2022-11-15: Advanced hardware accelerator support through AlmaIF

2022-06-10: Portable Computing Language (PoCL) v3.0 released

2020-08-14: Debugging OpenCL applications with PoCL

2019-07-15: Hardware Accelerators in POCL

PoCL received support for CL_DEVICE_TYPE_CUSTOM via addition of a hardware accelerator framework. It consists of an example driver (pocl-accel) that relies on a "pocl standard" control interface and an enumeration of "pocl-known" built-in kernels. The example accelerator is generated using the TCE tools.

For more information, please read a blog post about it in the Heterogeneous System Architecture section of the IEEE Computer Society tech news or the usage instructions in the user manual.

2019-04-04: Portable Computing Language (pocl) v1.3 released

2019-02-07: pocl powering Think Silicon's ultra-low power GPGPUs

2018-09-25: Portable Computing Language (pocl) v1.2 released

2018-09-18: Matrix-2000 and pocl

Dr. Jianbin Fang from NUDT sent us a nice description of how they benefitted from pocl for adding OpenCL support on their Matrix-2000 accelerator.

2018-03-09: Portable Computing Language (pocl) v1.1 released

2017-12-19: Portable Computing Language (pocl) v1.0 released

2017-04-25: NVIDIA GPU support via CUDA backend

pocl now has experimental support for NVIDIA GPU devices via a new backend which makes use of the LLVM NVPTX backend and the CUDA driver API. This work was primarily carried out by James Price from the High Performance Computing group at the University of Bristol. Read more about it here.

The source package, the change log, and the release annoucement are here.

Older news items here

Current Status

Passes most of the tests in the Khronos OpenCL 1.2 conformance suite. Development towards 3.0 compliance with some 2.x features started.

Feature Examples