High Performance Computing (1000-218bHPC):
summer 2019/2020

High Performance Computing (HPC) has a significant impact on the modern world, from numerical weather prediction to long-term climate simulations, or from in-silico protein folding models to simulations of galaxies. A modern supercomputer is composed of thousands of nodes, each equipped with multi-core processors and, often, thousands of cores on accelerators. These platforms need a new, distinct perspective on design and implementation of algorithms because of their huge scale, heterogeneity (accelerators and CPUs), relatively frequent failures and performance differences of orders of magnitude between the local and the remote memory.

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 materials

lectures notes and lab materials are on moodle.

grading

See the slides for the first lecture.

schedule

An ical version for your calendar app.

An online version: