In this course, we will introduce high-performance computing (HPC) in the context of applied mathematics.

Content

It will be based on three main pillars of HPC:

  • 1) Single-core performance:
    Here, the students will be made familiar with the basics of computer architectures such as the Instruction Set Architecture (ISA), Memory access, Caches, Registers, Stack, Pipelining, Superscalar execution, SIMD. This allows them to understand the single-core performance of programs.
  • 2) Shared-memory systems:
    The students will be made familiar to shared-memory HPC systems and their parallelization models. For practical aspects, we will use the OpenMP programming model with its fork-join and tasking models.
  • 3) Distributed-memory systems:
    In this part, the students will learn how to use MPI to parallelize their programs for large scale super computers.
In addition to that, students will be made familiar to theoretical concepts such as scalability models (Amdahl, Gustafson), Flynn's taxonomy, von-Neumann architecture, etc.

Different lab assignments allow the students to gain a practical understanding of high-performance computing.

Prerequisites

  • Programming language:
    • Either being already familiar with the C or C++ programming language
    • OR being willing to do a short tutorial about C on your own.
  • Computer fundamentals:
    • Binary/hexadecimal systems, floating point numbers
    • Using Linux-based computers, ssh access to other computers, bash