Introduction-Fundamentals of computer design, evaluating performance -Pipelining-Instruction set design principles. Caches and memory hierarchy design-Review of memory hierarchy- Advanced memory hierarchy design concepts. Instruction level parallelism and its exploitation- Limits on instruction level parallelism. Multiprocessors and Thread-level parallelism-Models of parallel computation, network topologies, consistency models. Simultaneous Multi-Threading (SMT), Chip Multi-Processors (CMP), General Purpose Graphics Processing Units (GPGPU). VLSI Scaling issues, data speculation, dynamic compilation, communication architectures, near data processing, and other advanced topics.