PoCL is a portable open source (MIT-licensed) implementation of the OpenCL standard (1.2 with some 2.0 features supported). In addition to being an easily portable multi-device (truely heterogeneous) 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 longer term is to enhance performance portability of OpenCL programs across device types utilizing runtime and compiler techniques.
Upstream PoCL currently supports various CPUs, NVIDIA GPUs via libcuda, HSA-supported GPUs and TCE ASIPs (experimental, see: OpenASIP). It 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-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
- portable kernel compiler with horizontal autovectorization of work-groups
- core runtime APIs implemented in C for improved portability to bare bone machines
- automated kernel compiler cache
- driver framework that allows seamless integration of diversity of device types in the same OpenCL context
- ICD support
