This document discusses high performance computing systems. It begins by asking basic questions about what constitutes high performance, who needs high performance systems, and how high performance can be achieved. It then discusses techniques for analyzing performance like simulation and experimentation. The document goes on to cover topics like execution time, factors that influence clock period, techniques for instruction level parallelism like pipelining, VLIW processors, and superscalar processors. It also discusses process level parallel architectures like shared memory multiprocessors and issues they present like cache coherence. Finally, it briefly outlines the history and quest for increasing supercomputer performance.