Basic ideas including hardware architectures, memory hierarchies, communications, parallelization strategies, measures of efficiency;
Simple numerical algorithms including matrix operations, Gaussian elimination;
Algorithms on graphs including graph partitioning problems;
Parallel sorting;
More advanced parallel problems including the n-body problem;
Advanced numerical methods including multi-grid and FFT methods;
Standard libraries.
The overall goal of the course is to provide a basic understanding of how to develop algorithms and how to implement them in distributed memory computers using the message-passing paradigm.
This understanding means that after the course you are able to
- explain parallelization strategies;
- select and/or develop an algorithm for solving a given problem which has the potential for an efficient parallelization;
- select and/or develop data structures for implementing parallel computations;
- theoretically analyze a given parallel algorithm with respect to efficiency;
- implement a given algorithm on a distributed-memory computer using the message passing library MPI;
- understand the message flow and avoid unwanted situations (e.g. deadlock, synchronization delays);
- modify and adapt a set of basic routines to special situations;
- experimentally evaluate the performance of a parallel program;
- explain differences between the theoretically expected performance and the practically observed performance.