Practical Course on High-Performance Computing

This practical course comprises two parts: firstly, a crash course on the basics of High-Performance Computing is delivered during a one-week block tutorial. Including hands-on exercises, it will cover theoretical knowledge regarding parallel computing, high-performance computing, supercomputers, and the development and performance analysis of parallel applications. Practical demonstrations will encourage you to utilize the GWDG cluster system to execute existing parallel applications, start developing your own parallel application using MPI and OpenMP, and to analyze the performance of these applications to ensure they run efficiently.

On the first day of the tutorial, we will help you form groups of three four people to work on the exercises. We will form a learning community that will blend into the second part of the course.

For students, we will present on the last day of the tutorial a group assignment that you will have to solve in pairs.

If you are just interested to learn about parallel programming and don't need credits, you can join only the first part of the course and gain a certificate.

This course is suitable for Bachelor and Master students and the block course is suitable for GWDG academy participants. We aim to form suitable learning groups for all attendees.

Contact Julian Kunkel
Location Broadcast: Breakout:
Time Full week: Monday. 17.04.23 - Friday. 21.04.23 - 09:00 - 18:00, Final presentation TBD
Language English
Module Modul M.Inf.1829: Praktikum High-Performance Computing
Credits 5,6,9 (depending on the course)
Contact time up to 84 hours (63 full hours), depending on the course
Independent study up to 186 hours
Tutors Jonathan Decker, Julian Kunkel

Module description

Please note that we plan to record sessions (lectures and seminar talks) with the intent of providing the recordings via BBB to other students but also to publish and link the recordings on YouTube for future terms. If you appear in any of the recordings via voice, camera or screen share, we need your consent to publish the recordings. See also this Slide.

The students will be able to

  • Construct parallel processing schemes from sequential code using MPI and OpenMP
  • Justify performance expectations for code snippets
  • Sketch a typical cluster system and the execution of an application
  • Characterize the scalability of a parallel application based on observed performance numbers
  • Analyze the performance of a parallel application using performance analysis tools
  • Describe the development and executions models of MPI and OpenMP
  • Construct small parallel applications that demonstrate features of parallel applications
  • Demonstrate the usage of an HPC system to load existing software packages and to execute parallel applications and workflows
  • Demonstrate the application of software engineering concepts
  • Construct a small quantum computer program

The block seminar contains sessions that contain short lectures followed by hands-on exercises that teach the most relevant aspects of the concepts and tools. The hands-on typically starts with a short tutorial as a walk-through followed by guided learning based on a provided worksheet with exercises and descriptions. Participants can take breaks as necessary during guided learning.

Computer science students, please attend still your lectures, this year the easter vacations are unfortunately located such that scheduling is difficult.

This part is attended by BSc/MSc students and GWDG academy participants

Everyone, please prepare via the information given in this sheet Prep exercise

Monday 17.04.2023

Introductory day – optional for computer students Slides

  • 09:00 - 9:45 Welcome, Organization of the day and study groups – Julian Kunkel
    • (30 min) Exercise getting to know each other Exercise Code
  • 09:45 - 12:00 Crash Course for Linux ShellRuben Kellner Slides
    • Exercise (login to the cluster) Exercise
  • 12:00 - 13:00 Lunch Break
  • 13:00 - 14:00 GitJonathan Decker Slides
  • 14:00 - 17:00 Crash Course for Linux Ruben Kellner Slides
    • Lecture Overview Linux System/Folders/Editors
    • Exercise Compilation of applications

Tuesday 18.04.2023

  • 09:00 - 09:50 Welcome, Organization of the practical course and study groups – Julian Kunkel Slides
    • (30 min) Exercise getting to know each other Exercise Code
  • 09:50 - 10:30 Overview on parallel computingJulian Kunkel
  • 10:30 - 12:00 Using a cluster for remote computation – introductionAzat Khuziyakhmetov Slides
    • Exercise
  • 12:00 - 13:00 Lunch Break
  • 13:00 - 14:30 Managing Software using SpackAzat Khuziyakhmetov Slides
  • 14:30 - 16:00 Debugging with GDB + ValgrindJack Ogaja Slides Exercise Code
  • 16:00 - 18:00 Using Slurm to run applications on the clusterAzat Khuziyakhmetov Slides

