Credits: 5

Schedule: 10.04.2017 - 19.05.2017

Teaching Period (valid 01.08.2018-31.07.2020): 

V (Spring)

Learning Outcomes (valid 01.08.2018-31.07.2020): 

After this course, you will know how to write computationally intensive C or C++ code that makes an efficient use of dozens of CPU cores. You will learn how to partition large-scale computations between multiple processor cores, and how to choose the best memory layout for your data structures. You will also get hands-on experience of offloading computations from CPUs to GPUs. You will learn new kinds of algorithm design techniques that are relevant in the context of parallel computers, and you will also learn which of these techniques actually work in practice on modern multicore CPUs and GPUs.

Content (valid 01.08.2018-31.07.2020): 

This is a practical hands-on course on algorithm engineering for modern parallel computers. The students will learn how to design programs that make the best possible use of  the computing power of multicore CPUs and GPUs. The course projects will cover both numerical and combinatorial problems; the sole objective is to solve the task at hand in the shortest  possible time. We will learn a whole range of techniques for speeding up computations, from bit manipulation hacks and special CPU instructions to high-level techniques such as choosing the right memory layout that makes the best possible use of the cache hierarchy. The main tools that we will use are C or C++, OpenMP or Intel TBB, and OpenCL or CUDA.

Assessment Methods and Criteria (valid 01.08.2018-31.07.2020): 

Programming exercises.

Study Material (valid 01.08.2018-31.07.2020): 

Available online.

Substitutes for Courses (valid 01.08.2018-31.07.2020): 

ICS-E4020 Programming Parallel Computers

Prerequisites (valid 01.08.2018-31.07.2020): 

No prior knowledge of parallel programming is needed. Students should have a good understanding of computer programming, algorithms and data structures, and a working knowledge of either C or C++ programming language. While this course is primarily targeted to Master students, advanced Bachelor students are welcome to join if they have sufficient background knowledge and programming skills. At the minimum, students should have completed all 1st year and 2nd year courses of their Bachelor degree.

Grading Scale (valid 01.08.2018-31.07.2020):