The course is about hardware design issues of high-performance computer architectures. The course begins with a review of basic computer architecture design. Topics include fundamentals of quantitative design and analysis, instruction set principles, memory hierarchy: computer cache, cache optimization and virtual memory, instruction pipelining and advanced notions of instruction-level parallelism such as dynamic scheduling, branch prediction and superscalar. Students will explore other means of modern day and future high-performance computing technology, including data-level parallelism, GPU architectures, vector processors, thread-level parallelism and multicore processors. An important assessment component of the course is a project, in which groups of students will design and implement the architecture of their own advanced processor.