OpenCL (Open Computing Language) is a framework for writing programs that execute across heterogeneous platforms consisting of central processing units (CPUs), graphics processing units (GPUs), digital signal processors (DSPs), field-programmable gate arrays (FPGAs) and other processors or hardware accelerators. OpenCL specifies programming languages (based on C99 and C++11) for programming these devices and application programming interfaces (APIs) to control the platform and execute programs on the compute devices. OpenCL provides a standard interface for parallel computing using task- and data-based parallelism.
This is the definition of OpenCL on Wikipedia. In this post, I’d like to do some research about the architecture in a brief view, based on Arch Linux. Arch Linux is chosen because of its clear software source, in which we can find out what exactly in a package for OpenCL components.
Here, we only talk about the type that runs on GPU.
GPGPU
GPGPU is a notion standing General-Purpose computing on Graphics Processing Units. It’s called General Purpose
because through it, we will not use Graphics Processing Units to process graphics data. Instead, we’d like to use them as more general computing devices.
To achieve this, there are several frameworks proposed by different communities, organizations or companies. For example:
- NVIDIA Cuda
- ATI Stream
- OpenCL
NVIDIA Cuda is proprietary and of course supported by NVIDIA. OpenCL is an open standard maintained by the non-profit technology consortium Khronos Group. But in face, the implementations rely on hardware/software providers.
The important stuff of the various implementations is OpenCL Runtime libraries, which are prerequisites of executing a program that uses OpenCL.
OpenCL Runtime libraries
To be clarified, OpenCL Runtime libraries depend on hardware manufacturers.