The subjects covered in this course include C and assembly language programming, translation of high-level programs into machine language, computer organization, caches, performance measurement, parallelism, CPU design, warehouse-scale computing, and related topics.
Prerequisites
CS61A and CS61B (or equivalents) or experience with a C-based programming language (e.g. Java, C++).
Optional Reading
There is no official textbook for this class. However, there are three optional textbooks as additional references:
- P&H: Second edition of Patterson and Hennessy's Computer Organization and Design RISC-V Edition book ("P&H"), ISBN 0128122757.
- K&R: The C Programming Language, Second Edition by Kernighan and Ritchie. Other C programming books are also suitable if you are already comfortable with them, but our lectures will be based on K&R.
- WSC: The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines, which is freely available on our website.
Please contact staff on Ed if you have trouble finding or paying for these textbooks.
Course Format
The following sub-sections contain an overall summary of the major elements of the course.
Lecture
We will have a 50-minute live lecture on Mondays, Wednesdays, and Fridays, 10:00 AM - 11:00 AM PT. Lectures will take place in Dwinelle 155 and will be livecasted to a Zoom webinar. Recordings will be made available after the lecture on bCourses.
Discussion
Once a week starting Week 2, 1-hour discussion sections will be held on Wednesdays and Thursdays. We will also offer a 2-hour bridge discussion section, which covers the same material as a regular section at a slower pace, allowing ample time for both a mini-lecture and the full worksheet. You can choose to attend any discussion section you want. Discussion section attendance is not graded.
We may release pre-recorded discussion walkthroughs, though they are meant as a supplementary material.
Homework
Homework is designed to let you practice the material covered in lecture. We encourage you to work on the homework problems in small groups, but each student is required to turn in a solution that they have written themselves.
Homework is submitted online through PrairieLearn and graded on correctness.
Labs
Labs are designed to give you some hands-on experience with the course material. Once a week, 2-hour long lab sections will be held on Mondays and Tuesdays. Lab section attendance is not graded. We will not release recordings. The first hour of each lab section will be a review of the topics covered in the lab, while the second hour will be a "lab party" style work time for students to work on the lab with other students in the lab. During the second hour, students can request for help from a staff member. You can choose to attend any lab section you want, or work on labs asynchronously. We encourage you to work on the labs in small groups, but each student is required to turn in a solution that they have written themselves.
Lab assignments are autograded on Gradescope.
Projects
Projects are designed to give you heavy-duty experience with the application of course content. We'll have four projects throughout the course. You may optionally work with one partner for each project. You may not add, change, or remove partners after creating the project repo. Partnerships must be registered on Gradar, and adding another student to your Gradescope submission does not create an official partnership.
If you choose to work with a partner, all work must be done synchronously in a pair-programming fashion. By creating a partnership, both you and your partner are responsible for the work in your repository and the work you submit.
Projects are submitted to Gradescope and graded on correctness. If you complete a project with a partner, you must add your partner to every Gradescope submission. Also make sure you "activate" the submission you want graded on Gradescope (this defaults to the last submission you made).
Exams
There will be one midterm, scheduled for Wednesday, March 13th, 7:00 PM - 9:00 PM PT.
The final exam will be Tuesday, May 7th, 3:00 PM - 6:00 PM PT.
Exams are in-person. One in-person alternate exam will be offered after the scheduled time for conflicts. The exact alternate exam time will be released closer to each exam.
The exam adjustments form (required for all alternate exam accommodations), along with more detailed logistics, will be released closer to each exam.
Exam Clobber
We will have a clobber policy; the details of this policy will be released after the midterm.
Office Hours
TAs and instructors will host mostly in-person and extremely few online office hours throughout the semester. We use an OH Queue to process help tickets.
Please do not expect TAs to debug your code. This is not a good use of their time, and part of the goal of this course is to turn you into a great tester and debugger. However, the TAs can help you find and fix your bugs.
Therefore, before coming to office hours, you should have:
- Run valgrind and fixed all memory leaks and compiler warnings
- Written a test that isolates/demonstrates the issue (NOT a staff-provided test)
- Stepped through the test with a debugger to find the area of code with the issue
- Checked that the problem still occurs on the hive machines, unless the assignment supports local machines
If you have not completed all of the items above, a TA will request that you complete them before they can help you. There are instructions for testing as part of all project specifications, and the first few labs cover Valgrind, (C)GDB, and debugging.
Please mark your tickets as conceptual or debugging. For conceptual tickets, TAs will help groups of students at a time (shorter wait time) but cannot look at code. For debugging tickets, TAs will look at you or your group's code, but time per ticket may be limited if the queue is long.
If you are attending an online office hours block, you can find the zoom link on the EdStem. To receive help, enter any open breakout room, make a ticket on the OH Queue, and remember to note which breakout room you're in.
Grading
In order to foster a collaborative environment, CS61C is graded on a fixed scale. The course is graded out of 300 points, with the following mappings from points to letter grades:
| Course Points | Grade |
|---|---|
| 275+ | A |
| [265,275) | A- |
| [250,265) | B+ |
| [240,250) | B |
| [220,240) | B- |
| [210,220) | C+ |
| [190,210) | C |
| [180,190) | C- |
| [140,180) | D |
| [0,140) | F |
| Assignment | Percentage of Grade |
|---|---|
| Labs | 8% (24 points) |
| Homework | 12% (36 points) |
| Project 1 | 10% (30 points) |
| Project 2 | 10% (30 points) |
| Project 3 | 10% (30 points) |
| Project 4 | 10% (30 points) |
| Midterm | 16% (48 points) |
| Final | 24% (72 points) |
At the end of the semester, the A+ bin, which is reserved only for students with exceptional performance in the course, will be determined by the instructors.
The bins will not change (i.e. we will not shift the bins or round at the end of the semester). Grade bins target a 3.3 GPA, assuming 65% average on exams and 95% average on other assignments. To normalize exam difficulty variance across semesters, we will do the following: if the exam average is higher than 65%, then nothing will change; if the exam average is lower than 65%, we will adjust the denominator such that the exam has a 65% average. Scores are capped at 100% (i.e. you cannot have a score over 100% from this).
Administrative Drop
You may be administratively dropped from the course if you do not submit any assignments by January 29th, 2024. If you are currently on the waitlist, or intend on enrolling later, you must keep up with all assignments. We will not be approving extensions for adding the course late, for any reason.
Course Announcements and Computer Resources
Ed (EdStem)
All important course announcements will be made on Ed (the course discussion forum). We will be automatically enrolling everyone. We will not be answering private Ed questions unless directed by a staff member in office hours.
Ed Etiquette
- Search before posting. Your question may have already been answered by us or other students in the past. Reading other students' posts will let you refine your question, and gives us more time to answer new questions.
- Try to avoid open-ended or vague questions such as: "How does C work?" or "How come the solution to a discussion problem is this?". If you walk us through your thoughts and reference specific lines that you find confusing, we can better address the problem you are facing. Being specific helps us uncover any misunderstandings that you may have.
- Post questions about assignments as public follow-ups on the corresponding assignment post. For example, post your questions about Homework 1 on the Homework 1 post. If your question is too detailed or revealing to fit as a follow-up, your question would be better answered during office hours.
- Only post in the "answer" box if you are fairly certain about your answer. Do not post follow-up questions or +1 as an answer.
- No follow-up +1's. Instead, you should use the heart button on a question/follow-up. Excessive +1 follow-ups clutter the post and make it more difficult to get to the unresolved follow-ups.
- If you want a reply on a follow-up, mark it as unresolved, or we may not see it.
Computer Resources
Note: If you are blocked from accessing our resources, you can use the campus VPN.
Computer Accounts
You will need a CS 61C instructional account to access computer labs and instructional servers for assignments. Accounts are available starting on the first day of instruction, and will be covered in Lab 0.
Computer Labs
Registered students get 24/7 cardkey access, starting on the first day of instruction, to the computer labs in Soda Hall (Soda 271, 273, 275, 277, and 330). Please be mindful of the fact that we share these lab spaces with other CS classes, and please follow the Rules of Conduct on EECS Instructional Computers.
You can also remotely connect to instructional computers for class work. This will be covered in Lab 0. If you're connecting from off-campus, you must be connected to the campus VPN (as described in lab 0).