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 logic gates, 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.
I expect you to attend all synchronous class meetings, but I understand that virtual instruction can introduce some additional demands on your time, particularly for students in time zones distant from Grinnell. I will not be taking attendance, but if you miss class you are expected to review the material from that class on your own time. Class meetings will be recorded and accessible Teams, along with the comments and questions from the chat associated with our class meetings.
A normal course load under the 2020 academic scheduled is just two four-credit courses at one time. Under that typical course schedule, I expect that you will spend at least 40 hours per week on your studies; that total includes time spent in class, reading, and completing homework outside of class. By that accounting, you should be able to allocate 20 hours a week to devote to this course. Not all weeks will be equally demanding, but you should start work early so you are prepared to devote extra time to challenging labs.
Our class meetings will consist largely of discussion and group activities. This format will require significant preparation on your part. You are expected to read each day’s assigned readings before class, and should be prepared to discuss and apply the ideas from the reading during class.
The only graded work for this course will be labs. These labs will require you to apply the ideas from readings and class meetings. In a typical year we would typically complete one lab each week, but the condensed course schedule means we will have to complete two labs each week to cover all of the course material. As a result, labs are likely to be particularly demanding; be prepared to spend significant time outside of class working on labs, and be sure to start early so you have time to get help if you are stuck.
Labs will generally be completed in pairs, with one lab submitted by each group. I will randomly assign partners for most labs, but we have one longer sequence of labs where you will have an opportunity to work individually or with a lab partner of your choice.
Labs are the only graded work in this course. Most labs will contribute equally to your overall grade, with the exception of our first warmup lab. I may reduce the weighting for specific labs if many students run into significant unanticipated issues; if this comes up, I will inform the class of the weighting change.
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 week 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 what you have learned. 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 and labs, but copying is not acceptable. The work you turn in must be your own. You may not share any work you complete for a grade in this course with any student in the class other than your lab partner. 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.
You should plan to submit all labs by their posted due dates, but I am willing to grant extensions in exceptional circumstances. Unexpected issues that prevent you from working—e.g. long-term illness, disruptions to internet service—would of course be reasonable cases to ask for an extension. If you find yourself in a situation where you believe you need an extension, please contact me as soon as possible.
If you have questions or concerns about the course or would simply like to discuss the course material, please attend virtual office hours on Teams with the instructor or class mentor. I will be available to answer questions on Teams during my posted office hours, and will keep a WebEx room open for one-on-one calls. I want to be sure to answer as many questions as possible during office hours, so if I believe your question is going to take more than 5–10 minutes to answer during a busy office hours session, I may ask to schedule a follow-up conversation.
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.