Portable Computing Language (pocl) aims to become a MIT-licensed open source implementation of the OpenCL standard which can be easily adapted for new targets and devices, both for homogeneous CPU and heterogenous GPUs/accelerators.
pocl uses Clang as an OpenCL C frontend and LLVM for the 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.
The goal is to accomplish improved performance portability using a kernel compiler that can generate multi-work-item work-group functions that exploit various types of parallel hardware resources: VLIW, superscalar, SIMD, SIMT, multicore, multithread ...
Additional purpose of the project is to serve as a research platform for issues in parallel programming on heterogeneous platforms.
2014-09-16: Added a 'publications' section with a couple of papers in it
2014-07-24: pocl's Android port now at beta.
2014-01-29: Portable Computing Language (pocl) v0.9 released
2013-09-12: pocl included in Fedora
2013-08-12: Portable Computing Language (pocl) v0.8 released
2013-02-04: Project renamed to POrtable Computing Language (pocl)
The project was renamed to POrtable Computing Language (pocl) to avoid trademark uncertainties (was: Portable OpenCL). It's still pronounced "pogle"! :)
2013-01-09: 0.7 released!
The source package, the change log, and the release annoucement are here.
Current status (updated: 2013-11-10)
A lot of OpenCL programs, projects and test suites work out of the box, but there are still unimplemented OpenCL APIs. These will be added gradually as needed by new tested applications.
Patch contributions welcomed, of course!
The following OpenCL applications are known to work with pocl:
- ViennaCL 1.5.1 examples
- Rodinia 2.0.1
- Parboil Benchmarks (most of them)
- OpenCL Programming Guide book samples (most of them)
- AMD APP SDK v2.8 OpenCL samples (most of them)
- Luxmark v2.0
- piglit (97%+ of the tests pass)
pocl has been tested on the following platforms supported by LLVM:
- X86_64/Linux (host&device)
- PowerPC64/Linux (host&device)
- PowerPC32/Linux (host&device)
- ARM v7/Linux (host&device)
- Multiple VLIW-style TTA processors designed using TCE in heterogeneous host-device setups.
Feature highlights (updated: 2013-11-10)
- portable kernel compiler with horizontal autovectorization of work-groups (experimental)
- efficient math built-in libraries
- core APIs implemented in C for improved portability to bare bone machines
- ICD support