Wednesday 19.04.2023

  • 09:00 - 10:00 Basic Principles of Parallel ComputingOswald Haan Slides
  • 10:00 - 11:00 MPI: General Introduction Slides
    • Exercise: Compiling and Running MPI-Programs Exercise
  • 11:00 - 12:00 MPI: Point to Point Communication (1) Slides
  • 12:00 - 13:00 Lunch Break
  • 13:00 - 14:00 MPI: Point to Point Communication (2) Slides
  • 14:00 - 16:00 Parallel Application: Calculation of pi Slides
  • 16:00 - 18:00 MPI: Collective Communication Slides Exercise

Thursday 20.04.2023

  • 09:00 - 11:00 Programming with pthreadsVanessa End Slides Exercise Code
  • 11:00 - 12:00 OpenMP (Lecture + Tutorial)Julian Kunkel Slides Exercise Code
  • 12:00 - 13:00 Lunch Break
  • 13:00 - 16:00 OpenMP (Exercise)
  • 16:00 - 18:00 Quantum Computing - A brief introduction for the curiousChristian Boehme Slides Exercise Code

Friday 21.04.2023

  • 09:00 - 10:00 Introduction performance engineeringJulian Kunkel Slides Exercise
  • 10:00 - 12:00 BenchmarkingAasish Kumar Sharma Slides Exercise
    • Exercise: How to write a benchmark
      • Theoretic assessment of benchmarking results
  • 12:00 - 13:00 Lunch Break
  • 13:00 - 14:00 Node Level Performance Analysis (NLPA): LIKWID performance tool-suiteJack Ogaja Slides Exercise Code
    • Exercise: Using LIKWID Wrapper, Process Affinity & Performance Counters tools
  • 14:00 - 16:00 Performance Analysis with VampirJack Ogaja Slides Exercise
  • 16:00 - 17:30 Parallelization with PythonHendrik Nolte Slides Exercise
  • 17:30 - 18:00 Description of the group assignmentJulian Kunkel, Jonathan Decker Sheet

Students, please register using StudIP. GWDG Academy participants, please register there.

This remaining part is mandatory for BSc and MSc students to obtain the credits but can be skipped if you just want to join the block course.

In order to obtain the credits, you will parallelize a non-trivial problem of your choice using the concepts and tools learned during the block course. As an alternative option, you could choose from an administrative topic that we derive from a practical problem at the GWDG.

Firstly, you will decide upon a problem you like to solve, then you will create a sequential solution to this problem, and lastly, you apply the experience of the block course to parallelize your application and analyze its scalability. You need to prepare a presentation for your fellow students as well as document your solution in a report. Both the presentation and the report are due at the end of the term and will be assessed and marked.

To obtain the credits, students must develop their (own) group project. A presentation of 20 min and report (max 15 pages per group member) must be created. The mark consists of 30% presentation and 70% report.

The report must be submitted as a PDF file. The source code must be handed in as well. Optimally as a Gitlab or Github repository.

This attendance of the virtual project meetings is mandatory for BSc and MSc students to obtain the credits.

