The course presents both the hardware and software aspects of parallel programming. Related to the hardware aspect, the course covers the fundamental architecture models of the Flynn taxonomy and the data organization principles for each category. Related to the software aspect, the course firstly provides the general principles of parallel algorithm design. Afterwards, in a more specific way, the course describes how to design and implement programs in a shared-memory programming model using POSIX threads, OpenMP and Java multi-threading. Also the course describes how to design and implement programs in a distributed-memory programming model using MPI. Finally some advanced applications of parallel programming are studied, including the n body problem, sorting and graph problems.
Course aims is to teach students the principles, models, and techniques of parallel programming, enabling them to design, implement, and analyze efficient parallel programs on shared- and distributed-memory systems.
| Week | Topic |
|---|---|
| 1 | Course Overview and Evaluation Criteria |
| 2 | Introduction to Parallel Systems and Types of Parallelism |
| 3 | Fundamentals of Parallel Hardware and Parallel Software |
| 4 | Parallel Architectures and Memory Models |
| 5 | Parallel Programming Models and Concepts |
| 6 | Parallel Algorithms and Collective Communication |
| 7 | Midterm |
| 8 | Introduction to Shared-Memory Programming and Pthreads |
| 9 | Synchronization in Shared-Memory Systems |
| 10 | Shared-Memory Programming with OpenMP - Loop Parallelism |
| 11 | Shared-Memory Programming with OpenMP - Task Parallelism |
| 12 | Introduction to Distributed-Memory Programming with MPI |
| 13 | Advanced MPI Programming and Performance Considerations |
| 14 | Applications of Parallel Programming – The N-Body Problem |
| Method | % Each | Quantity |
|---|---|---|
| Midterm Exam(s) | 30 | 1 |
| Project | 20 | 1 |
| Laboratory | 20 | 1 |
| Final Exam | 30 | 1 |
Primary textbook: "Introduction to Parallel Programming book" by Peter Pacheco. Additinal textbook: "Introduction to Parallel Computing" by A.Grama, A.Gupta, G.Karypis, V.Kumar