Spring 2026.
See the CS department web page.
This course covers the fundamental issues in the design of modern computer systems, including the design and implementation of key hardware components such as the processor, memory, and I/O devices, and the software/hardware interface.
This is a fundamental course, equipping students with knowledge that underlies critical computing technology. Throughout the course, students will learn about low-level programming in C and assembly, the instruction pipeline, memory hierarchy, threaded and nonthreaded execution models, and digital logic, the memory hierarchy, and other select topics. The course will also cover specific case studies of recent advances in real-world computer systems.
Students will also be asked to apply their knowledge through several programming assignments and debugging assignments.
At the end of this course, students should have the preliminary skills to design and evaluate solutions involving the computer software-hardware interface to address new problems.
All students must follow the CS department’s academic integrity policy.
Learning C is an important part of this course, but different students have different learning preferences. In the past, the course has used the Modern C book https://gustedt.gitlabpages.inria.fr/modern-c/, but I’ve been told that makes topics over-complicated. The C Programming Language book, by Kernighan and Ritchie, is popular, but it is unfortunately outdated. The C language has been revised multiple times since that book was published in 1988. For an experienced programmer, the cppreference documentation may be sufficient, but if college has been your only exposure to programming you may find the site obtuse or esoteric. A more approachable alternative could be something like w3 schools.
Lecture material will be located online.
| Month | Lecture | Topic | Exams and Assignment Starts | ||
| January | 21 | Wednesday | L1 | Introduction | |
| 26 | Monday | L2 | Arrays and Pointers | HW: Hello World | |
| 28 | Wednesday | L3 | Integers and 2’s Complement | ||
| February | 2 | Monday | L4 | Memory and Variable Length Arrays | HW: Rotate Bits |
| 4 | Wednesday | L5 | Dynamic Memory and Debugging | ||
| 9 | Monday | L6 | Structs and Modular Code | ||
| 11 | Wednesday | L7 | Bit Fields, Unions, and Fractional Values | Recitation Quiz 1 | |
| 16 | Monday | L8 | Fixed Point and Floating Point | HW: Stack | |
| 18 | Wednesday | L9 | Recursion, loops, & data in Assembly | ||
| 23 | Monday | L10 | Instruction Set Architectures | ||
| 25 | Wednesday | L11 | ISAs continued | Recitation Quiz 2 | |
| March | 2 | Monday | L12 | Pipeline Architectures | HW: Matrix |
| 4 | Wednesday | Midterm (in class) | |||
| 9 | Monday | L13 | The Threaded Execution Model | ||
| 11 | Wednesday | L14 | Addressing Modes and Instruction Decoding | ||
| 23 | Monday | L15 | Architecture Aware Code | HW: Parallel | |
| 25 | Wednesday | L16 | Memory View from Assembly | ||
| 30 | Monday | L17 | Types of Physical Memory | ||
| April | 1 | Wednesday | L18 | Cache and the Memory Hierarchy | Recitation Quiz 3 |
| 6 | Monday | L19 | More About Cacheing | HW: Bomb Lab | |
| 8 | Wednesday | L20 | Memory Usage Optimization | ||
| 13 | Monday | L21 | SIMD Instructions | ||
| 15 | Wednesday | L22 | Parallel and GPU Architecture | Recitation Quiz 4 | |
| 20 | Monday | L23 | Parallel and GPU Architecture | HW: DLD | |
| 22 | Wednesday | L24 | Digital Logic | ||
| 27 | Monday | L25 | Combinational Logic | ||
| 29 | Wednesday | L26 | Sequential Logic | ||
| May | 4 | Monday | L27 | Review | |
| 8 | Friday | Final Exam 4:00-7:00PM | Final Exam |