Parallelism and concurrency in software
Summary
From sensors and smartphones to the world's largest datacenters and supercomputers, parallelism & concurrency are now fundamental to modern computing. Understanding when and how to use these technqiues is essential for constructing scalable, high-performance, and efficients applications.
Content
The goal of this course is to provide a deep understanding of the fundamental principles and trade-offs involved in constructing efficient parallel or concurrent software. Accordingly, the following topics are covered in the course:
- Principles of parallel programming
- Shared-memory parallel programming
- Distributed-memory parallel programming
- Memory consistency models
- Synchronization techniques
- Concurrency techniques
- Asynchronous programming using coroutines
- Microservices and RPC
- Introduction to GPUs
- GPU programming using CUDA
Note that the topics are tentative and will be explored at different depths. In-class participatin is strongly recommended.
Learning Prerequisites
Required courses
CS-200 Computer Architecture
CS-214 Software Construction
Recommended courses
CS-202 Computer systems
Important concepts to start the course
- Programming in C/C++, Java or Scala
- Basic assembly language programming
- Basic use of tools to debug
Learning Outcomes
By the end of the course, the student must be able to:
- Construct parallel software
- Construct concurrent software
- Construct efficient software
- Design software for various platforms including CPUs, accelerators and clusters
- Construct parallel software
- Construct concurrent software
- Construct efficient software
- Design software for various platforms including CPUs, accelerators and clusters
Teaching methods
- Lectures
- Projects
Expected student activities
- Projects in teams
Assessment methods
- 30% projects
- 30% midterm
- 40% final
Supervision
| Office hours | Yes |
| Assistant.e.s | Yes |
Prerequisite for
- CS-471 Advanced multiprocessor architecture
- CS-453 Concurrent computing
- CS-451 Distributed algorithms
Dans les plans d'études
- Semestre: Printemps
- Forme de l'examen: Pendant le semestre (session d'été)
- Matière examinée: Parallelism and concurrency in software
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 1 Heure(s) hebdo x 14 semaines
- Labo: 2 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Printemps
- Forme de l'examen: Pendant le semestre (session d'été)
- Matière examinée: Parallelism and concurrency in software
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 1 Heure(s) hebdo x 14 semaines
- Labo: 2 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Printemps
- Forme de l'examen: Pendant le semestre (session d'été)
- Matière examinée: Parallelism and concurrency in software
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 1 Heure(s) hebdo x 14 semaines
- Labo: 2 Heure(s) hebdo x 14 semaines
- Type: optionnel
Semaine de référence
| Lu | Ma | Me | Je | Ve | |
| 8-9 | |||||
| 9-10 | |||||
| 10-11 | |||||
| 11-12 | |||||
| 12-13 | |||||
| 13-14 | |||||
| 14-15 | |||||
| 15-16 | |||||
| 16-17 | |||||
| 17-18 | |||||
| 18-19 | |||||
| 19-20 | |||||
| 20-21 | |||||
| 21-22 |
Légendes:
Cours
Exercice, TP
Projet, Labo, autre