MPCS 52060 Parallel Programming (Spring 2024)

Section 1
Instructor(s) Kenneth Samuels, Lamont (lamonts)
Location JCL 011
Meeting Times Wednesday 5:30pm - 7:30pm
Fulfills Core Systems Elective Specialization - High Performance Computing (HPC-2)


Course Description 

Parallel computing is found everywhere in modern computing.  Multi-core CPUs and GPUs, supercomputers, and even mobile devices such as smartphones all provide ways to efficiently utilize parallel processing on these architectures and devices. The goal of this course is to provide an introduction to the foundations of parallel programming and to consider the performance gains and trade-offs involved in implementing and designing parallel computing systems. Specifically, this course will place an emphasis on concepts related to parallel programming on multicore processors. 

Course Contents

Topics that will be explored in the course will include (but not limited to) the following:
  • Processes and threads 
  • Shared memory
  • Hardware mechanisms for parallel computing 
  • Synchronization and communication for parallel systems 
  • Performance optimizations 
  • Parallel data structures 
  • Memory consistency and hierarchies for parallel computing 
  • Patterns of parallel programming 
  • Parallel programming on GPUs
  • Additional topics dependent on student request and time 


The course will include weekly homework, two exams, and projects. The weekly assignments will contain practice problems to help enforce the concepts learned during a lecture. The projects provide the opportunity to apply the skills you learned to develop systems that can benefit from parallelization. Potential project domains could include: AI and machine learning, computer graphics, cryptocurrency technologies, scientific visualization, etc. 

Course Textbook(s)

This course will not have a required textbook. Along with the lecture notes, students may find the following references helpful in undersntading the course material: 

The Art of Multiprocessor Programming by Maurice Herlihy and Nir Shavit
Additional readings/references will be provided when necessary.  

Course Prerequisites

Core Programming

Other Prerequisites

Familiarity with C, Java, and/or Python.

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:

Overlapping Classes

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

  • MPCS 51215-1 -- Topics in Software: Making an Impact
  • MPCS 53020-1 -- Foundations of Database Systems
  • MPCS 51400-1 -- Functional Programming
  • MPCS 53111-1 -- Machine Learning
  • MPCS 54001-1 -- Networks

Eligible Programs

MS in Computational Analysis in Public Policy (Year 2) MS in Molecular Engineering MA in Computational Social Science (Year 1) 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