PHPC Parallel and High Performance Computing – Erstklausur 2025

(Dies ist ein Gedankenprotokoll, das den Klausurinhalt versucht detailliert wiederzugeben.)


Aufgabe 1: Computational Intensity

  • Beschreibung:
    Definieren Sie den Begriff der Computational Intensity.
    Ein mögliches mathematisches Beispiel wäre:

  • Shared Memory Prints:

    • Geben Sie Beispiele, in denen verschiedene Threads ihre Ausgaben (Prints) erzeugen.
    • Erklären Sie, in welcher Reihenfolge die einzelnen Threads (z. B. Thread 1, Thread 2, …) ihre Ausgaben produzieren.
    • Diskutieren Sie, wie die Reihenfolge der Prints durch Synchronisation oder Scheduling beeinflusst wird.

Aufgabe 2: Cache Misses

  • Erklärung:
    Beschreiben Sie, was Cache Misses sind, und warum sie auftreten.

  • Arten von Cache Misses:
    Nennen und erklären Sie die unterschiedlichen Typen, z. B.:

    • Compulsory Misses (Kaltstarts)
    • Capacity Misses
    • Conflict Misses

Aufgabe 3: False Sharing

  • Definition:
    Erklären Sie den Begriff False Sharing.

  • Behebung:
    Beschreiben Sie Ansätze, um False Sharing zu beheben, beispielsweise durch Padding oder Neuordnung der Daten.

  • Unterschied zu True Sharing:
    Diskutieren Sie den Unterschied zu True Sharing, bei dem mehrere Threads absichtlich auf dieselben Daten zugreifen, um Kommunikation zu ermöglichen.


Aufgabe 4: OpenMP

  • Kursinhalt:
    Erläutern Sie die Grundlagen von OpenMP, wie sie im Kurs behandelt wurden.

  • Print Statements in verschiedenen Bereichen:

    • Erklären Sie, wie viele Print-Ausgaben in Parallelbereichen und in kritischen Abschnitten (Critical Sections) ausgegeben werden.
    • Untersuchen Sie, wie der Einsatz von Critical Sections die Ausgabe-Reihenfolge beeinflusst.
  • Shared Attributes:
    Beschreiben Sie, ob und wie Variablen als first private, mapped, private, shared usw. deklariert wurden.
    Erklären Sie deren Bedeutung und Auswirkungen auf die Parallelität.


Aufgabe 5: Numer

  • Befehl und Output:
    Erklären Sie den Befehl:

    und interpretieren Sie den dazugehörigen Output im Hinblick auf die verwendete Hardware.


Aufgabe 6: Code-Optimierung (Array-Multiplikation)

  • Gegebener Code:
    Ein Beispiel könnte eine Matrixmultiplikation sein, bei der für jedes Element gilt:

  • Optimierung:
    Erklären Sie, wie Sie den Code „speed-uppen“ können, z. B. durch:

    • Schleifenoptimierung
    • Parallelisierung
    • Nutzung von SIMD-Instruktionen oder anderen Hardware-Optimierungen

Aufgabe 7: Scaling Study

  • Graphen Zuordnung:

    • Graph 1: Eine nahezu horizontale Linie (parallel zur X-Achse), die Strong Scaling darstellt.
      Beispielhaftes Skalierungsmaß:

    • Graph 2: Ein Graph, der von oben links nach unten rechts verläuft und Weak Scaling repräsentiert.

  • Abweichungen vom Ideal:
    Erklären Sie, warum der Graph vom idealen Skalierungsverhalten abweicht und welche Faktoren (z. B. Overhead, Kommunikationskosten) dazu führen.


Aufgabe 8: MPI

  • Korrektheit der MPI-Codeabschnitte:
    • Analysieren Sie, ob die gegebenen MPI-Codeabschnitte korrekt implementiert sind.
    • Diskutieren Sie, ob es zu Deadlocks kommen kann, und begründen Sie Ihre Antwort.
  • Kommunikation in MPI:
    • Erklären Sie den Unterschied zwischen Blocking und Non-Blocking Kommunikation.
    • Beschreiben Sie, welche Funktion MPI Tags haben, um Nachrichten zu identifizieren.
    • Erklären Sie die allgemeinen Kommunikationsmechanismen in MPI.
    • Erläutern Sie, was MPI Window Objects sind und welche Rolle sie in der Kommunikation (z. B. in RMA, Remote Memory Access) spielen.

Aufgabe 9: HPC Netzwerk-Kommunikation

  • Netzwerktechnologien:
    Nennen Sie die zwei wesentlichen Netzwerk-Kommunikationstechnologien, die in HPC eingesetzt werden.

  • Latency in HPC Networks:

    • Definieren Sie den Begriff Latency:

    • Erklären Sie, in welchen Anwendungen die Latenz ein kritischer Leistungsindikator ist.

  • Praxisbeispiel:
    Entwickeln Sie ein Programmkonzept, das die Inter-Node Latency misst.


Aufgabe 10: Historische Verbesserung der Latenz

  • Diskussion:
    Diskutieren Sie die historischen Verbesserungen der Latenz in Bezug auf:
    • Computational to Bandwidth
    • Floating
      Erklären Sie, wie sich diese Verbesserungen auf moderne HPC-Systeme ausgewirkt haben.

Aufgabe 11: Surface-to-Volume Ratio in HPC Systems

  • Definition:
    Erklären Sie das Surface-to-Volume Ratio, welches z. B. wie folgt definiert werden kann:

  • Bedeutung:
    Diskutieren Sie, warum dieses Verhältnis ein wichtiger Leistungsindikator für die Performance von HPC-Systemen ist, insbesondere in Bezug auf Kommunikations- und Speicherzugriffsmuster.


Aufgabe 12: Graph Petitioning (Graph Partitioning)

  • Definition:
    Erklären Sie, was unter Graph Petitioning (im Kontext von Graph Partitioning) zu verstehen ist.

  • Bedeutung:
    Diskutieren Sie, welche Rolle dieses Konzept bei der Optimierung von HPC-Anwendungen spielt, z. B. beim Ausbalancieren der Last in parallelen Berechnungen.


Aufgabe 13: Vektoraddition in UPC

  • Gegebene Situation:
    Eine Vektoraddition wird durchgeführt, bei der gilt:

    Das heißt, für jedes Element:

  • UPC “for all” Schleife:
    Es gibt zwei Varianten der Schleife:
    Eine Version verwendet den Ausdruck i als viertes Argument, die andere i + 1.
    Ein typischer Loop könnte so aussehen:

  for (i = 0; i < N; i++; <Vierte Ausdruck>)
  {
      C[i] = A[i] + B[i];
  }
 
 
  • Aufgabenstellung:
    • Erklären Sie die Rolle des vierten Ausdrucks in der UPC “for all” Schleife.
      • Diskutieren Sie, welche Performance-Unterschiede sich aus der Verwendung von i gegenüber i + 1 als viertes Argument ergeben.
      • Erörtern Sie die Implikationen, die dieser vierte Parameter für die Iterationsaufteilung und Datenverteilung hat.
×

MyUniNotes is a free, non-profit project to make education accessible for everyone. If it has helped you, consider giving back! Even a small donation makes a difference.

These are my personal notes. While I strive for accuracy, I’m still a student myself. Thanks for being part of this journey!