Simple examples of OpenCL code, which I am using to learn heterogeneous and GPU computing with OpenCL.
* -- reproduced to work in 2025 on AMD GPU
- *
add_numbers: add a list of numbers together. Includes detailed error handling which makes the code harder to read and understand - *
square_array: computes array^2 (I am playing mostly with this one) - *
sum_array: sums two arrays cf4cl: testing OpenCL C wrapper- *
Hello_World: OpenCL "Hello World" by Apple - *
mandelbrot: my attempt at a simple Mandelbrot set calculation N-BodySimulation: Apple's N-body simulator which clearly illustrates the speedup gained by using the GPU. Requires XcodeRayTraced_Quaternion_Julia-Set_Example: Applerng: Illustrates how to generate random numbers in the host and in the GPU using the libraryclRNGauger: generates random cosmic rays on an isotropic sky- *
waste: compute cycle waster
The examples that clearly demonstrate the computational advantage of using a GPU for processing are N-BodySimulation, RayTraced_Quaternion_Julia-Set_Example (both developed by Apple programmers) and auger. For auger, I got impressive speedups of >200x compared to a serial code on the CPU.
To learn about your OpenCL devices, try:
clinfo
To install clinfo on MacOS:
brew install homebrew/science/clinfo
- OpenCL introduction, S. Grauer-Gray
- OpenCL introduction, F. Desprez
- Vector addition in OpenCL (Oak Ridge National Lab)
- Getting started with OpenCL and GPU computing, by E. Smistad
- A gentle introduction to OpenCL, Dr. Dobbs. Includes interesting analogies, but may be too hard as a first read
- Hands-on OpenCL
- AMD OpenCL course
- Introduction to OpenCL, Manchester
If you are really happy with these examples, you can buy me a beer. Perhaps I could create a similar repo with CUDA examples?