This course 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.