Every day consists of 3.5h lectures in the morning and 3.5h hands-on lab in the afternoon.
Week 1
Introduction to HPC and parallelism - Introduction to basic concepts of HPC and parallel computing; modern parallel architectures.
HPC Tools - HPC software stack and HPC environment; basic utilisation of an HPC facility
Single-Core optimisation - How to write efficient code on modern CPU architectures (basic elements).
Execution model.
Introduction to Debugging and profiling.
Multi-Threading: basic OpenMP - Parallel thinking and paradigms for parallel computing. How to express parallelism.
Introduction to OpenMP.
Laboratory:
Set up the accounts on the HPC platform. Writing and submitting jobs of different types; working on interactive sessions on the nodes
Evolve codes from naive to more efficient implementation.
Debug and profile example codes (or codes proposed by the participants).
Parallelize the example serial codes (or codes proposed by the participants).
Week 2
Multi-Threading: advanced OpenMP - Selected more advanced topics and techniques in multithreading with OpenMP.
Distributed memory with MPI - How to express parallelism in distributed memory paradigm with MPI.
Introduction to basic and intermediate MPI.
Off-loading to GPUs - Basic elements on how to off-load calculations on GPUs using both OpenMP and OpenACC
Laboratory
Parallelize the example serial codes or evolve an already parallel code.
Parallelize the same code as in days 4-5, using a distributed memory approach.
Use more advanced features to parallelize more complex examples.
Use of Pragmas to accelearate codes.