This course focuses on advanced system-level architecture techniques for devices such as personal computers, servers, and embedded or portable systems. It covers topics such as cache hierarchies, memory systems, storage and IO systems, virtualization, clusters, fault-tolerance, and low-power design. At the completion of the course, you will understand basic principles such as locality, coarse-grain parallelism, overlapping communication and computation, performance/power trade-offs, and reliability. Overall, you will understand how computer systems are organized and, more importantly, why they are organized that way.