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
In the programs
- Semester: Spring
- Exam form: During the semester (summer session)
- Subject examined: Parallelism and concurrency in software
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 1 Hour(s) per week x 14 weeks
- Lab: 2 Hour(s) per week x 14 weeks
- Type: optional
- Semester: Spring
- Exam form: During the semester (summer session)
- Subject examined: Parallelism and concurrency in software
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 1 Hour(s) per week x 14 weeks
- Lab: 2 Hour(s) per week x 14 weeks
- Type: optional
- Semester: Spring
- Exam form: During the semester (summer session)
- Subject examined: Parallelism and concurrency in software
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 1 Hour(s) per week x 14 weeks
- Lab: 2 Hour(s) per week x 14 weeks
- Type: optional
Reference week
| Mo | Tu | We | Th | Fr | |
| 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:
Lecture
Exercise, TP
Project, Lab, other