| Section | 1 |
|---|---|
| Instructor(s) | Siegel, Andrew (siegela) |
| Location | Crerar 298 |
| Meeting Times | Monday 6pm - 8pm |
| Fulfills | Elective Specialization - High Performance Computing (HPC-1) |
Course Description
Parallel programming is ubiquitous in both the largest compute clusters and the smallest, low-power embedded devices. Though this has been the status quo for many years, achieving optimal parallel performance can still be a challenging, multi-disciplinary effort.
In this course, we will focus on compute-intensive (rather than data-intensive) parallel programming, representative of numerical applications. Computer architecture and systems will be a pervasive theme, and we will discuss how parallel APIs map to the underlying hardware.
We will implement and optimize C/C++ applications on large-scale, multicore CPU and GPU compute clusters. We learn widely-used parallel programming APIs (OpenMP, CUDA, and MPI) and use them to solve problems in linear algebra, Monte Carlo simulations, discretized partial differential equations, and machine learning.
The majority of coding assignments can be completed in either C or C++. Certain applications will require coding portions in pure C; however, in these cases, we will cover the requisite information for those with previous exposure to only C++. Previous or concurrent courses in systems and architecture can be helpful, but no prerequisite knowledge of systems/architectures is assumed.
Topics:
Throughout the course, will draw on examples from linear algebra, Monte Carlo simulations, discretized partial differential equations, and machine learning.
Coursework
The coursework consists of several multi-week projects, with milestones due in interim weeks.
The mid-term and final exams will closely align with the projects, encouraging you to engage deeply with the core concepts by working through them manually, rather than relying on code generators or tools that bypass direct interaction.
Textbooks
We will draw on material from the following texts. None are required, but they can be helpful resources throughout your career.
Must have completed MPCS 51036, 51040, 51042, 51046, 51100, CAPP 30122, MACS 30122, or have a Core Waiver for Programming.
Knowledge of C or C++ is required for this class. MPCS 51040 C Programming or MPCS 51100 Advanced Programming is recommended or can complete the MPCS C Programming Bootcamp (offered in January 2026).
This course requires competency in Unix and Linux. If you attended the MPCS Unix Bootcamp you covered the required material. If you did not, please review the UChicago CS Student Resource Guide here: https://uchicago-cs.github.io/student-resource-guide/.
Course request information for non-MPCS students: https://masters.cs.uchicago.edu/student-resources/non-mpcs-student-course-requests/
This class is scheduled at a time that conflicts with these other classes: