MPCS 51087 High Performance Computing (Winter 2026)

Section 1
Instructor(s) Siegel, Andrew (siegela)
Location Crerar 298
Meeting Times Monday 6pm - 8pm
Fulfills Elective Specialization - High Performance Computing (HPC-1)

Syllabus

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:

 

  • Overview of CPU and GPU Architectures
    • Instruction sets
    • Functional units
    • Memory hierarchies
  • Performance Metrics
    • Latency and bandwidth
    • Roofline modeling
  • Single-core optimization
    • Compiler-assisted vectorization (data-level parallelism)
    • Design patterns for cache-based optimization
  • Multi-threaded CPU programming
    • Worksharing, synchronization, and atomic operations
    • Memory access patterns, including non-uniform memory access
    • The OpenMP API
  • GPU programming
    • Thread-mapping for optimal vectorization and memory access
    • Task-scheduling for latency reduction
    • The CUDA and OpenMP offload APIs
  • Distributed parallelism
    • Synchronous and asynchronous communication patterns
    • Data decomposition
    • Hybrid models for distributed multi-threaded and GPU programming
    • The MPI API

 

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. 

 
Grading is as follows:
  • Assignments: 50%
  • In-class midterm: 25%
  • In-class final: 25%

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. 

Course Prerequisites

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).

Other Prerequisites

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/

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 51042-1 -- Python Programming
  • MPCS 51030-2 -- iOS Application Development

Eligible Programs

MS in Computational Analysis in Public Policy (Year 2) MS in Molecular Engineering MA in Computational Social Science (Year 2) Bx/MS in Computer Science (Option 1: Research-Oriented) Bx/MS in Computer Science (Option 2: Professionally-oriented - CS Majors) Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors) Masters Program in Computer Science