Stanford CS149, Fall 2019
Tues/Thurs 3:00-4:20pm
Gates B3
Instructors: Kayvon Fatahalian and Kunle Olukotun
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
[kayvonf at cs.stanford]
Gates 366
[kunle at stanford]
Gates 310
Your fun and helpful CAs:
Kevin Baichoo
[kbaichoo at stanford]
Matthew Kay Fei Lee
[mattlkf at stanford]
Deepak Narayanan
[deepakn at stanford]
Office Hours Calendar

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 ]

All students should retain receipts for books and other course-related expenses, as these may be qualified educational expenses for tax purposes. If you are an undergraduate receiving financial aid, you may be eligible for additional financial aid for required books and course materials if these expenses exceed the aid amount in your award letter. For more information, review your award letter or visit the Student Budget website.

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.

  • Programming Assignments (5): 6% + 12% + 12% + 12% + 8% = 50%
  • Written Assignments (5): 20%
  • 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)