Ihr Weg zum HPC-Entwickler
Entwickeln Sie parallele Algorithmen für komplexe Fragestellungen und implementieren Sie hochperformanten Programmiercode für parallele HPC-Architekturen. Als HPC-Entwickler prüfen und verbessern Sie die Performanz Ihres Codes und finden innovative Lösungen bei der Suche nach Beschleunigung.
Unser Lernangebot für HPC-Entwickler
- Software-Entwickler
- Software-Architekten
- Informatiker
- IT-Interessierte
- Simulationsingenieure
Paralleles Programmieren mit OpenMP
- Was ist HPC? Hardware und Herausforderungen
- Rechenknoten
- Paralleles Denken
- Parallelisierbarkeit von Software, Berechnungen und Anforderungen
- Einführung in OpenMP
- Programmier- und Ausführungsmodell
- Worksharing Direktiven
- Datenumgebung und kombinierte Konstrukte
- Zusammenfassung der OpenMP-API
- OpenMP Pitfalls & Optimierungsprobleme
Paralleles Programmieren mit MPI
- Was ist HPC? Hardware und Herausforderungen
- Rechenknoten
- Paralleles Denken
- Parallelisierbarkeit von Software, Berechnungen und Anforderungen
- Partitionierung und Lastbalance
- Paralleles Input und Output (I/O)
- MPI I + II + III
Performance Optimierung - Kommunikation
- Grundlagen und Methodik der Performance-Optimierung
- Skalierbarkeit
- Performance Optimierung als iterativer Prozess
- Performance Messmethoden
- Parallele Effizienz-Metriken
- Anatomie der MPI Kommunikation
- Lastbalance
- Aggregierung von Nachrichten
- MPI Kommunikationspattern
- Asynchrone Kommunikation
- Hybrid MPI-OpenMP
- Kollektive Operationen
- Prozess Pinning und Mapping
Performance Optimierung - Node Level
- Optimierungsprozess
- Prozessmikroarchitektur
- Vektorisierung und Peak Performance
- Grundlagen der Hardwarearchitektur
- Speicherhierarchie
- Speicher-Mikroarchitektur
- Cache Blocking
Paralleles Programmieren mit OpenMP
- Sie kennen die Basiskonstrukte von OpenMP für das parallele Programmieren auf Systemen mit gemeinsamen Speicher.
- Sie kennen Schlüsselkonzepte wie Worksharing und Synchronisation.
- Sie können aus ihrer Kenntnis Schlussfolgerungen ableiten, die es ihnen ermöglichen, seriellen Programmcode zur Benutzung eines gemeinsamen Speichers zu parallelisieren und auftretende Fehlerquellen zu identifizieren und zu eliminieren.
- Sie haben ein gutes Verständnis der Grenzen von OpenMP und können einschätzen, in welchen Fällen andere Programmiermodelle wichtig werden.
- Sie können Aufbau und Funktionsweise einer Singlecore-CPU beschreiben und wissen, was Multicore- von Singlecore-Prozessoren unterscheidet.
- Sie wissen, was Pipelining und superskalare Prozessorkerne kennzeichnet.
- Sie können beschreiben, warum ein Rechenknoten durch sein Shared Memory gekennzeichnet ist.
- Sie verstehen, dass ein Rechenknoten aus einer Multicore-CPU (Single Socket) oder auch zwei Multicore-CPUs (Dual Socket) bestehen kann und sind in der Lage die Unterschiede zu erläutern.
- Sie können die Bedeutung von Peak Performance, Sustained Performance, Latenz und Bandbreite erklären.
- Sie können erläutern, nach welchen Prinzipien ein Cache funktioniert, was Cache-Kohärenz ausmacht und welche Merkmale eine NUMA-Architektur aufweist.
- Sie können den Unterschied zwischen Shared- und Distributed-Memory erläutern.
- Sie kennen die Grundprinzipien der parallelen Ausführung und sind in der Lage, Algorithmen parallel zu strukturieren.
- Sie verstehen, welche Kriterien für die Parallelität notwendig sind und welche Aspekte das parallele Ausführen verhindern.
- Sie erlernen die Grundlagen, um Flaschenhälse zu identifizieren und prinzipiell zu vermeiden.
- Sie können zwischen Task- und Datenparallelität unterscheiden und wissen, wann welche Form wie angewandt werden kann.
- Sie wissen, wie Soft- und Hardwarearchitekturen voneinander abhängen und wie sich das auf die Parallelisierbarkeit von Software und Algorithmen auswirkt.
- Sie wissen um die Heterogenität moderner Systeme und warum sie bei der Problemzerlegung berücksichtigt werden muss.
- Sie verstehen den Zusammenhang zwischen intendiertem Ergebnis und notwendiger Rechenpräzision, bzw. Art der Aufgabenzerlegung.
- Sie verstehen das Problem der Datenlokalität und dessen Einflüsse auf Algorithmusstruktur und Ausführungszeit.
- Sie kennen Ian Foster’s PCAM-Modell.
Paralleles Programmieren mit MPI
- Sie verstehen das Konzept von verteiltem Speicher und sind in der Lage, parallele Programme für verschiedene Zielarchitekturen zu erstellen.
- Sie kennen die wesentlichen Routinen von Message Passing Interface. Sie sind in der Lage, einen Übergang von seriellem Code zu MPI zu organisieren.
- Sie können identifizieren, welche Abschnitte eines einfachen Codes mit MPI parallelisiert werden können und können anschließend selbständig die entsprechenden MPI-Befehle zum Aufbau von Kommunikation und Datenaustausch hinzufügen.
- Sie kennen erfolgreiche Verfahren, um Fehler zu suchen und können diese in einfachen Softwarelösungen einsetzen.
- Sie wissen, wie eine erfolgreiche Fehlersuche und Optimierung der Programme erfolgt.
- Sie haben ein gutes Verständnis der Grenzen von MPI und können einschätzen, in welchen Fällen andere Libraries wichtig werden.
- Sie verstehen das Konzept von verteiltem Speicher und sind in der Lage, parallele Programme für verschiedene Zielarchitekturen zu erstellen.
- Sie kennen die wesentlichen Routinen von Message Passing Interface. Sie sind in der Lage, einen Übergang von seriellem Code zu MPI zu organisieren.
- Sie können identifizieren, welche Abschnitte eines einfachen Codes mit MPI parallelisiert werden können und können anschließend selbständig die entsprechenden MPI-Befehle zum Aufbau von Kommunikation und Datenaustausch hinzufügen.
- Sie kennen erfolgreiche Verfahren, um Fehler zu suchen und können diese in einfachen Softwarelösungen einsetzen.
- Sie wissen, wie eine erfolgreiche Fehlersuche und Optimierung der Programme erfolgt.
- Sie haben ein gutes Verständnis der Grenzen von MPI und können einschätzen, in welchen Fällen andere Libraries wichtig werden.
- Sie verstehen den grundsätzlichen Aufbau eines parallelen Filesystems.
- Sie lernen verschiedene I/O-Strategien kennen, verstehen die Vor- und Nachteile der I/O-Strategien und Sie sind in der Lage, eine für Ihre Problemstellung geeignete I/O-Strategie auszuwählen.
- Sie sind in der Lage, die Performance der I/O Ihrer Applikationen zu bewerten und Sie können die I/O-Performance Ihrer Applikation mithilfe verschiedener Einstellungen/Parameter des parallelen Filesystems optimieren.
- Sie können Aufbau und Funktionsweise einer Singlecore-CPU beschreiben und wissen, was Multicore- von Singlecore-Prozessoren unterscheidet.
- Sie wissen, was Pipelining und superskalare Prozessorkerne kennzeichnet.
- Sie können beschreiben, warum ein Rechenknoten durch sein Shared Memory gekennzeichnet ist.
- Sie verstehen, dass ein Rechenknoten aus einer Multicore-CPU (Single Socket) oder auch zwei Multicore-CPUs (Dual Socket) bestehen kann und sind in der Lage die Unterschiede zu erläutern.
- Sie können die Bedeutung von Peak Performance, Sustained Performance, Latenz und Bandbreite erklären.
- Sie können erläutern, nach welchen Prinzipien ein Cache funktioniert, was Cache-Kohärenz ausmacht und welche Merkmale eine NUMA-Architektur aufweist.
- Sie können den Unterschied zwischen Shared- und Distributed-Memory erläutern.
- Sie kennen die Grundprinzipien der parallelen Ausführung und sind in der Lage, Algorithmen parallel zu strukturieren.
- Sie verstehen, welche Kriterien für die Parallelität notwendig sind und welche Aspekte das parallele Ausführen verhindern.
- Sie erlernen die Grundlagen, um Flaschenhälse zu identifizieren und prinzipiell zu vermeiden.
- Sie können zwischen Task- und Datenparallelität unterscheiden und wissen, wann welche Form wie angewandt werden kann.
- Sie wissen, wie Soft- und Hardwarearchitekturen voneinander abhängen und wie sich das auf die Parallelisierbarkeit von Software und Algorithmen auswirkt.
- Sie wissen um die Heterogenität moderner Systeme und warum sie bei der Problemzerlegung berücksichtigt werden muss.
- Sie verstehen den Zusammenhang zwischen intendiertem Ergebnis und notwendiger Rechenpräzision, bzw. Art der Aufgabenzerlegung.
- Sie verstehen das Problem der Datenlokalität und dessen Einflüsse auf Algorithmusstruktur und Ausführungszeit.
- Sie kennen Ian Foster’s PCAM-Modell.
Perfomance Optimierung - Kommunikation
- Sie besitzen ein grundlegendes Verständnis von Performance als zentrale Herausforderung bei der Entwicklung von Programm-Code für Hochleistungsrechner.
- Sie kennen die wichtigsten Metriken zur quantitativen Beurteilung der Performance einer Anwendung.
- Sie verstehen Performance Optmimierung als einen iterativen strukturierten Prozess, dem sogenannten Performance Engineering Workflow.
- Sie kennen grundlegende Instrumente zur Messung der Performance sowohl der Anwendung als ganzen, Änderungen im Verlauf der Zeit, oder als Funktion einzelner Code-Abschnitte.
- Sie sind in der Lage, Optimierungsverfahren in einfachen Anwendungskontexten einzusetzen.
- Sie besitzen ein grundlegendes Verständnis des Ablaufs von Kommunikationsoperationen in MPI.
- Sie kennen und verstehen die grundlegenden Beiträge zur Kommunikation in HPC Anwendungen und können prinzipiell deren Effizienz bestimmen.
- Sie kennen Tools zur Messung der Kommunikationszeit und deren Beiträge.
- Sie kennen grundlegende Herangehensweisen für die Optimierung der Kommunikation.
- Sie setzen fortgeschrittene MPI-Techniken zur Optimierung ein.
Performance Optimierung - Node Level
- Sie können die Grundlagen moderner Prozessormikroarchitektur beschreiben.
- Sie können die Limitierungsfaktoren der modernen Prozessormikroarchitektur erläutern.
- Sie sind in der Lage zu erklären was Vektorisierung bedeutet und wie man diese anwendet.
- Sie erkennen, warum eine Schleife nicht auto-vektorisiert werden kann.
- Sie sind fähig, Sourcecode für eine bessere Node-Level-Performance zu optimieren.
Sie benötigen Zertifikate in den vorgegebenen Modulen: