Performance Optimierung

13. Januar – 05. April 2020

In diesem Lernmodul konzentrieren Sie sich auf den Kern des Supercomputing: Performance. Das Lernangebot  wendet sich an Software-Entwickler und Interessierte,  die in ihren Unternehmen parallele Algorithmen für komplexe Fragestellungen entwickeln und hochperformanten Programmiercode für parallele HPC-Architekturen implementieren.

Perfomance Optimierung

Der Schwerpunkt des HPC liegt darauf, die Zeit zur numerischen Lösung von Berechnungsproblemen zu reduzieren. Das Ziel ist es, einen Algorithmus effizient in einer geeigneten Programmiersprache so zu implementieren, dass er zu einem Programm führt, das den Rechner möglichst optimal ausnutzt. Was in der Theorie einfach anmutet, erweist sich in der Praxis schnell als kompliziert. Einige Gründe:

Rechenleistung stößt an ihre Grenzen
Da die Rechenleistung moderner CPUs inzwischen an physikalischen Grenzen stößt, werden Leistungszuwächse in HPC-Systemen in der Regel durch eine wachsende Anzahl von miteinander vernetzten Prozessoren erzielt. Aktuelle Cluster und Supercomputer bestehen typischerweise aus einer Vielzahl von Multiprozessor-Computern oder -Knoten, die eine Parallelisierung der Algorithmen erforderlich macht. Multiprozessor-Computer, Multicore-Prozessoren und Multithread-Prozessorkerne teilen sich viele Ressourcen; dies kann zu erheblichen Konflikten führen, die die Beschleunigung paralleler Programme begrenzen.

Kommunikationsaufwand durch Paralleles Rechnen
Parallelisierung führt dabei immer zu Synchronisierungs- und Kommunikationsaufwand. In einem Rechencluster kann das Netzwerk zwischen Knoten ein Engpass sein, wenn das Programm kommunikationsintensiv ist. Außerdem begrenzen alle nicht parallelisierten Codebereiche die Skalierbarkeit des Parallelprogramms (Amdahl's Law). Ein weiterer Grund für schlechte Skalierbarkeit ist Load Imbalance, wenn einige Prozesse nichts tun, weil sie auf Ergebnisse anderer Prozesse warten müssen.

Flaschenhals Bandbreite zum Speicher
Moderne Prozessoren erzielen zwar eine sehr hohe Spitzenleistung, die Rechenleistung leidet aber darunter, dass die Bandbreite zum Speicher hinterherhinkt: Oft können Prozessoren nicht schnell genug mit Daten versorgt werden, um eine hohe Rechengeschwindigkeit aufrechtzuerhalten. Dieser Umstand verschärft sich, wenn ein Programm nicht cache-freundlich ist, wenn also die Art, wie Daten im Speicher abgerufen werden, unzureichend organisiert ist.  
Es lassen sich also zahlreiche Faktoren in einem komplexen System ausmachen, die die Performance limitieren.

Mit welchen systematischen Methoden Sie die Performance Ihrer Anwendung optimieren, lernen Sie in diesem Modul.

Das Modul Performance Optimierung

Dieses Modul befindet sich noch in Vorbereitung und die Inhalte sind daher noch Änderungen unterworfen.

Zielgruppe
 

  • Software-Entwickler
  • Software-Architekten

Modulinhalte


Dieses Modul vermittelt Hintergründe und methodisches Know-how rund um die geschilderten Performanz-Herausforderungen des parallelen Programmierens. Dabei werden drei Ebenen der Optimierung ausgeleuchtet:

CPU

  • Cache blocking
  • Schleifenblocking
  • Speichermanagement
  • Cachelines
  • Indirekte Adressierung
  • Vektorisierung
  • NUMA (Memory, CPU)
  • Thread Pinning
  • Pinning
  • Binding

Kommunikation

  • Asynchrone Kommunikation
  • Globale Kommunikation
  • Synchronisation
  • Last-Balance

I/O

  • Parallele Filesysteme (Einführung)
  • Kosten von Lese/Schreib-Prozessen
  • Streaming
  • Bandbreite
  • Streaming IOPS
  • Lokal vs. Shared
  • IO-Patterns (Best Practice)
     

Voraussetzungen und technisches Vorwissen
 

Für die Teilnahme sind Kenntnisse in MPI und OpenMP eine zwingende Voraussetzung, da die Inhalte auf diesem Wissen aufbauen. Da die Weiterbildung berufsbegleitend und teilweise online stattfindet, ist der uneingeschränkte Zugang zu einem internetfähigen PC oder Laptop obligatorisch. Ein Teil der Lerninhalte ist auf Mobilgeräten (Tablets, Smartphones) darstellbar, die Nutzung eines PC/Laptop wird allerdings empfohlen, weil zahlreiche Übungen vorgesehen sind.
Das Betriebssystem Linux wird empfohlen.

 

Zeitaufwand


Der Zeitaufwand pro Modul beträgt rund 125 Stunden über einen Zeitraum von 12 Wochen. Er verteilt sich auf:

  • wöchentlich ca. 10 Stunden für Selbststudium, darin ein wöchentliches Online-Meeting (montagabends)
  • zwei Präsenztage in Stuttgart

Kosten


Das Weiterbildungsangebot wird vom Europäischen Sozialfonds und vom Ministerium für Wissenschaft, Forschung und Kunst Baden-Württemberg gefördert und befindet sich in der Entwicklung. Daher findet der erste Durchlauf in einer Beta-Version statt. Die Teilnahme ist für die erste Lerngruppe kostenlos.

Modulhandbuch


Das Modulhandbuch ist in Vorbereitung. Nach Fertigstellung finden Sie darin ausführliche Informationen zur Supercomputing-Akademie und zum Modul "Performance Optimierung".