GPU Programming Course

Prof. Thomas Brox

In the last couple of years, graphics processors (GPUs) have developed to flexible processing units that can be used for general purpose computing. The highly parallel architecture of todays GPUs often outperforms traditional CPUs for many problems. This is especially true for image processing, where the same task is supposed to be done for each pixel. This allows for making good use of many parallel units.

The goal of this course is to learn how to program GPUs using the CUDA framework. While implementations in CUDA (an extension of C/C++) are not much harder than CPU implementations, the hard part is to make good use of the parallel units and the memory to obtain fast implementations. We will study a number of image processing problems starting with basic ones and then increasing complexity.

In the last part of the course, each student should implement their own small project. You can freely choose the project topic. We will offer some good options.


Fridays, 14hct - 16 (2SWS)

Room: Computer Pool 00-029, Building 082

Contact persons: Thorsten Falk, Artemij Amiranashvili


Friday, April 28th, 2017

ECTS Credits:

4 or 6


Fundamental programming skills in C/C++. Some experience with the Linux toolchain (text editor, compiler, linker, debugger) is recommended.

Code Submission:

Friday, July 21st, 2017


Friday, July 28th, 2017 starting at 14:30h


The short lectures will be in English. Only if all participants understand German, it will be offered in German.

The course is open to both Bachelor students (for their Bachelor project) and Master students (for their lab course). To reflect the larger experience of Master students, their final project is supposed to include more advanced image processing methodologies and be more research oriented. The final project also provides 4 and 6 ECTS variants of the Bachelor project.


Class 1 (27.04.2017): Introduction
Class 2 (5.05.2017): Memories
Class 3 (12.05.2017): Textures
Class 4 (19.05.2017): Debugging
Class 5 (2.06.2017): Semi-global Matching (Project)
Class 6 (16.06.2017): Optimization

Exercise material:

Exercise 3 (5.05.2017): Matrix multiplication
Exercise 3a (5.05.2017) (optional): Matrix transposition
Exercise 4 (5.05.2017): Image Inversion
Exercise 5 (12.05.2017): Image Scaling/Rotation
Exercise 6 (19.05.2017): Image denoising
Project SGM (2.06.2017): Semi-global MatchingDue: preliminary: 14.07.2017, final: 21.07.2017