Parallel Programming
Full course description
Parallel programming is the paradigm of doing computations on a computer in parallel. This is possible, since nowadays almost all computer systems include so-called multi-core chips. To exploit the full performance of such systems, parallel programming needs to be emploed.
This course covers shared-memory parallelization with OpenMP as well as parallelization with message passing on distributed-memory architectures with MPI. The course starts with a recap of the programming language C followed by a brief theoretical introduction to parallel computing. Next, the course treats theoretical aspects like MPI communication, race conditions, deadlocks, efficiency as well as the problem of serialization. The course is accompanied by practical labs in which the students have the opportunity to apply the newly acquired concepts.
Prerequisites
None.
Recommended reading
Recommended literature: Eijkhout: The Art of HPC Vol. 1 & 2 (https://theartofhpc.com/)
Additional literature: Pacheco: An Introduction to Parallel Programming