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.
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 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.
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)