Course Objectives

1. To give an overview of parallel computing and its programming approaches suitable for different accelerators.
2. To concretely illustrate why and how parallel programming attains the desired levels of performance while ensuring correctness and staying within project schedules.
3. To learn how GPUs work and how they can be utilized for scientific programming.
4. To enable the participants learn the latest trends in supercomputing.
5. To provide practical exposure by giving hands-on experiences in GPU, Xeon-Phi, MPI, OpenMP and GPU Programming.
6. Course is driven through a single cohesive running example: an N-body simulation program..

Course Modules

Module 1 : Basics of Parallel Programming
i) Illustration of Parallel Computing using a pre-packaged application (JPB)
ii) Illustration of Amdahl’s Law

Module 2 : MPI based parallel computing
i) An N-body simulation in MPI
ii) Verification of Correctness & Tuning for performance

Module 3 : OpenMP based parallel computing
i) An N-body simulation in OpenMP
ii) Verification of Correctness & Tuning for performance

Module 4 :GPU based parallel computing
i) Constructs and their behaviour
ii) Sample CUDA programs
iii) An N-body simulation in CUDA

Module 5 : Accelerator based parallel computing
i) Basics of Xeon-Phi programming
ii) Different approaches to Xeon-Phi programming
iii) Hands-on experience : Xeon Phi

Module 6 : Advanced issues in HPC
i) The exascale initiative