Presentation
Core-Level Performance Engineering
DescriptionWhile many developers put a lot of effort into optimizing large-scale parallelism, they often neglect the importance of an efficient serial code. Even worse, slow serial code tends to scale very well, hiding the fact that resources are wasted because no definite hardware performance limit (“bottleneck”) is exhausted. This tutorial conveys the required knowledge to develop a thorough understanding of the interactions between software and hardware on the level of a single-CPU core and the lowest memory hierarchy level (the L1 cache). We introduce general out-of-order core architectures and their typical performance bottlenecks using modern x86-64 (Intel Sapphire Rapids) and ARM (Fujitsu A64FX) processors as examples. We then go into detail about x86 assembly code, specifically including vectorization (SIMD), pipeline utilization, critical paths, and loop-carried dependencies. We also demonstrate performance analysis and performance engineering using the Open-Source Architecture Code Analyzer (OSACA) in combination with a dedicated instance of the well-known Compiler Explorer. Various hands-on exercises will allow attendees to make their own experiments and measurements and identify in-core performance bottlenecks. Furthermore, we show real-life use-cases from computational science (sparse solvers) to emphasize how profitable in-core performance engineering can be.
Event Type
Tutorial
TimeMonday, 18 November 20248:30am - 12pm EST
LocationB213
Architecture
Broader Engagement
Performance Evaluation and/or Optimization Tools
Portability
TUT