Computer organization and architecture cover the inner workings of your computer, from electrical circuits to larger structures like caches and storage devices. During this course, we will work our way from the bottom-up: starting with transistors and circuits, we will construct simple processor that closely resembles processors in use today. Understanding how your computer works will help you write better programs; many of the techniques we use to write fast and reliable software depend on an understanding of how that software will be executed. Abstraction, indirection, caching, concurrency, and other key concepts in computer science are just as important in hardware as they are in software. As computing hardware grows more complex and diverse, understanding the differences between your CPU and your GPU—and when each is best-suited to a problem—will become more and more important.
Our main objectives for this course include:
Why take this course?
Whether your goal is to pursue advanced computer science study, work on new processor technology, develop the next major operating system or programming language, or apply high-performance computing to any other field, this course will help! Understanding computer architecture and machine language will help you be a better programmer, and prepare you to deal with the inevitable bugs and performance pitfalls that are virtually guaranteed in computing.
What do I need to know?
I assume you have taken and passed CSC 161. That means you should be comfortable programming in C and dealing with pointers. You do not need to know anything about electricity, circuits, transistors, or computer architecture.
Our primary textbook is David A. Patterson and John L. Hennessy, Computer Organization and Design: The Hardware/Software Interface, 5th Edition, Elsevier, 2013. ISBN 9780124077263. I will supplement our primary textbook with eReserves and handouts from other textbooks, videos, and the occasional lecture.
Our textbook is fondly known as “Patterson and Hennessy” (not to be confused with “Hennessy and Patterson”, which is a more advanced textbook). We will use the fifth edition of this textbook, which has a mostly-white cover with a picture of a tablet. This edition has sections that were not available in previous editions, and problem numbers are not likely to align between the two sections. Do not buy other editions as they are quite different. Make sure you do not purchase a version of the book that uses ARM or RISC-v; we will be using the regular (MIPS) edition of the textbook.
Your classmates and partner(s) depend on your contributions to learn new material and complete the required work for this course. Don’t let them down! You are expected to arrive on time and actively participate in every class.
Because your participation is so important, I will only grant excused absences in exceptional circumstances. I will deduct 2% from your final grade for each unexcused absence and 1% for each time you are late to class. However, each student is allotted a 4% “penalty buffer,” so you may miss two classes or arrive late four times with no impact on your final grade. This policy is intended to give you the flexibility to deal with brief illnesses or personal issues that require you to miss class.
If you need to miss more than two class periods for an exceptional reason (e.g. to attend an academic conference, for religious observance, to deal with a family emergency, or due to long-term illness) please talk to me as soon as possible and we will make an alternate arrangement.
If your are sick, please do not come to class. Stay in your room, send me a message, rest, and seek medical care as needed. Student Health and Counseling Services (SHACS) offers health and mental health services to students.
I will generally only grant excused absences if you notify my at least 48 hours before the class you will miss. If you need to miss class on short notice because you are sick, I will require a note from SHACS or the absence will be counted as unexcused. You do not need to notify me ahead of time if you are comfortable allowing your absence to count against the “penalty buffer,” but I strongly encourage you to contact your classmates or review the posted notes from class to catch up on any material you missed.
Under a normal 16 credit load, I expect that you will spend at least 40 hours per week on your studies (class time, homework, and studying). You should spend a minimum of 10 hours per week on this course, although more time may be required to earn an A or B in the course.
Our class meetings will consist largely of discussion and group activities. This format will require significant preparation on your part. Most of this preparation will consist of careful reading and reflection on this material through the use of a reading journal.
You should check the class schedule for updates and read any material that has been assigned before coming to class. Reading the textbook and supplemental readings entails the following:
Many of the readings are fairly short, but can contain code or figures that require a significant amount of study. Plan ahead for some of the longer readings (approximately 30 pages) later in the semester. While I realize that not all concepts are best learned by reading, please make your best effort and come to class with questions. Then, we can proceed with discussion, examples, and exercises to improve your understanding in class.
Because much of our work involves collaboration and discussion, you will be evaluated on your participation. Participating in class involves:
Students who consistently meet these criteria can expect to earn 90% (an A-) for their class participation grade. I will reward students who regularly provide significant insights or guide discussion in a productive manner. Students who fail to participate, or participate in counterproductive ways—by dominating the discussion or making inappropriate comments—will earn a lower score.
This course will have a mix of assigned problems and labs. For both labs and assignments, you will work with randomly assigned partners. In lab, we will work with electronic components, with software, and with combinations of the two. You will build digital circuits (real and virtual), and you will write assembly programs for PIC32 microcontrollers that do fun thinks like flashing lights and sounding buzzers.
Many labs can be completed during our weekly two hour lab section, but some will require out of class work and will take the place of a regular assignment. Assignments and labs are generally due at 10:30pm on Tuesday nights.
We will have short weekly quizzes in this course. These will typically last around ten minutes at the start of class on Fridays. Quizzes will cover topics up through the Wednesday class prior to the quiz. I will spend some amount of time each Wednesday to give you a preview of the material that will be on the quiz. There will also be mentor sessions that can help you prepare for quizzes.
There will be three in-class midterms and a final exam for this course. The final exam will be cumulative, but will emphasize material not covered by the midterm exams.
You are expected to be present for exams on the following dates:
Do not make travel plans that will conflict with the exam schedule. If you are unable to be present for a required examination due to unforeseen circumstances, you will need to contact me to schedule a make-up exam. Any requests for make-up exams must be submitted at least one week before the scheduled exam.
There will be no curves or competitive grading in this course. Every student has an opportunity to earn an A. Your final grade will be determined with the following weighting:
Some work may be graded by someone other than the instructor. However, any questions or concerns about grading should only be directed to the instructor.
The grading scale for this course will be:
You may note that a score of exactly 90% could earn either a B+ or an A-. In this unlikely scenario, I will always choose the higher of the two grades. I also reserve the right to adjust this scale during the semester. You will be notified of any changes, and the scale will not change in the final two weeks of the course. You may ask me for your current grade in the class at any point; I will happily give you my best estimate based on the current scale and graded work so far, but these estimates are not guarantees of a specific final grade.
I encourage collaboration when it promotes learning. However, it is important for you to understand the course materials and demonstrate your own learning on exams. As an instructor, I will meet my obligation to bring any work suspected to be in violation of the College’s Academic Honesty Policy to the attention of the Committee on Academic Standing, after which there is no recourse with me.
Students are free to discuss readings, lab assignments, and homework assignments, but copying is not acceptable. The work you turn in must be your own. You must not share code, homework responses, or other submitted work with any other students. You must acknowledge the contributions of others, whether they come from other students in the class, or from print and online resources. In short, while you are encouraged to collaborate with others, you are expected to be able to construct and explain each solution on your own.
Exams are intended to assess your individual understanding of the course material. Therefore, collaboration on exams is not permitted. If you have questions on an exam, please bring them directly to me. Of course you are encouraged to collaborate when preparing for exams.
You will not be permitted to use study guides, textbooks, phones, laptops, or any other reference during exams unless I say otherwise in class. I do not expect you to memorize every detail covered in class, but rather to understand key concepts and demonstrate an ability to apply them in an exam setting. Therefore, I will provide you with some reference materials where necessary on exams. For example, an exam question on MIPS assembly will likely include a short list of MIPS assembly instructions for you to use when constructing your solution.
Labs and assignments are generally due at 10:30pm on Tuesday nights. Assignments submitted after the due date will receive a reduction of 10% (one full letter grade) for each day they are late, and will be accepted no later than three days late.
If classroom facilities or MathLAN are unexpectedly unavailable for three or more hours before a deadline that requires the use of these facilities, I will extend the deadline. Please contact me as soon as possible if this situation arises.
If you have questions or concerns about the course or would simply like to discuss the course material, please come to my office hours. To provide equitable access to all students regardless of course schedules, I hold my office hours by appointment. You can make an appointment at https://calendly.com/ccurtsinger/office-hours.
I am happy to answer questions by email, but please allow 24 hours for a response (except on weekends, when I may not answer email at all). You may also call my office phone number (x3127) for more urgent matters.
My goal is to help you learn as much as possible in this course; please let me know what I can do meet your learning needs. If you have a disability that requires accommodations, please contact Disability Services. Disability Resources will work with you to determine your needs, and will provide you with paperwork outlining the accommodations you require. Please make sure I receive this documentation at least a week before the course activity for which you need accommodations. If this timeline is not feasible for any reason, please contact me as soon as possible and we will work together to find a solution.