High Performance Computing I
This lecture provides an introduction to parallel computer architectures and standard programming interfaces for parallel numerical algorithms. We focus on few numerical algorithms like dense matrix multiplications and LU decompositions which allow us to approach step by step the theoretical peak performance.
- Introduction to the programming language C++ with a special focus on numerical linear algebra
- Memory hierarchies
- Parallel computer architectures
- shared memory with POSIX threads and OpenMP
- distributed systems with MPI
- Monday, 2 pm to 6 pm, Helmholtzstraße 18, room E.20, and in the labs Helmholtzstraße 18, room E.44, and O27/211.
- Friday, 2 pm to 6 pm, Helmholtzstraße 22, room E.04, and in the labs Helmholtzstraße 18, room E.44, and O27/211.
- The first lecture will be on 14 October 2018, 2 pm.
Linear algebra, calculus, numerical linear algebra, and programming are required. We expect some basic knowledge of C. Knowledge of C++ is not required as we provide an introduction to C++. Introduction to High Performance Computing is recommended but not strictly required. Consider, however, that probably considerable more time will be required for the assignments of the lab sessions without the associated introductory lecture of the bachelor program.
The exams will be held orally in March and April 2020. An oral exam takes about 45 minutes. You are free to chose English or German as exam language. An active and successful participation in the labs (at least half of the quizzes are passed) and an registration for the exam at HIS is required.
Resources and examples of the lectures will be posted here:
- 14 October 2019: First steps with vectors in C: notes, session
- 18 October 2019: First steps with matrices in C: notes, session
- 21 October 2019: Selected BLAS level 1 functions, benchmarks and gnuplot: session
- 25 October 2019: Simple cache optimizations: session
- 28 October 2019: Simple cache optimizations for GEMM: session
- 4 November 2019: Cache optimizations for GEMV: session
- 8 November 2019: First steps with C++: session
- 11 November 2019: C++ tools for managing memory buffers: session
- 15 November 2019: Packing matrix blocks for an efficient GEMM implementation: session
- 18 November 2019: GEMM micro kernel, GEMM macro kernel, GEMM frame routine: session
- 22 November 2019: Generic classes, template functions, and static polymorphism: session
- 25 November 2019: Function objects and lambda expressions: session
- 29 November 2019: Unblocked LU factorization: session
- 2 December 2019: More on vector and matrix classes: session
- 6 December 2019: First steps with threads in C++: session
- 9 December 2019: Mutex and condition variables: session
Lab sessions will be held on two times per week. Each session comes with an online guide that summarizes the preceding lecture and provides practical exercises.
Some of the lab sessions come with a quiz which are due a week later:
|1||25 October 2019||4 November 2019, 2pm||quiz01.pdf|
|2||8 November 2019||15 November 2019, 2pm||quiz02.pdf|
|3||18 November 2019||25 November 2019, 2pm||quiz03.pdf|
|4||6 December 2019||13 December 2019, 2pm||quiz04.pdf|
- ISO/IEC 9899 (final draft of C18 standard of 2017)
- ISO/IEC 14882 (final draft of C++17 standard of 21 March 2017)
- Wiki with C++ reference
- In German language: Zur Einführung in die Programmiersprache C empfiehlt sich der Vorlesungsbegleiter der Vorlesung Systemnahe Software I
- Manual of gnuplot 5.0 (PDF)
- Utilities to measure read access times of caches, memory, and hardware prefetches for simple and fused operations
- fmt::printf (type-safe alternative to std::printf)