Warning

This information is a work in progress. Information is subject to change.

Authors

Table of Contents

Background

Setup

Projects

Comparison of Projects

OpenCL Programming Model

Background

OpenCL is an open standard by the Khronos Group. It is open in that the standard is open for anyone to take, read and implement but if you want to certify your implementation as being compliant you need to pass the validation test suite and pay a fee.

OpenCL or Open Compute Language was created for cross-platform, parallel programming of modern processors as well as for distributing work to GPUs.

The current version of OpenCL is 1.2.

Setup

Hardware and software have a role to play in version of OpenCL supported. Hardware which supports OpenCL will note what version.

For instance, the Mali T604 GPU supports OpenCL 1.1.

Next one needs a software OpenCL driver. This driver or drivers might be CPU only, or might also include a GPU.

SNU and pocl for instance are two Open Source OpenCL implementations which are CPU only.

For the following boards let's consider what is available:

Board

GPU Hardware Support

Software driver

Panda

PowerVR

NO PowerVR GPU drivers

Arndale

Mali T604 OpenCL 1.1 support

No Mali OpenCL driver available from HowChip

Samsung Chromebook

Mali T604 OpenCL 1.1 support

No Mali OpenCL driver available from Samsung

For all boards a cpu only implementation is the only currently available choice.

Projects

SNU

SNU, short for Seoul National University located at http://aces.snu.ac.kr/Center_for_Manycore_Programming/SNU-SAMSUNG_OpenCL_Framework.html is an OpenCL implementation that at least for ARM is a cpu only implementation. Sumit Semwal and Tom Gall spent some time getting the code to work on the ARM A15 based Samsung Chromebook.

The project doesn't have an open community and we found that issues with the toolchain and specifically how the toolchain was wrapped was a less than optimal approach.

The git trees with the code in progress can be found at:

https://git.linaro.org/gitweb?p=people/tomgall/SNU.git;a=summary

pocl

pocl or Portable Computing Language https://launchpad.net/pocl is an Open Source OpenCL CPU only implementation. The implementation through the efforts of Sumit Semwal runs on ARM Chromebook.

The implementation has issues especially in the area of error codes. The implementation also wraps llvm with a script as compared to using llvm libs to compile OpenCL kernels.

At the moment, all pocl internal tests pass successfully on ARM chromebook for pocl-0.8 release candidate. Piglit OpenCL test ran into the issues around missing OpenCL error codes returned from pocl.

The project does have an active community on #pocl IRC channel at irc.oftc.net.

The bzr tree with code in progress can be found at:

https://code.launchpad.net/~sumit-semwal/pocl-linaro-eval/trunk

while the upstream bzr tree in launchpad with ARM Chromebook support is at

https://code.launchpad.net/pocl

Android + Arndale

As part of Android there is Renderscript. In order to implement renderscript as part of the Mali binary driver a full complete set of OpenCL symbols can be found within the Mali driver for Arndale.

United with the OpenCL includes one has the ability on Android to utilize an GPU + CPU implementation of OpenCL with the Mali T604 found on Arndale.

Comparison of Projects

Criteria

Criteria

Project

Status

Community support

pocl

Good

SNU

almost non-existent

clover

good dev blog, but no active community

Current devices supported

pocl

Only CPU [ARM / x86]; desires to utilize hardware. Tested on pandaboard, chromebook

SNU

tested / supported on CPUs - Cell BE; ARM A8/A9; Also, some TI DSPs

clover

CPU only; no info on exact tested platforms; TI ported to ARM15, TI DSP

libllvm support

pocl

missing; uses shell exec

SNU

TBD

clover

available

Ease of adding new devices

pocl

TBD

SNU

might not be easy

clover

interface provided for future hardware based extensions, TI DSP port exists

OpenCL built-in functions

pocl

includes generic source for all the builtin functions, which are pre-compiled into LLVM IR, and can be overridden by target

SNU

TBD

clover

Clover uses a Python script to translate builtin function declarations into code fragments that get JIT compiled via LLVM

Extra notes

pocl

- pocl grew out of a university research project targeting application specific processor designs, whose code is not as modular as clover

+ There seem to be many test suites run and platform/OS supported

+ There are some very dedicated active maintainers, with a development roadmap

+ The kernel compilation includes some interesting optimizations

SNU

- bound to specific toolchains

+

clover

- No OpenCL tests (eg: piglet) nor Khronos conformance tests run.

+ TI/Clover port already used in a commercial product (Keystone SDK), targeting HPC market

+ code is well architected, in C++, and more approachable than pocl

+ Adding TI DSP device did not require many core code modifications

+ Both ARM (native kernels only) and DSP is supported (from TI port)

OpenCL Programming Model

libjpeg-turbo

sqlite

Power/Performance Measurement Tools

WorkingGroups/Middleware/Graphics/Docs/OpenCLExperiences (last modified 2013-09-13 01:09:20)