(Originally recorded 2019-04-02)
This is the first lecture of the course and I spend the first part of it going over course mechanics and the plan for the course (essentially a review of the syllabus).
To help set context for the course I also describe how HPC is used and why it is important. A quick overview of the history of HPC hardware begins with Seymour Cray and takes us through Thomas Sterling.
HPC is about enabling scientists and/or decision-makers to solve bigger problems and to solve them faster and better. As such, hardware, software, algorithm, and problem domain are inextricably linked. The plan of the course will be guided by the hierarchical structure of today’s largest computers: single core, hierarchical memory, SIMD, multicore, GPU, and clusters. As the course follows this progression we will apply the hardware at hand to solve some problems of interest. At the same time, we will be building up a set of (high-performance) abstractions for developing solid software and introducing a small set of necessary features in the C++ programming language to realize these abstractions and the programs built with them. We will also be learning about some of the tools typically used in an HPC environment.