Parallel programming
PHYS-743
Media
Course description
This two-week intensive course introduces the fundamental concepts, tools, and APIs for debugging, testing, and parallelizing scientific applications on modern HPC clusters. You will learn how to efficiently develop and run scientific codes on both shared-memory (OpenMP) and distributed-memory (MPI) architectures.
The first week combines lectures and guided hands-on sessions, covering topics from sequential code optimization to parallel programming with OpenMP and MPI. Using a simple numerical solver as a running example, you will apply standard tools such as gdb, valgrind, perf, and Intel Amplifier to analyze and improve performance, culminating in a hybrid parallel implementation.
The second week focuses on a personal project, where you will apply the techniques learned to your own (or a provided) scientific application. By the end of the course, you will be able to design, analyze, and parallelize real-world scientific programs effectively on HPC systems.
Prerequisites: Basic programming knowledge in C, C++, Fortran, or Python.
Note: GPUs and accelerators are not covered in this course.
Students must bring their own laptop.
General Information
You can directly obtain the source code for the exercises and course examples using the following links.
Exercises:
> git clone https://gitlab.com/epfl-parallel-programming/parallel-programming-exercises.gitExamples from the course:
> git clone https://gitlab.com/epfl-parallel-programming/parallel-programming-lecture-codes.git
The slides can be directly downloaded from the section below.Monday
Introduction, software development cycle, node optimization
Tuesday
Parallel programming theory, shared memory programming with OpenMP
Wednesday
Distributed memory programming with the Message Passing Interface API (MPI)
- Slides day 3 (File)
- Ring howto (File)
- Excercise MPI (File)
- MPI 3.1 specifications (URL)
- Grid distribution (File)
- Rookie HPC (URL)
- IDRIS MPI course (URL)
- Using MPI (URL)
- Using advanced MPI (URL)
Thursday
Distributed memory programming with advanced MPI
Friday
Hybrid programming : MPI + OpenMP
Projects presentation
Week 2 + 3 : from November 21 to November 30
Personal project weeks
Students have 2 weeks to finish a personal project on their code