Parallel Computer Architecture and Programming (CMU 15-418/618)
CMU 15-418/618, Spring 2015
Doherty Hall A302
Instructor: Kayvon Fatahalian
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.

Instructors

[kayvonf at cs.cmu.edu]
Smith Hall 225
Office hours: drop by anytime, or by appointment

Your fun and helpful TAs:
Will Crichton
wcrichto at andrew
Office hours:
Mon 5-7pm
Location: Gates Collaborative Commons (5th floor)
 
Arjun Hans
arjunh at andrew
Office hours:
Sun 6-8pm
Location: Gates Collaborative Commons (5th floor)
 
 
Vivek Krishnan
vrkrishn at andrew
Office hours:
Wed 6:30-8:30pm
Location: Gates Collaborative Commons (5th floor)
 
Xiaofan Li
xli2 at andrew
Office hours:
Tue 5-7pm
Location: Gates Collaborative Commons (5th floor)
 
 
Cary Yang
caryy at andrew
Office hours:
Thu 5-7pm
Location: Gates Collaborative Commons (5th foor)
 
 
Prerequisites

15-213 (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.

Textbook

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 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 release on Wed night and be due on Thursday at 11:59pm. These quizzes must be completed individually without discussion with other students, but will be graded on a participation basis only.

Creation of study aid 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.

Grading
  • 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 is prohibited and submitted solutions may not be copied from any source. 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.