Parallel Computer Architecture and Programming (CMU 15-418/618)
CMU 15-418/618, Spring 2016
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: Tue 4-5pm,
Fri 4-5pm, or by appointment
[bryant at cs]
GHC 9125
Office hours: Mon 1:30-2:30pm
[bpr at andrew]
GHC 6025
Office hours: Thu 12-1pm,
or by appointment
Your fun and helpful TAs:
Gregory Rose
grose at andrew
Office hours:
Mon 4:30-5:30pm
Location: Gates Collaborative Commons (5th floor)
Josh Acay
cacay at andrew
Office hours:
Tue 2-3pm
Location: Gates Collaborative Commons (5th floor)
Oguz Ulgen
oulgen at andrew
Office hours:
Wed 1:30-2:30pm
Location: Gates Collaborative Commons (5th floor)
Karima Ma
kcma at andrew
Office hours:
Thu 4-5pm
Location: Gates Collaborative Commons (5th floor)
Kevin Ku
kevinku at cmu
Office hours:
Wed 5:30-6:30, Fri 1-2pm
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, the following two textbooks will be put on reserve in the library for your use.

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

Discussion Boards

We will be using Piazza for general class announcements. The 15-418/618 Piazza page is located 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. These and any other form of collaboration on assignments 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). Make sure to make repositories private if you use public source control hosts like github.