Topic outline
General
Die Vorlesung gibt eine Einführung in die Erstellung effizienter paralleler Programme für moderne Clustersysteme. Am Anfang stehen dabei einfache Werkzeuge wie SSH, screen und cmake, die den Umgang mit den Systemen und der Software erleichtern. Die grundlegenden Architekturprinzipien in der Hardware vom Einzelkern bis zum Supercomputer werden erläutert. Die im wissenschaftlichen Rechnen dominierenden Programmiermodelle OpenMP und MPI werden eingeführt und mit Hilfe von Übungen vertieft. Über den reinen Programmieraspekt hinaus will die Vorlesung Modellierungstechniken vermitteln, die eine realistische Abschätzung der erreichbaren Performance erlauben und damit zu einer effizienten Nutzung der Ressourcen beitragen. Abschließend wird ein Ausblick auf die Anwendung von Beschleunigern (GPUs, Intel Phi) gegeben.
Voraussetzungen:
- Programmierkenntnisse in C/C++ oder Fortran
- Sicherer Umgang mit der Linux-Kommandozeile
- Von Vorteil: Umgang mit einem nicht-grafischen Texteditor
Datum: 25.-29.09.2017, 9:00-17:00
Ort: Ernst-Moritz-Arndt-Universität Greifswald (genauer Ort TBD)
Dozent: Dr. Georg Hager, Regionales Rechenzentrum Erlangen
Sprache: Deutsch oder Englisch, abhängig von den Teilnehmern (Slides sind in Englisch)
Anmeldung: Mail an stefan.kemnitz@uni-greifswald.de
Agenda:
Day 1
- Basic tools for accessing and using HPC systems
+ SSH, screen
+ cmake (provided by Stefan Kemnitz)
+ version control
+ Basic guidelines for software development
- Basics of parallel computer architecture
+ The stored program computer
+ Pipelines, superscalarity, SMT, SIMD
+ Computer topology: cores, caches, sockets,
nodes, networks
+ Accelerators: GPGPUs, Xeon Phi
- Hands-On
+ Logging in to the cluster
+ Compiling and running simple code
+ Proper benchmarking
Day 2
- Basic parallelization patterns
- Limits of parallelism: Amdahl's Law, communication
overhead
- Introduction to shared-memory parallelization
with OpenMP
+ Loop-based parallelism
+ Synchronization constructs
+ Basic API calls
+ Thread affinity
- Hands-On OpenMP
- Introduction to distributed-memory parallelization
with MPI
+ Beginner's MPI toolbox
+ Compiling and running an MPI code
+ Process affinity
- Hands-On MPI
Day 3
- Advanced OpenMP
+ ccNUMA optimizations
+ OpenMP synchronization overhead
- Advanced MPI
+ non-blocking point-to-point communication
+ Collective communication
+ Derived data types
- Hands-On
Day 4
- Microbenchmarking for architectural exploration
- Performance bottlenecks
- Simple loop-based performance modeling: The roofline model
+ Construction of the model
+ Model assumptions
+ Simple examples
- Case studies
+ Dense matrix-vector multiplication
+ Sparse matrix-vector multiplication
+ Stencil algorithms
- Hands-On
Day 5
- Basics of GPGPU architecture
- Introduction to CUDA programming
- Simple examples
- Hands-OnDay 1
Day 2
Day 3
Day 4
Day 5
Supplementary material