Parallel Computer Architecture and Programming (CMU 15-418/618)
CMU 15-418/618, Spring 2017
GHC 4401 (Rashid Auditorium)
Course Description

From smart phones, to multi-core CPUs and GPUs, to the world's largest supercomputers and web sites, parallel processing is ubiquitous in modern computing. The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems as well as to teach parallel programming techniques necessary to effectively utilize these machines. Because writing good parallel programs requires an understanding of key machine performance characteristics, this course will cover both parallel hardware and software design.

[kayvonf at cs]
Smith Hall 225
Office hours: Wed 3-4pm,
Fri 4-5pm (ugrad only),
or by appointment
[bryant at cs]
GHC 9125
Office hours: Mon 3-4:30pm
Your fun and helpful TAs:
Alex Poms
[apoms at cs]
Office hours:
Mon 11am-noon
Location: Smith Hall 234
Ravi Mullapudi
[rmullapu at andrew]
Office hours:
Tue 3-4pm
Location: Smith Hall 234
Teguh Hofstee
[thofstee at andrew]
Office hours:
Tue 5:30-6:30pm
Location: Gates Collaborative Commons (5th floor)
Junhong Li
[junhongl at andrew]
Office hours:
Thu 6-7pm
Location: Gates Collaborative Commons (5th floor)
Yicheng Fang
[yichengf at andrew]
Office hours:
Sun 5-6pm
Location: Gates Collaborative Commons (5th floor)
Tao Ye
[taoy1 at andrew]
Office hours:
Thu 3-4pm
Location: Gates Collaborative Commons (5th floor)
Anant Subramanian
[assubram at andrew]
Office hours:
Wed 5-6pm
Location: Gates Collaborative Commons (5th floor)
Riya Savla
[rds at andrew]
Office hours:
Fri noon-1pm
Location: Gates Collaborative Commons (5th floor)

15-213/513 (Intro to Computer Systems) is a strict prerequisite for this course. We will build directly upon the material presented in 15-213, including memory hierarchies, memory management, basic networking, etc. While 18-447 (Intro to Computer Architecture) would be helpful for understanding the material in this course, it is not a prerequisite. Students are expected to be strong C/C++ programmers as there will be exposure to a variety of "C-like" parallel programming languages in this course. Previous experience with operating systems (15-410), distributed systems (15-440), or compilers (15-411) may prove to be very helpful.


There is no required textbook for 15-418/618. However, you may find the following textbooks helpful. However, in general these days there's plenty of great parallel programming resources available for free on the web.

David E. Culler and Jaswinder Pal Singh, with Anoop Gupta
Parallel Computer Architecture: A Hardware/Software Approach. Morgan Kaufmann, 1998

John L. Hennessy and David A. Patterson
Computer Architecture, Fifth Edition: A Quantitative Approach. Morgan Kaufmann, 2011

Jason Sanders
CUDA by Example: An Introduction to General-Purpose GPU Programming. 1st Edition. Addison-Wesley. 2010

David Kirk and Wen-mei Hwu
Programming Massively Parallel Processors, Second Edition: A Hands-on Approach. 2nd Edition. Morgan Kauffmann. 2012

Discussion Boards

We will be using Piazza for general class announcements. The 15-418/618 Piazza page is located here. The link to sign up for the class on Piazza is here.

Assignments, Projects, and Exams (What you'll be doing!)

Programming assignments. Students will complete four programming assignments. Assignment 1 will be performed individually. The remaining three assignments may be performed in groups of at most two. Although it is not necessary to have a partner in 15-418/618, it is highly recommended.

Take home quizzes. Students will complete take-home quizzes assigned every two weeks (six in total). Quizzes will be released on Wed night and be due the next Friday at 10am. These quizzes must be completed individually without discussion with other students, but will be graded on a participation basis only.

Making per-lecture comments. Each student must individually contribute one interesting comment per lecture using the course web site.

Final project. Over the last six weeks of the course students will propose and complete a self-selected final project. The final project can be performed individually or in groups of two. Each team will present the project orally during the 15-418/618 Parallelism Competition and produce a detailed write-up describing their work and results.

Exams. There will be two in-class exams.

  • Programming Assignments (4): 7% + 10% + 12% + 10% = 39%
  • Exams (2): 28%
  • Final Project: 28%
  • Participation (quizzes and on-line comments): 5%

Late hand-in policy. Each student is allotted a total of five late-day points for the semester. Late-day points are for use on programming assignments only. (They cannot be used for quizzes or final projects) Late-day points work as follows:

  • A one-person team can extend a programming assignment deadline by one day using one point.
  • A two-person team can extend a programming assignment deadline by one day using two points.
    (e.g., one point from each student)
  • If a team does not have remaining late day points, late hand-ins will incur a 10% penalty per day
    (up to three days per assignment).
  • No assignments will be accepted more than three days after the deadline.
Collaboration Policy

Students in 15-418/618 are absolutely encouraged to talk to each other, to the TAs, to the instructors, or to anyone else about course assignments. Any assistance, though, must be limited to discussion of the problems and sketching general approaches to a solution. Each programming project team must write their own code and produce their own writeup. Consulting another student's or team's solution, or solutions from the internet, is prohibited on assignments. These and any other form of collaboration constitute cheating. If you have any question about whether some activity would constitute cheating, just be cautious and ask the instructors before proceeding!

You may not supply code, assignment writeups, or exams you complete during 15-418/618 to other students in future instances of this course or make these items available (e.g., on the web) for use in future instances of this course (just as you may not use work completed by students who've taken the course previously). We encourage you to use public source control hosts like Github for your assignments, however please be sure to make your programming assignment repositories private.