OpenCL on CPU and GPU
Introduction
OpenCL is a standard which defines a framework, an API and a programming language for parallel computation on heterogeneous systems like desktop computers, high-performance computing servers as well as hand-held devices.
The standard is maintained by the Khronos Group and supported by a large consortium of industry leaders including Apple, Intel, AMD, NVIDIA and ARM. Influenced by NVIDIA’s CUDA from the GPU side and by OpenMP which originates from the classical CPU side, the open OpenCL standard is characterized by a formulation which is abstract enough to support both CPU and GPU computing resources.
This is an ambitious goal, since providing an abstract interface together with a peak performance is a challenging task. OpenCL employs a strict isolation of the computation work into fundamental units, the kernels. These kernels can be developed in the OpenCL C programming language, a subset of the C99 language, with some additional OpenCL specific keywords.
In general, these kernels are hardware independent and compiled by the OpenCL runtime when they are loaded. To be able to fully exploit the parallel execution of the kernel code, several kernel instances, the work items, are started to process a set of input values. The actual number of concurrently running work items is determined by the OpenCL system. How a concrete algorithm can be partitioned into work items has to be decided by the programmer.
Assigned exercise machines
UID Host name IP address 068 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 074 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 075 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 077 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 082 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 084 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 085 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 088 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 089 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 090 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 102 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 103 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 104 rz-tesla0.rz.uni-karlsruhe.de 172.21.94.100 110 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 113 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 117 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 121 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 123 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 125 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 128 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 012 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 132 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 134 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 137 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102 139 rz-tesla2.rz.uni-karlsruhe.de 172.21.94.102
Tutorial Material
Slides
Tasks
Source code
http://hauth.web.cern.ch/hauth/tut_mcore.tar.gz
Use:
wget http://hauth.web.cern.ch/hauth/tut_opencl.tar.gz tar xzf tut_opencl.tar.gz
to download and extract the source code on your GridKa maschine.
Reference Material
OpenCL C++ Wrapper
Khronos Group OpenCL
OpenCL 1.2 Quick Reference Card
http://www.khronos.org/files/opencl-1-2-quick-reference-card.pdf
OpenCL 1.2 Full Documentation
Intel SDK for OpenCL
http://software.intel.com/en-us/articles/vcsource-tools-opencl-sdk/
AMD OpenCL Zone
NVIDIA OpenCL