Stanford CS149, Winter 2019
PARALLEL COMPUTING
Tues/Thurs 4:30-6:00pm
Room 420-040
Instructors: Kunle Olukotun and 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 and CAs
[kunle at stanford]
Gates 310
Office hours: TBD
 
[kayvonf at cs.stanford]
GHC 366
Office hours: by announcement and appointment
 
Your fun and helpful CAs:
Juan Manual Camacho
[jcamach2 at stanford]
Office hours:
Tues/Thurs 6-8pm
Location: Huang basement
 
Mario Srouji
[msrouji at stanford]
Office hours:
Mon/Wed 1-3pm
Location: Huang basement
 
 
Textbook

There is no required textbook for CS149. 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.

John L. Hennessy and David A. Patterson
Computer Architecture, Sixth Edition: A Quantitative Approach. Morgan Kaufmann, 2017
[ On Amazon ]

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

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

Announcements via Piazza

All class announcements will be made via our class Piazza Page. Please make sure you sign up for the course on Piazza.

Assignments, Projects, and Exams: (What You Will Do!)

Programming assignments. Students will complete five programming assignments using parallel programming systems such as ISPC, OpenMP, CUDA, and Spark. You are not expected to know these languages/systems in advance of the course, you will pick them up as you go.

Take home written assignments. Students will complete five take-home written assignments assigned approximately every two weeks.

Midterm and Final Exam. There will be midterm and final exams.

Grading
  • Programming Assignments (5): 5% + 8% + 12% + 12% + 8% = 45%
  • Written Assignments (5): 25%
  • Exams (2): 30%

Late day policy: Each student (or team of students if working in pairs) has a total of five late days for use over the entire quarter. Late days can be used either for programming assignments or written assignments.

  • 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.
  • 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. (we have to start grading and distribute solutions)