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. * `HLRS training `__ * `VSC training `__ * `LRZ training `__ * `JSC training `__ * `Gauss Center portal `__ * `Gauß-Allianz portal `__ * `EuroCC portal `__ * `EuroHPC portal `__ * `Open Hackathons `__ Other resources --------------- Talks ~~~~~ * `CppCon - The C++ Conference `__ * "back to basics" lectures * Klaus Iglberger talks * lightning talks about new tools and libraries * `C++ weekly with Jason Turner `__ * 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 ~~~~~~~~ * `CppCast `__ Wikis ~~~~~ * `cppreference.com `__ * major reference for the C++ STL * used in coding interviews * `C++ Core Guidelines `__ * list of C++ good practices, with explanations of common bugs * can be read one guideline at a time to get progressively better at C++ * `More C++ Idioms `__ * reference work for expert-level programming techniques * `HPC Carpentry lessons `__ * `WikiChip `__ * 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 ~~~~~ * `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 ~~~~~~~~~~ * Lei Mao, `C++ Virtual Table `__, 2023