HPC Software Projekt - Cheatsheet.pdf

HPC Software Projekt - Cheatsheet
HPC Software Projekt - Cheatsheet Gemeinsam genutzter Speicher und verteilte Speicherarchitekturen Definition: Gemeinsam genutzter Speicher und verteilte Speicherarchitekturen beschreiben zwei Ansätze im Hochleistungsrechnen (HPC) zur Organisation von Speicherressourcen. Details: Gemeinsam genutzter Speicher: Mehrere Prozessoren greifen auf denselben physischen Speicher zu. Einfacheres Programmier...

© StudySmarter 2024, all rights reserved.

HPC Software Projekt - Cheatsheet

Gemeinsam genutzter Speicher und verteilte Speicherarchitekturen

Definition:

Gemeinsam genutzter Speicher und verteilte Speicherarchitekturen beschreiben zwei Ansätze im Hochleistungsrechnen (HPC) zur Organisation von Speicherressourcen.

Details:

  • Gemeinsam genutzter Speicher: Mehrere Prozessoren greifen auf denselben physischen Speicher zu.
  • Einfacheres Programmiermodell
  • Datenzugriff kann zu Engpässen führen
  • Beispiel: Symmetric Multiprocessing (SMP)
  • Verteilte Speicherarchitekturen: Jeder Prozessor hat eigenen lokalen Speicher.
  • Skalierbarkeit durch Hinzufügen von Knoten
  • Datenbewegung über Netzwerk notwendig
  • Beispiel: Massively Parallel Processing (MPP)

Parallele Programmierung mit OpenMP und MPI

Definition:

Parallele Programmierung mit OpenMP und MPI bezieht sich auf die Verwendung von zwei weit verbreiteten Standards für paralleles Rechnen: OpenMP für gemeinsamer Speicher und MPI für verteilten Speicher.

Details:

  • OpenMP: API für gemeinsame Speicherarchitektur, Verwendung von Compiler-Direktiven
  • MPI: Bibliothek für verteilte Speicherarchitektur, Kommunikation zwischen Prozessen
  • Synchronisation und Lastverteilung sind Schlüsselaspekte
  • Typische Anwendungsgebiete: numerische Simulationen, wissenschaftliches Rechnen
  • Performance-Messungen und -Optimierungen sind essentiell

Vermeidung und Behebung von Race Conditions

Definition:

Race Conditions treten auf, wenn der Output eines Programms vom zeitlichen Ablauf der Zugriffe auf geteilte Ressourcen abhängt. Diese Bedingungen können zu unvorhersehbarem Verhalten führen.

Details:

  • Nutzung von Sperren (Locks), z.B. Mutexe, um den Zugang zu kritischen Abschnitten zu kontrollieren.
  • Verwendung von atomaren Operationen zur Sicherstellung, dass bestimmte Aktionen unteilbar sind.
  • Implementierung von Synchronisationsmechanismen wie Semaphoren und Monitore zur Koordinierung von Threads.
  • Vermeidung von gemeinsam genutzten Zuständen wo möglich, z.B. durch Immutable-Objekte oder Thread-Local Storage.
  • Überprüfung und Testen auf Race Conditions durch Tools wie Thread Sanitizer.
  • Design-Strategien wie Erhöhung der Granularität der Sperren oder der Einsatz von Transaktionsememory (STM).

Cache-Optimierung und Speicherhierarchien

Definition:

Cache-Optimierung zielt auf die Verbesserung der Nutzung des Cache-Speichers ab, um die Gesamtleistung zu steigern. Speicherhierarchien beziehen sich auf die Strukturierung von Speicher in verschiedenen Ebenen, die sich in Größe und Zugriffsgeschwindigkeit unterscheiden.

Details:

  • Lokale Datenzugriffsmuster optimieren
  • Cache-Ausrichtungen beachten
  • Mehrere Speicherzugriffsebenen (Register, L1, L2, L3, Hauptspeicher)
  • Vermeidung von Cache-Misses (Trefferquote maximieren)
  • Verwendung von Prefetching
  • Speicheraffinität beachten -> Daten in der Nähe der nutzenden Prozesse platzieren
  • Möglichst sequentielle Speicherzugriffe

Explizite Vektorisierung (SIMD) und Algorithmische Optimierungen

Definition:

Verwendung von SIMD-Befehlen und optimierten Algorithmen zur Beschleunigung der Rechenleistung in HPC-Anwendungen.

Details:

  • SIMD (Single Instruction, Multiple Data): Parallelverarbeitung von Daten durch eine einzige Anweisung.
  • Explizite Vektorisierung: Manuelles Umwandeln von Schleifen/Operationen in SIMD-kompatiblen Code.
  • Algorithmische Optimierungen: Anpassung und Verbesserung von Algorithmen, um die Leistung zu steigern.
  • Ziele: Reduzierung der Ausführungszeit, Minimierung des Speicherzugriffs, Erhöhung der Parallelität.
  • Beispiele für SIMD: SSE, AVX von Intel; NEON von ARM.
  • Typische Techniken: Unrolling, Loop Fusion, Cache-Optimierung.

Skalierungsmodelle und Metriken

Definition:

Bestimmen und bewerten die Leistungsfähigkeit von HPC-Anwendungen im Bezug auf ihre Fähigkeit, bei Erhöhung der Ressourcen effizient zu skalieren.

Details:

  • Speedup: \( S(p) = \frac{T(1)}{T(p)} \)
  • Parallel Efficiency: \( E(p) = \frac{S(p)}{p} \)
  • Amdahls Gesetz: Effekt der seriellen Anteile auf Speedup
  • Gustafson's Gesetz: Berücksichtigt variierende Problemgrößen
  • Schwache Skalierung: Konstante Prozesorlast (Problemgröße wächst mit der Anzahl der Prozessoren)
  • Starke Skalierung: Konstante Problemgröße unabhängig von Prozessoranzahl

Versionsverwaltung und Continuous Integration für HPC

Definition:

Versionsverwaltung (z. B. Git) und Continuous Integration (CI) (z. B. Jenkins) ermöglichen effizientes Management und Automatisierung des Entwicklungsprozesses von HPC-Software.

Details:

  • Versionsverwaltung:
    • Verfolgen von Codeänderungen
    • Zusammenarbeit im Team
    • Ermöglicht Rollbacks bei Fehlern
  • Continuous Integration:
    • Automatisiertes Bauen, Testen und Bereitstellen von Software
    • Frühes Erkennen von Fehlern
    • Hält Software stets in auslieferbarem Zustand
  • Spezielle Anforderungen für HPC:
    • Skalierbarkeit auf große Systeme
    • Support für heterogene Umgebungen

Profiling-Tools und Leistungsmessung

Definition:

Analyse-Tools zur Bewertung und Optimierung der Performance von HPC-Anwendungen.

Details:

  • Profiling-Tools: Erfassen Laufzeitdaten von Anwendungen (z.B. gprof, Intel VTune, Arm MAP).
  • Leistungsmessung: Bewerten Effizienz und Skalierbarkeit (z.B. Likwid, PAPI).
  • Wichtigste Metriken: Ausführungszeit, CPU-Auslastung, Speicherzugriffe, I/O-Operationen.
  • Visualisierung: Hilft bei Identifikation von Engpässen (z.B. Grafiken, Heatmaps).
  • Optimierung: Anhand der Daten können Codeabschnitte verbessert werden.
Sign Up

Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

Kostenloses Konto erstellen

Du hast bereits ein Konto? Anmelden