Computer architecture, the art of designing hardware to run
software, is a vibrant and ever changing field. This course will
attempt to convey this excitement to students. Students will learn
about styles of computer implementation and organization from a
historical and modern perspective. We emphasize the broad array of
factors that influence architecture including technology,
applications, and software systems. We describe a wide range of
architectural mechanisms and show how they arose given the design
constraints at the time, and how old ideas can become attractive again
as technology and applications change. Our goal is to help you
understand not just the
what but also the why and the
why now behind the various mechanisms to prepare
you for future developments.
We will cover traditional foundations such as pipelining, instruction-level parallelism (superscalar and VLIW), vector processing, multithreading, memory hierarchies, and input/output architectures. The course will also examine contemporary developments in chip-scale multiprocessors (multicore/manycore) in the context of earlier work on cache coherency and memory models, communication networks, and synchronization mechanisms. We will also discuss the impact of technology scaling trends including power consumption, variability, and reliability.