This course covers performance engineering approaches on the CPU core level.
While many developers put a lot of effort into optimizing parallelism and the execution of their applications on a cluster with multiple nodes, they often lose track of the importance of an efficient serial code first.
Even worse, slow serial code tends to scale very well, hiding the fact that resources are wasted. This course conveys the required knowledge to develop a thorough understanding of the interactions between software and hardware on the level of a single CPU and the lowest memory hierarchy, i.e., the level-1 cache. Relevant properties of instruction execution on superscalar out-of-order CPUs are explained in detail, and the role of critical path, loop-carried dependencies, and instruction throughput limits is discussed.
This course covers general computer architecture for x86 and ARM processors, an introduction to (AT&T and AArch64) assembly code, and performance analysis and engineering using the Open Source Architecture Code Analyzer (OSACA) in combination with the Compiler Explorer. Attendees will work with these tools to analyze compiler-generated assembly kernels and assess their performance properties in detail.
All course material will be available online at https://go-nhr.de/CLPE.
All actual course attendees will receive a course certificate.
Jan Laukemann and Georg Hager (NHR@FAU)