OpenCLRaw-1.0.1001: The OpenCL Standard for heterogenous data-parallel computing



The OpenCL system for open heterogenous data parallel supercomputing.

Wrapper to the FFI written and maintained by Jeff Heard of the Renaissance Computing Institute

From the introduction:

OpenCL (Open Computing Language) is an open royalty-free standard for general purpose parallel programming across CPUs, GPUs and other processors, giving software developers portable and efficient access to the power of these heterogeneous processing platforms.

OpenCL supports a wide range of applications, ranging from embedded and consumer software to HPC solutions, through a low-level, high-performance, portable abstraction. By creating an efficient, close-to-the-metal programming interface, OpenCL will form the foundation layer of a parallel computing ecosystem of platform-independent tools, middleware and applications. OpenCL is particularly suited to play an increasingly significant role in emerging interactive graphics applications that combine general parallel compute algorithms with graphics rendering pipelines.

OpenCL consists of an API for coordinating parallel computation across heterogeneous processors; and a cross-platform programming language with a well- specified computation environment. The OpenCL standard:

  • Supports both data- and task-based parallel programming models
  • Utilizes a subset of ISO C99 with extensions for parallelism
  • Defines consistent numerical requirements based on IEEE 754
  • Defines a configuration profile for handheld and embedded devices
  • Efficiently interoperates with OpenGL, OpenGL ES and other graphics APIs

_General Notes on the differences between Haskell and the OpenCL-C implementation_

  • Side-effectful procedures capable of returning an error code only return a Maybe ErrorCode, with Nothing returned upon success
  • Procedures which follow the pattern of returning a pointer to an object and taking a final parameter as an error code instead return Either ErrorCode ObjectType
  • Procedures which prefix with clGetInfo* merely take the object, parameter name, and parameter size to allocate. The allocation handled by OpenCLRaw and returned as a Haskell-managed ForeignPtr ()
  • Enumerations and constants are replaced by newtypes for the sake of type-safety.