Introduction to Parallel Programming

Instructor: Kathy Yelick (send email), Office Hours Fridays 3-4 pm on zoom (sign up here)

TAs: Alok Tripathy (send email), Office Hours M, Th 1-2pm PT in Soda 569

Alex Reinking (send email), Office Hours F 11am-12pm PT on zoom

Lectures: M-W 2-3:00pm in 306 Soda (will also be webcast on zoom and recorded)

Discussion Section / Lab: 1 hour per week (Monday or Wednesday)


This course will cover performance programming (memory hierarchy optimizations, SIMD, prefetching, etc.), performance analysis and modeling, shared memory parallelism, GPU programming, and message passing programming for clusters. Students who complete this course will be prepared to use and understand parallel computing concepts and software frameworks in the context of academic research or industry jobs. The programming projects will look at algorithms used in real-world applications such as machine learning, genomics, image analysis, epidemiological modeling, etc. The goal is for students to learn how to build high-performance implementations and understand the performance of computational systems, combining both algorithmic understanding and measurements.

Required Background:

  • CS61A,B,C, CS70, and either Math54 or EECS61A

  • Experience programming in C or C++ is also expected, or you should expect to spend some extra time getting up to speed on C++ (mainly the C subset)

  • There is significant overlap with CS267, so you should not take both courses. We encourage graduate students to take CS267 and undergraduates to take this course.


A schedule for the semester is below. We may make adjustments, but please mark your calendars now for the 4 quiz dates.

  • Lectures: Monday/Wednesday 2-3pm PT and will be in person in 306 Soda, as well as streamed "synchronously." Lectures will also be recorded and available through the links in the schedule below. Although the registrar lists lectures as being 2-3:30pm, we hope to use the extra hour of class time for a smaller group Lab/Discussion.

  • Lab: You will receive email with assignments for a Lab times and are expected to participate during Lab. (These will typically involve some types of hands-on activity. They are shown in the calendar below simply as "Lab" on Thursday, although will happen earlier in the week.)

  • Homework: There will be weekly homework assignments that are generally due on Mondays at 9pm PT. (Due dates may move to address conflicts, etc.) There will be between 10 and 14 homework assignments with both a written and programming part. Some may only contain one of those parts.

  • Quizzes: Four quizzes will be held on Tuesdays evenings (9/14, 10/12, 11/9, 11/30). The dates are fixed, and the time is set for 6pm PT. These will be online.

There will be no final project and no final exam. All lectures and labs will be online for the time being.


The course will be divided into 4 units: 1) serial performance programming; 2) shared memory parallelism; 3) GPU programming; 4) distributed memory programming. Each is shown in a different color in the schedule below, with a quiz at the end of each unit.


Grades will be based 50% quizzes, 40% homeworks, and 10% Labs. The course will not be curved, and we'll be thrilled if everyone learns the material and gets and A. More information on grading is available in the course overview (link at the top).

Class Schedule F21