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.
Lectures will be recorded for offline viewing via Canvas. We will have frequent discussions and student breakouts during live lecture. Therefore, while attendance at live lecture will not be checked or graded, we ask you to make an effort to attend live lecture as much as possible.
The course staff will hold both in person and virtual office hours.
CS111: Operating Systems Principles is strong prerequisite for CS149. If you have not taken CS111 and feel like you have the background to take CS149, please contact your friendly instructors and let's talk it over. Note: CS111 is a replacement for Stanford CS's old CS110 course. Since CS111 is a new course that was rolled out in AY21-22, in the Fall 2022 version of CS149, we realize that some students will have taken CS110 and not CS111.
Concepts we expect you to be familiar with:
- The idea that a compiled computer program is a sequence of machine instructions.
- That a processor executes machine instructions, and the result of executing an instruction is the update of state stored in registers or memory.
- The motivation for a modern memory hierarchy and it's implementation via registers, on-chip caches, off-chip memory, persistent storage.
- You should be familiar with reading, writing, and debugging C/C++ code (basic C++ features like classes, STL vector types). Programming assignments in this class require debugging skill due to the challenges of debugging parallel code.
- You should have enough programming experience/proficiency in C-like languages to pick up new C-like languages introduced throughout the class (languages such as CUDA, or ISPC)
- We hope that you've had at least an introductory experience writing code that creates threads, e.g., via std::threads or pthreads in C/C++.
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 Ed Discussion forum. Everyone enrolled in the course via Canvas should be able to access this site.
Programming assignments. Students will complete four programming assignments 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 two. Each year there are students that decide to do all programming assignments by themselves, so it is perfectly acceptable to go through the class without a partner if you choose to do so. There will also be one optional "bonus" programming assignment at the end of the quarter that can be used to boost the grade of any prior programming assignment.
Written assignments. Students will complete five take-home written assignments assigned approximately every two weeks. Like programming assignments, written assignments can optionally be done in teams of up to two.
Midterm exam. There will be a midterm exam, held on November 15th. The midterm will be done individually by students.
Final exam. There will be a final exam during the university designated final exam slot.
- Programming Assignments (4): 14% + 14% + 14% + 14% = 56%
- Written Assignments (5): 2% x 5 = 10%
- Midterm Exam: 16%
- Final Exam: 16%
- Participation: 2% (async lecture comments)
Late day policy: Each student (or teach team) has a total of eight late days for use over the entire quarter. Late days can be used either for programming assignments or written assignments. You do not need to notify the staff that you are using late days. Just submit after the deadline and we will track late days used.
- A student can extend an 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 student does not have remaining late day points, late hand-ins will incur a 10% penalty per day (up to the max number of late days allowed). We'll record points on a per-student basis, so if one student is ``out of points'' and the other is not, only the student out of late days will be assessed the penalty.
- No programming assignments will be accepted more than FOUR DAYS after their posted deadline. No written assignments will be accepted more than TWO DAYS after the deadline. This is a hard cap since we need to release solutions.
Do I need a partner for CS149?
No, you do not. Each year a number of students decide to do all the assignments on their own because they think it will help them learn the material better. CS149 assignments take a lot of thought, but do not require writing a lot of code, and so it's reasonable for a single student to do all the required work. Note that all teams, regardless of whether they are one or two person teams, are graded the same.
I don't have a partner but definitely want one, what should I do?
We understand that it can be hard to find partners in CS classes. We want everyone that wants to work with a partner to have the opportunity to do so. In the first week of class, the course staff will run a partner matching service that will ask students to fill out a survey and match students according to responses.
If you need to change partners or find a partner in the middle of the quarter, just reach out to the staff and we'll do our best to help you find someone. We are here to help!
Do I need to tell the staff that I am using late days on and assignment?
No, just submit your assignment. The submission will be time stamped and the staff will keep track of late days.
I got sick, had a busy week, had extra curricular activities, etc.? Can I get an extension?
You are going to have periods throughout the quarter where you cannot put much time in CS149. That's perfectly fine! Late days are there to allow you to adjust your deadlines. Given that you have eight late days for the quarter, we expect you to manage those days according to your needs. We intend to only give students additional late days under very exception circumstances.
Office hours are busy and I'm having trouble getting the help I need. What can I do?
Office hours aren't the only time you can get help from the staff. Just reach out by posting on Ed or writing an email to the staff asking for an appointment for a 1-on-1 conversation. We'll make time to help!
Will lectures be recorded?
Yes, lectures are recorded by SCPD and available for offline viewing on Canvas. We try to make lectures participatory and have in-class discussions, so even though no attendence will be taken, we hope that you will make an effort to attend lecture as much as possible and use the recorded lectures as review and reference.
Can I audit the class?
Please email one of the CAs and we will be happy to add you to Canvas as an observer.