MPCS 52060 Parallel Programming (Autumn 2022)

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

Syllabus

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 

Coursework 

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 (completed or concurrently enrolled). Must have a High Pass or higher on the Programming Placement Exam.

Other Prerequisites

Familiarity with C, Java, and/or Python.

This course requires competency in Unix and Linux. Please plan to attend the MPCS Unix Bootcamp (https://masters.cs.uchicago.edu/page/mpcs-unix-bootcamp) or review the UChicago CS Student Resource Guide here: https://uchicago-cs.github.io/student-resource-guide/

Overlapping Classes

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

  • MPCS 51046-1 -- Intermediate Python Programming
  • MPCS 55001-1 -- Algorithms
  • MPCS 54233-1 -- Foundations of Computer Networks

Eligible Programs

Masters Program in Computer Science 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)