Training and continuous learning¶
The HPC field is continuously evolving: CPU hardware keeps improving and increasing in complexity, GPU accelerators performance outperforms Moore’s law predictions, MPI implementations need to take UCX/NUMA/OpenMP into account, and the C++ language gets major feature updates every 3 years. To stay up-to-date with the latest developments in the field, HPC facilities offer training courses, workshops and conferences. The participation fees and travel costs can be reimbursed by the ICP or SimTech, depending on your contract; this is usually the case for BSc/MSc/PhD students and post-docs.
Training events¶
Important courses¶
Klaus Iglberger’s 5-day course “Modern C++ Software Design”
recurring event: March+May+July in German at HLRS, April+October in English at VSC/LRZ
prerequisite: knowing C or C++11
curriculum for the intermediate course: STL containers and algorithms, class design, polymorphism, template programming (permalink)
curriculum for the advanced course: SOLID principles, type traits, SFINAE, concepts, CRTP, visitor pattern, type erasure, loop unrolling, SIMD (permalink)
Sandipan Mohanty’s 5-day course “Programming in C++”
recurring event: May for the intermediate course, Fall for the HPC course
prerequisite: knowing C or C++11
curriculum for the intermediate course: STL containers and algorithms, class design, polymorphism, template programming, CRTP, type traits, concepts, visitor pattern, type erasure, views (permalink, slides)
curriculum for the HPC course: polymorphism, concepts, SIMD, parallel execution policies (threads, Intel TBB), accelerators (CUDA, SYCL, thrust) (permalink, slides)
Claudia Blaas-Schenner’s 3-day intermediate course “Parallelization with MPI”
recurring summer school at VSC or online
exercises are tailored to different languages: C/C++, Fortran, Python
curriculum: MPI, blocking vs non-blocking communication, group communicators, virtual topologies, one-sided communication, CPU pinning (permalink)
Rolf Rabenseifner’s 5-day advanced course “MPI, OpenMP and Advanced Topics”
recurring school at HLRS, ETH or online
exercises are tailored to different languages: C/C++, Fortran, Python
curriculum: MPI, OpenMP, advanced MPI communicators, MPI+OpenMP (permalink)
strong overlap with Claudia Blaas-Schenner’s intermediate course
Georg Hager’s 5-day course “Node-Level Performance Engineering”
recurring workshop at HLRS, sometimes a 3-day version is offered as part of HPC porting workshops
curriculum: HPC hardware (SIMD, NUMA, hyperthreading), HPC profilers (Likwid, Vampir, Score-P), performance theory (roofline model, Gustafson’s law, Amdahl’s law) (permalink)
IntCDC’s 3-day course “Software Carpentry Workshop”
Benjamin Uekermann’s 5-day course “Research Software Engineering 102”
Aggregators¶
Information about upcoming training events is unfortunately scattered in multiple aggregators, and each aggregator only indexes affiliated courses.
Other resources¶
Talks¶
-
“back to basics” lectures
Klaus Iglberger talks
lightning talks about new tools and libraries
-
10-min long tutorials on specific aspects of the C++ standard
30-min long presentations of new features in each C++ major release
SOLID principles
Arjan, Uncle Bob’s SOLID Principles Made Easy - In Python!, 2021
Dimitris Platis, How to write SOLID C++, 2020
Debuggers
Greg Law, Give me 15 minutes & I’ll change your view of GDB, CppCon 2015
Greg Law, Linux Debuginfo Formats: DWARF, ELF, dwo, dwp - What are They All?, ACCU 2023
Assembly language primers
Davy Wybiral, Intro to x86 Assembly Language, 2017
Anders Schau Knatten, Just Enough Assembly for Compiler Explorer, CppCon 2021
Podcasts¶
Wikis¶
-
major reference for the C++ STL
used in coding interviews
-
list of C++ good practices, with explanations of common bugs
can be read one guideline at a time to get progressively better at C++
-
reference work for expert-level programming techniques
-
manually curated list of CPUs with block diagrams and richly annotated die shots:
AMD microarchitectures (e.g. Ryzen)
Intel microarchitectures (e.g. Haswell)
ARM microarchitectures (e.g. Vulcan)
Books¶
Scott Meyers, Effective Modern C++, O’Reilly, 2015
excellent resource for advanced C++ coding
available in the ICP library
Robert Martin, Clean code: A handbook of agile software craftsmanship, Pearson Education, 2009
Robert Martin, The clean coder: A code of conduct for professional programmers, Pearson Education, 2011
Tools¶
-
run small code samples in many compilers with versioned libraries and tooling
visualize the execution output and the generated assembly code
compare assembly code between two compilers or two optimization levels
-
quickly benchmark two implementations of a function
-
expand macros, lambdas, range-based loops, structure bindings and more
Blog posts¶
Lei Mao, C++ Virtual Table, 2023