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.

 

Haben Sie Fragen? Wir sind für Sie da.