Computer architecture is the science and art of selecting and interconnecting hardware components to create a computer that meets functional, performance and cost goals. This course qualitatively and quantitatively examines computer design trade-offs. The topics covered include: advanced processor designs such as superscalar and out-of-order execution, advanced memory systems such as non-blocking caches and multiporting/banking and alternative virtual memory implementations, I/O systems, interconnects, introduction to multiprocessor architectures, performance and cost metrics, and benchmarking. Examining trade-offs requires that the students already know how to correctly design a computer, as is taught in the important prerequisite, 18-347 (or 18-447).