High performance computing 1000-218bHPC
The goal of the course is to introduce the fundamental concepts (models, algorithms, and programming techniques) suitable for modern supercomputers. We will start with the parallel (shared-memory) systems. We will program accelerators in the massively-parallel model; and many-core processors in the task-based model. We will introduce the PRAM model to measure theoretical efficiency of the algorithms. We will then study distributed systems. We will show a message-passing programming model (MPI). To estimate efficiency, we will present the latency-bandwidth model. We will also show some fundamental approaches, models and algorithms for work partitioning, planning and scheduling: independent tasks, dependency graphs and divisible load.
Course coordinators
Type of course
Assessment criteria
- 2 projects
- participation in the class
- final exam
doctoral students: the student will be additionally asked to read a selected recent research paper on HPC (and their research area, if applicable); a chat with a lecturer about the article will be a part of the final exam.
Bibliography
- scientific papers (details given during the lectures)
- Ben-Ari “Principles of Concurrent and Distributed Programming”
- Casanova, Legrand, Robert ""Parallel Algorithms""
- Kirk, Hwu “Programming Massively Parallel Processors”
- Cormen, Leiserson, Rivest, Stein ""Introduction to Algorithms"", 1st edition (PRAM), 3rd edition (Cilk)
- Drozdowski, „Scheduling for Parallel Processing”