CSEE 4824 - Computer Architecture

Undergraduate / Graduate course, Columbia University, Department of Computer Science, 2025

I served as a Teaching Assistant for Computer Architecture, a core upper-level undergraduate course bridging software systems and modern hardware design at Columbia University.

This course examines computer architecture as the science and art of selecting and interconnecting hardware components to meet functional, performance, reliability, security, and cost goals. It emphasizes architectural trade-offs and the interaction between hardware and software in contemporary systems.

Course Overview

The course covers fundamental and advanced topics in computer architecture, including instruction-level parallelism, memory hierarchy, out-of-order execution, caching, virtual memory, synchronization, and multicore systems. Through lectures and hands-on assignments, students explore how modern processors execute many instructions concurrently and how architectural decisions affect system performance and correctness.

Course Objectives

  1. Understand the microarchitectural design of uniprocessors and chip multiprocessors.
  2. Analyze performance, reliability, and security trade-offs in modern hardware systems.
  3. Study memory systems, including DRAM, caches, and virtual memory.
  4. Explore architectural support for parallelism, GPUs, and domain-specific accelerators.
  5. Connect hardware mechanisms with software performance and optimization strategies.

Teaching Experience

As a Teaching Assistant, I held weekly office hours and provided support for homework assignments involving architectural measurement, programming, and paper critiques. I assisted students in understanding complex topics such as cache behavior, out-of-order execution, memory consistency, and synchronization. I also helped guide students through debugging performance issues, interpreting experimental results, and developing a rigorous understanding of hardware–software interactions in modern computer systems.