Parallel Programming for Scientific Computing 2022
PhD-level course, 5 hp
Teacher: Martin Kronbichler
Overview
The course focuses on providing knowledge on and practical experience of using parallel programming models for implementation of computational methods, with a particular emphasis on high-performance computing. We will cover a few widespread models and paradigms for parallel programming. The course is focused on hands-on experiments and the examination is performed by solving assignments that are adapted to the prerequisites and expectations of each student.
Prerequisites
It is assumed that the students have basic knowledge and experience of standard parallel programming techniques (MPI, OpenMP), at a level corresponding to what is provided by the undergraduate course Programming of Parallel Computers, 10 hp, including good familiarity with the C/C++ programming language family.
Course content
- Introduction to programming paradigms in scientific computing
- Current development of parallel computers and implications for parallel programming
- Utilizing SIMD on modern CPUs: autovectorization vs SIMD for outer loops
- GPU programming with CUDA
- Performance portability with Kokkos
- OpenCL programming
- Task-based programming
- Advanced MPI programming: shared memory concepts, sparse communication
- Performance engineering
Practical examples used for evaluation
- Finite-difference stencil in explicit time integration or conjugate gradient solvers (small C++ program)
- Multigrid solvers with red-black-Gauss-Seidel smoothening
- Finite-element application based on deal.II finite element library with advanced SIMD programming and MPI parallelization (big C++ code)
- Your own application in case there are interesting algorithms
Format
The course will consist of lectures and hands-on sessions.
Examination
To pass the course, each student must complete two small assignments covering different programming tools as well as work on a bigger project solving either a pre-defined problem or your own application.
Course schedule
The first lecture will take place on February 18, 13:00-14:45, in room 10234. The times and rooms for later lectures will be agreed upon between the students and the teacher, with approximately 1-2 lectures per week.