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

    • up-to-date list of upcoming course iterations on Xing

    • 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”

    • recurring event: March and October at the University of Stuttgart (calendar)

    • curriculum: beginner’s introduction to the Unix shell, git, and Python (permalink, slides)

    • PhD students can get 1 credit point via GRADUS Certificate

  • Benjamin Uekermann’s 5-day course “Research Software Engineering 102”

    • recurring event: October at the University of Stuttgart via C@MPUS

    • curriculum: git workflows, containerization, testing and continuous integration, building and packaging, software design principles (permalink, slides)

    • pre-requisites: being a PhD student or postdoc, knowing bash/git/Python

Aggregators

Information about upcoming training events is unfortunately scattered in multiple aggregators, and each aggregator only indexes affiliated courses.

Other resources

Talks

Podcasts

Wikis

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

  • Compiler Explorer

    • 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

  • C++ Benchmark

    • quickly benchmark two implementations of a function

  • C++ Insights

    • expand macros, lambdas, range-based loops, structure bindings and more

Blog posts