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 outperforms traditional CPUs for many problems. This is especially true for image processing and machine learning, where the same task is supposed to be done for each pixel or each data point. 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: Huizhong Zhou, Benjamin Ummenhofer


Friday, April 20th, 2018

ECTS Credits:

4 or 6


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


The short lectures will be in English.

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 (20.04.2018): Introduction
Class 2 (27.04.2018, 04.05.2018): Memories
Class 3 (11.05.2018): Textures
Class 4 (18.05.2018): Semi-global Matching (Project)
Class 5 (01.06.2018, 08.06.2018): Debugging
Class 6 (15.06.2018): Optimization
Class 7 (22.06.2018): Algorithms

Exercise material:

Exercise 3 (27.04.2018): Matrix multiplication (solution)
Exercise 3a (27.04.2018) (optional): Matrix transposition
Exercise 4 (04.05.2018): Image Inversion (solution)
Exercise 5 (11.05.2018): Image Scaling/Rotation (solution)
Exercise 6 (01.06.2018): Image denoising (naive solution)
Project SGM (18.05.2018): Semi-global MatchingDue: preliminary: 13.07.2018, final: 20.07.2018