In diesem Repository befinden sich die Übungen für die Vorlesung High-Performance Computing (HPC) an der HFT Stuttgart von Sebastian Speiser. Die Vorlesung wird von einem Skript begleitet, das die Übungen verlinkt: Skript.
$$Woche | Einheit | Inhalt | Hausaufgabe | |
---|---|---|---|---|
1 | 1 | Einführung
|
|
|
2 | 2 | High-Performance: Ansätze und Grenzen - I Skript "High-Performance: Ansatz 1: Schnellere Prozessoren" mit Übungen: |
Python lernen/auffrischen, z.B. Skript "Data Analytics" Kapitel "Python Grundlagen" und "NumPy". YouTube: Jupyter Notebook | |
3 | 3 | High-Performance: Ansätze und Grenzen - II Skript "High-Performance: Ansatz 2, Ansatz 3, Ganz anders" mit Übungen: |
- | |
3/4 | 4 | Shared Memory mit OpenMP Skript "Shared Memory mit OpenMP" mit Übungen: |
- | |
5 | 5 | Daten Skript "Daten" mit Übungen: |
- | |
5/6 | 6 | Parallele Algorithmen Skript "Parallele Algorithmen" mit Übungen: |
- | |
7 | 7 | Distributed Memory mit MPI Skript "Parallele Algorithmen" mit Übung: |
- | |
8/9 | 8 | GPU Skript "Massiv parallele Prozessoren: GPUs" mit Übungen und Beispielen: |
- | |
10 | 9 | Dataparallelismus mit NumPy und Tensorflow |
- | |
11 | Puffer / Projektwerkstatt | TBD | - | |
12 | Projektpräsentationen | TBD | - | |
13 | - | Projektpräsentationen | - |
Zeigen, dass Sie ...
- ... die Konzepte aus der Vorlesung High Performance Computing auf praktische Fragestellungen anwenden können
- ... die Beispiele aus den Übungen für weitergehende Problemstellungen anpassen, kombinieren und/oder erweitern können
Dazu sollen Sie ein Programm erstellen. Der erwartete Arbeitsumfang beträgt mindestens 25 Stunden pro Person.
Ihr Programm soll mehreren Technologien (z.B. OpenMP, MPI und GPU) umgesetzt werden. Dazu ein Vergleich der Performance und Herausforderungen beim Programmieren. Wie viele Technologien sinnvoll sind, hängt von der Schwierigkeit ab, z.B.
- Wie unterschiedlich sind die Technologien - eine konzeptuelle Leistung soll ersichtsichlich sein. Gegenbeispiel: Syntax-Konvertierung von OpenMP in Java-Fork-Join-Framework
Es kann auch ausreichend sein eine einzelne Anwendung in einer einzelnen Technologie umzusetzen, wenn hier eine entsprechende Leistung nachgewiesen werden kann, z.B. durch:
- Schwierige Übersetzung des Anwendungsproblems in entsprechendes paralleles Programmiermodell. Eine optimale Umsetztung der Graustufenkonvertierung mit SIMD-Intrinsics ist ggfs. schon ausreichend
- Darstellung und Bewertung sinnvoller Zwischenschritte, z.B. Baseline zu Cache Optimierung zu SIMD zu Multithreaded, ...
- Feintuning für eine Plattform, um tatsächliche hohe Performance zu erreichen statt nur ein Konzept umzusetzen. Z.B. dokumentierte Experimente, um die optimalen Blockgrößen bei Matrix-Multiplikation festzulegen, um die Cache-Level eines Prozessors auszunutzen
- Nutzung von und Vergleich mit nicht in der Vorlesung behandelten Technologie/Konzept.
- Sehr hohe Skalierung der Anwendung, die zusätzliche Herausforderungen mit sich bringt. Z.B. Verteilung auf mehrere Rechner notwendig
- Game of Life
- Sharks and Fish (WATOR)
- Bildverarbeitung
- Matrix-Multiplikation
- Neuronale Netze
- Heat Equation oder Fire Simulation
- N-Body Simulation
- Billiardbälle mit Kollisionen
- Traffic Simulation
- Circuit Simulation
- Fraktale/Mandelbrot
- Projektbericht (Seitenangaben als Richtwerte):
- Motivation (0,5 Seiten)
- Definition Problemstellung (0,5 - 1 Seite)
- Lösungsansatz (1 Seite)
- Implementierung inklusive Schwierigkeiten (1-2 Seiten)
- Bewertung des Ansatzes und der performance-limitierenden Faktoren (1-2 Seiten)
- Erkentnisse, Fazit, nächste Schritte (0,5 - 1 Seite)
- Source Code (Link zu Repository)
- Optional: Tätigkeitsnachweis (Datum, Uhrzeit, Dauer, Tätigkeit) - hilft bei der Bewertung des Aufwands für die Problemstellung
- Vorstellung (20 Minuten)
- Fragen zu Vortrag und Verständnisfragen zu anderen Inhalten der Vorlesung (10 Minuten)