The purpose of this course is to introduce students to parallel programming. By the end of the course students will be able to design and implement working parallel programs in traditional (e.g., Java Threads) and emerging parallel programming models. Moreover, students will master fundamental concepts in parallelism and be able to reason about the correctness, performance, and the construction of parallel programs using different parallel programming paradigms (e.g., task parallelism, data parallelism) and mechanisms (e.g., threads, tasks, locks, communication channels). Finally, the course will examine how parallel programming methodologies can be applied in different algorithmic domains by investigating parallelization of algorithms.
Topics include:
Main text and reference book
Related resources, text and reference books
Introduction to Java books (freely available)
All material is available on Moodle.
| Date | Title |
|---|---|
| Introduction & Course Overview | |
| Java Recap and JVM Overview | |
| Introduction to Threads and Synchronization (Part I) | |
| Introduction to Threads and Synchronization (Part II) | |
| /td> | Introduction to Threads and Synchronization (Part III) |
| /td> | Parallel Architectures: Parallelism on the Hardware Level |
| Basic Concepts in Parallelism | |
| Divide & Conquer and Executor Service | |
| DAG and ForkJoin Framework | |
| Parallel Algorithms (Part I) | |
| Parallel Algorithms (Part II) | |
| Shared Memory Concurrency, Locks and Data Races | |
| Virtual Threads | |
| Exam Preparation (First Half) |
All material (exercise slides and exercises) is available on Moodle.
All exercises start in the first week of the semester.
| Week | Title | Due Date |
|---|---|---|
| 1 | Introduction |
There is a written, centralized exam after the end of the semester. Exercise sessions are not graded.