Introduction to Parallel Programming (Inactive - see F21 website)

Instructor: Kathy Yelick (send email), Office Hours Fridays 12-1 via zoom or by appointment

TA: Ben Brock (send email), Office Hours (Sept. 7 office hours moved to Tuesday, Sept. 8 at 1 PM) Monday 10-11am and Thursday 2pm by Zoom

Lectures: M-W 9-10:00am via zoom.

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

Overview

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.

Schedule:

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 9-10am PT and will be "synchronous" on Zoom but also recorded. Although the registrar lists lectures as being 9-10:30, we will use the extra hour of class time for a smaller group Lab/Discussion.

  • Lab: 5pm PT Wednesday or 1pm PT Thursday. You will receive email with assignments for one of these times and are expected to participate during Lab. (These will sometimes being discussion sections style, and sometimes involved a hands-on activity. They are shown in the calendar below simply as "Lab" on Thursday, although will happen both days.)

  • Homework: due on Mondays at 9pm PT.

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

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

Units:

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 near the end of each unit. This schedule is tentative, although the quiz dates as noted above are fixed (barring unforeseen circumstances.

Grades:

Grades will be 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 ise available in the course overview.

Official Schedule