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.
The Fall 2021 version of CS149 will be virtual lecture format. Exams will also be administered virtually.
Lectures will be recorded for offline viewing on Canvas. We will have frequent discussions and student breakouts during live lecture. Therefore, while attendence at live lecture will not be checked or graded, we ask you to make an effort to attend live lecture as much as possible.
Course staff will hold both in person and virtual office hours.
Coming Soon
CS110: Principles of Computer Systems is strong prerequisite for CS149. If you have not taken CS110 and feel like you have the background to take CS149, please contact your friendly instructors and let's talk it over.
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.
All class announcements will be made via our class Piazza Page. Please make sure you sign up for the course on Piazza.
Programming assignments. Students will complete four programming assignments (plus one optional assignment used to boost grades) using parallel programming systems such as ISPC, OpenMP, and CUDA. You are not expected to know these languages/systems in advance of the course, you will pick them up as you go. Programming assignments can optionally be done in teams of up to 2.
Written assignments. Students will complete five take-home written assignments assigned approximately every two weeks. These assignments will be graded on a credit/no credit basis based on effort. Written assignments can optionally be done in teams of up to 2.
Individual written assignments. There will be two timed take-home assessments. These will be graded for correctness and must be done individually by students. These will be held on Oct 14th and Nov 12th.
Final exam. There will be a final exam.
- Programming Assignments (4): 10% + 12% + 13% + 13% = 48%
- Written Assignments (5): 15%
- Individual Written Assessments (2): 16%
- Final Exam: 16%
- Participation: 5% (async lecture comments)
Late day policy: Each student has a total of seven late days for use over the entire quarter. Late days can be used either for programming assignments or written assignments.
- A student can extend a programming assignment deadline by one day using one point. (A team of two students can extend an assignment deadline by one day using 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.