This repository will be used as the website for Parallelism and Concurrency CS-206. It will be updated weekly throughout the semester. This README contains general information about the class.
- previous-exams contains PDFs for the previous exams.
- exercises contains markdown documents for exercises and solutions.
- slides contains the slides presented in class.
- labs contains markdown documents for the labs.
We will use piazza.com/epfl.ch/spring2022/cs206 as discussion forum. Feel free to open a thread if you have any comments or questions.
First-week tasks
- Join the Discord
- Log into gitlab: https://gitlab.epfl.ch/users/sign_in
- Please fill in this form with your GASPAR and SCIPER number
- Please fill in this doodle by picking the room in which you will do the exercises.
- Follow the Tools Setup page.
- Do the example lab.
- Watch all videos under Parallelism 1: Introduction to Parallel Programming below
- Do the first graded lab.
Grading
The grading of the course is divided between labs (30%), midterm exam (30%) and final exam (40%).
Staff
Role | People |
---|---|
Professors | Martin Odersky, Kashyap Sanidhya |
TAs | Dragana Milovancevic, Matthieu Bovel, Simon Guilloud, Tao Lyu, Gupta Vishal |
Student TAs | Mohamed Boukhari, Martin Lenweiter, Nicolas Matekalo, Tuomas Pääkkönen, Abel Wilkinson |
Course Schedule
Lectures are partially live and partially prerecorded (on YouTube). Live sessions will be held on Wednesdays from 14:15 to 16:00 if it is a week with live lecture. Exercise sessions will be held on Wednesdays from 14:15 to 16:00 if it is a week with exercises. Lab sessions will be held on Wednesdays from 16:15 to 18:00. You should watch the prerecorded lectures before doing the exercies.
Week | Date | Topic | Lectures (14:15-16:00) | Exercises (14:15-16:00) | Labs (16:15-18:00) |
---|---|---|---|---|---|
1 | 2022.02.23 | Parallelism 1 | Prerecorded | Welcome session | Lab 1 |
2 | 2022.03.02 | Parallelism 2 | Prerecorded | Exercises 1 | Lab 1 & 2 |
3 | 2022.03.09 | Parallelism 3 | Prerecorded | Exercises 2 | Lab 2 & 3 |
4 | 2022.03.16 | Parallelism 4 | Prerecorded | Exercises 3 | Lab 3 & 4 |
5 | 2022.03.23 | Concurrency 1 | Live | None | Lab 4 & 5 |
6 | 2022.03.30 | Concurrency 2 | Live | None | Lab 5 & 6 |
7 | 2022.04.06 | Concurrency 3 | Live | None | Lab 6 |
8 | 2022.04.13 | Concurrency 4 | Live | None | Lab 6 & 7 |
- | 2022.04.20 | Easter Break | None | None | None |
9 | 2022.04.27 | Midterm Exam | Midterm Exam | None | Lab 7 |
10 | 2022.05.04 | Futures | Live in CO1 | None | Midterm review |
11 | 2022.05.11 | Actors 1 | Prerecorded | Exercises 4 | Lab 8 |
12 | 2022.05.18 | Actors 2 | Prerecorded | Exercises 5 | Lab 9 |
13 | 2022.05.25 | Actors 3 | Prerecorded | Q&A | Final dry run |
Solutions to the exercises are released after each deadline. We do not provide solutions for the labs.
Before each Exercise session, students should watch videos corresponding to that week's topic:
Intro
Parallelism 1: Introduction to Parallel Programming
- Introduction to Parallel Computing
- Parallelism on the JVM I
- Parallelism on the JVM II
- Running Computations in Parallel
- Monte Carlo Method to Estimate Pi
- First-Class Tasks
- How Fast are Parallel Programs?
- Benchmarking Parallel Programs
Parallelism 2: Basic Task Parallel Algorithms
- Parallel Sorting
- Data Operations and Parallel Mapping
- Parallel Fold (Reduce) Operation
- Associativity I
- Associativity II
- Parallel Scan (Prefix Sum) Operation
Parallelism 3: Data-Parallelism
- Data-Parallel Programming
- Data-Parallel Operations I
- Data-Parallel Operations II
- Scala Parallel Operations
- Splitters and Combiners
Parallelism 4: Data-Structures for Parallel Computing
- Implementing Combiners
- Parallel Two-phase Construction
- Conc-Tree Data Structure
- Amortized, Constant-Time Append Operation
- Conc-Tree Combiners
Futures
Actors 1: The Actor Model
- Introduction: why actors?
- The Actor Model
- Message Processing Semantics
- Designing Actor Systems
- Testing Actor Systems
Actors 2: Handling Failure and State
Actors 3: Distributed Computing
- Actors Are Distributed (part 1)
- Actors Are Distributed (part 2)
- Eventual Consistency
- Actor Composition
- Scalability
- Responsiveness
Labs
Labs are individual assignments where you get to write Scala programs using the concepts learned during lectures. Labs are submitted by pushing your code on GitLab, see details in the grading and submission page.
Labs | Name | Start date | Due date (23:59 AoE) |
---|---|---|---|
Lab 1 | Parallel Box Blur Filter | 2022.02.23 | 2022.03.06 |
Lab 2 | Reductions and Prefix Sums | 2022.03.02 | 2022.03.13 |
Lab 3 | K-Means | 2022.03.09 | 2022.03.20 |
Lab 4 | Barnes-Hut Simulation | 2022.03.16 | 2022.03.27 |
Lab 5 | Concurrent Bounded Buffer | 2022.03.23 | 2022.04.03 |
Lab 6 | Lock-free sorted list | 2022.03.30 | 2022.04.17 |
Lab 7 | Hazard Pointer | 2022.04.13 | 2022.05.01 |
Lab 8 | Actors Binary Tree | 2022.05.11 | 2022.05.23 |
Lab 9 | Key-Value Store | 2022.05.18 | 2022.06.03 |
Exercises
Exercises are pen and paper style questions that will help you consolidate the knowledge learned during lectures. Exercises should be done in groups during the lecture.
Exams
The midterm exam will take place on 2022.04.27. The midterm exam will cover all the material seen in the class up to that point.
The final exam will take place on 2022.06.01. The final exam will cover all material seen during the semester.
Information about exams organization will be communicated by email.