There will be three project meetings in which the groups introduce their results. These meetings are not marked but provide valuable feedback toward your project. In the first seminar, the project idea and rough implementation plan are shared. The second seminar will introduce a report and gives you the opportunity to ask questions regarding the preparation of the report. In the final meeting, the project results are shared.


  • 05.05.2023 - Submit the project title to Jonathan and group composition - we will then assign a supervisor to you
  • 17.05.2023 16:15-17:45 ( - Project introduction: Students present their project idea and project plan (5 (+5) min per group)
  • 2023-07-03 16:15-17:45 - Result presentation Students present their project results (20 min per group)
    • Rusty Parallel Traveling Salesman Problem Solver - Lars Quentin, Johann Carl Meyer
    • Visualization of Circle Collisions using Quad- and Octa-trees - Evgeni Uschakov, Eliah Windolph
    • Parallelization of Selected ASTC Texture Compression Format Functions - Tim Dettmar
    • Predator and Prey Simulation in Python - Jannis Rowold, Leander Feldmann
  • 2023-07-10 16:15-17:45 - Result presentation Students present their project results (20 min per group)
    • Cars in the traffic of a city network and resulting traffic jams in Go - Valerius Albert Gongjus Mattfeld, Bianca Vetter
    • Configurable Genetic Algorithm to Evolve Hardware in Python - Winfired Oed
    • Simulation of a simplified ecosystem to study the influence of environmental factors on bee populations - Henrik Jonathan Seeliger, Georg Eckardt
  • 2023-07-17 16:15-17:45 - Result presentation Students present their project results (20 min per group)
    • Parallelization of Maximum flow problem in big graphs - Zoya Masih, Jonas Hafermas
    • Predator-Prey Relationship of a Closed System with basic ML Brains - Kimia Taba, Vincent Hasse
  • 2023-09-30 Last day of term - Submission of your report to the supervisor

Projects should cover either the creation and parallelization of an interesting problem such as:

  • Determine optimal moves (search tree method) for games.
  • (Simple) predator-prey relationship of a closed system with animal migration.
  • Cars in the traffic of a city network and resulting traffic jams.
  • Astrophysical computations.
  • Skat, Go or robot simulation
  • Longest path problem
  • Solving large logical formulas
  • Algorithms from bioinformatics
  • Strategies for placing airplane passengers

Most important is the correct parallelization (possibly with alternatives) and evaluation. Detailed knowledge of numerics or a precise representation of the model is not required.

Alternatively, we provide a list of specific topics that are motivated by our needs in the data center, these may cover administrative aspects as well. We are open to further suggestions.

Examples can be found in the course from last year or here. Have a look at the results and videos generated.

For a generic parallelization project, some contents should be worked on and accordingly included in the presentation and elaboration, the aspects are:

  • Concepts of the underlying (application) model.
  • Parallelization scheme (communication pattern, distribution of data & tasks).
    • Parallelization should be done with MPI (optional: shared memory parallelization with threads or OpenMP).
  • Performance analysis of the sequential code (does it behave as expected).
  • Scaling behavior of the parallel version
    • Speedup diagrams
    • Potential analysis with Vampire/Sunshot
  • Performing an optimization of the parallel version (communication scheme etc.)

This is a list of topics for the individual projects that are motivated by our needs in the data center. We welcome it if you propose your own simulation, parallelization, or administrative topic. Even for our suggested topics, you will have some room for developing the topic in the direction of your choice.

  • Lars Quentin
  • Johann Carl Meyer

Supervisor: Artur Wachtel

Presentation: Presentation
Report: Report

  • Valerius Albert Gongjus Mattfeld
  • Bianca Vetter

Supervisor: Jonathan Decker

Presentation: Presentation
Report: Report
Code: Code Analysis

  • Evgeni Uschakov
  • Eliah Windolph

Supervisor: Pavan Kumar Siligam

Presentation: Presentation
Report: Report

  • Kimia Taba
  • Vincent Hasse

Supervisor: Dorothea Sommer

Presentation: Presentation
Report: Report

  • Tim Dettmar

Supervisor: Julian Kunkel

Presentation: Presentation
Report: Report
Code: Code

  • Winfired Oed

Supervisor: Aasish Sharma

Presentation: Presentation
Report: Report

  • Jannis Rowold
  • Leander Feldmann

Supervisor: Jack Ogaja

Presentation: Presentation
Report: Report
Code: Code

  • Henrik Jonathan Seeliger
  • Georg Eckardt

Supervisor: Hauke Kirchner

Presentation: Presentation
Report: Report

  • Zoya Masih
  • Jonas Hafermas

Supervisor: Julian Kunkel

Presentation: Presentation
Report: Report

  • Impressum
  • Privacy
  • teaching/summer_term_2023/pchpc.txt
  • Last modified: 2023-10-23 10:57
  • by