Parallel programming is essential for solving numerical problems that are too hard for sequential programs. This course covers parallel programming with OpenMP and MPI. OpenMP is based on compiler directives and is the dominant parallel programming paradigm for shared-memory systems, while the Message Passing Interface (MPI) is a library standard that enables writing parallel programs on distributed-memory computers. After a basic introduction to parallel computer hardware (multicore CPUs, clusters, supercomputers) and the theory of parallel computing, OpenMP and MPI are introduced using simple examples and application scenarios from computational science: linear algebra primitives, parallel integration, parallel solvers, etc. The performance aspects and possible correctness and performance pitfalls in parallel programming are covered in detail. Practical exercises enable students to apply all concepts in their own programs.


Paralleles Programmieren ist unerlässlich, wenn ein numerisches Problem mit einem sequenziellen Programm nicht mehr zu lösen ist. Dieser Kurs behandelt die parallele Programmierung mit OpenMP und MPI. OpenMP basiert auf Compilerdirektiven und ist das vorherrschende parallele Programmierparadigma für Systeme mit gemeinsam genutztem Speicher, während das Message Passing Interface (MPI) ein Bibliotheksstandard ist, der das Schreiben paralleler Programme auf Computern mit verteiltem Speicher ermöglicht. Nach einer grundlegenden Einführung in die parallele Computerhardware (Mehrkern-CPUs, Cluster, Supercomputer) und die Theorie des parallelen Rechnens werden OpenMP und MPI anhand einfacher Beispiele und Anwendungsszenarien aus der Computerwissenschaft vorgestellt: Basisoperationen der linearen Algebra, parallele Integration, parallele Löser usw.. Die Performanceaspekte und mögliche Fallstricke bei Korrektheit und Performance paralleler Programme werden ausführlich behandelt. Praktische Übungen ermöglichen es den Studierenden, alle Konzepte in ihren eigenen Programmen anzuwenden.