Selected Topics in Scientific Computing

oder Die 4 Schritte zum Wissenschaftlichen Programmieren

 

Es heißt, es seien 36 Schritte notwendig, um ein/e Kung-Fu-Meister/in zu werden. Den Weg zum wissenschaftlichen Programmieren meistern wir in dieser Veranstaltung bereits in vier Schritten:

  1. Lerne, den Rundungsfehler vom Programmierfehler zu unterscheiden!
  2. Der Weg von der Formel zum Code.
  3. Strukturiere deinen Code weise!
  4. Parallelisiere statt zu paralysieren!

Anhand kleiner Beispiele in Python erarbeiten wir uns eine Programmgrundlage, die wir nach und nach erweitern und optimieren, bis wir sie am Ende als Simulation auf dem Rechencluster laufen lassen können.

Dabei ist kein schwarzer Gürtel in Programmierung nötig, aber gewisse Kenntnisse erleichtern sicher den Einstieg. Wir arbeiten auf einer Jupyterhub, für die lediglich ein Browser und ein gültiger ZDV-Account benötigt wird. Es muss also nichts installiert werden.

Termine und Prüfungsleistung

Typ Ergänzungsvorlesung
Dozent Dr. Kai Werth
Termin Fr, 10-12
Form Hybrid (Teams / R05-426)
Sprache Deutsch
Creditpoints 3

 

Hybride Vorlesung:

Die Vorlesung findet üblicherweise im Multimedia-Raum der Mathematik statt (R05-426) und wird zeitgleich in MS Teams übertragen. In der ersten Woche der Vorlesung werden alle Teilnehmer in ein Team eingetragen, über das dann die Übertragung und die Verteilung der Materialien erfolgt. Jeder Teilnehmer darf frei entscheiden, ob er in Präsenz oder online teilnehmen möchte.

Ablauf der Vorlesung:

Um den Einstieg mit der Programmiersprache python so einfach wie möglich zu machen, werden wir auf einer eigenen Jupyter-Hub Instanz arbeiten, es wird also zunächst keine eigene python-Installation benötigt. Hier wird auch das Vorlesungsskript als interaktives Jupyter-Notebook liegen und hier können Templates zum Bearbeiten der Übungen hochgeladen und die fertigen Programme abgelegt werden.

Die Vorlesung wird in 4 Blöcke aufgeteilt à 3 Doppelstunden; auf zunächst 2 Doppelstunden Vorlesung folgt dann je ein Übungsblatt, welches in der darauf folgenden Woche besprochen wird.

Voraussetzungen zum Bestehen:

Voraussetzung zum Bestehen der Vorlesung sind eine aktive Teilnahme an den Übungsaufgaben mit wenigstens 50% der Punkte (pro Blatt) und der Präsentation mindestens einer (Teil)-Aufgabe. Es wird empfohlen, die Übungsaufgaben in Gruppen zu 2 bis maximal 3 Teilnehmern zu bearbeiten.

Block 1: Rechnergenauigkeit und floating point filtering

Wir steigen langsam in die Programmierung ein, gehen dabei näher auf die Darstellung von Fließkommazahlen im Rechner ein, demonstrieren die Auswirkungen von Rechenfehlern und zeigen eine Technik, damit umzugehen.

Block 2: Implementierung einer Flüssigkeitssimulation

Wir entwickeln gemeinsam ein einfaches Finites Volumen Verfahren (FV) zum Simulieren der Kelvin-Helmholz Instabilität. Hieran üben wir erste Konzepte der Softwareentwicklung, des Code Profilings und Debuggings und gehen auf Vektorisieren als erste Form der Parallelisierung ein.

Block 3: Softwaredesign und Softwarepatterns

Anhand unserer Flüssigkeitssimulation, die wir im vorherigen Block erarbeitet haben, betrachten wir einige gängige Methoden objektorientierter Programmierung, um den Code universeller und modularer zu gestalten für spätere Anwendungen und weiterführende Parallelisierungen.

Block 4: Parallelisiertes Rechnen auf Multicore- und Cluster-Systemen (und Grafikkarten)

Kaum eine Software kommt mehr ohne sie aus: die Parallelisierung. Wir lernen verschiedene Konzepte um unsere Simulationen mittels MPI auf mehrere Kerne und Prozessoren zu verteilen und werden dies auf MOGON II testen. Und wenn es die Zeit erlaubt, werden wir einen Einblick in die Programmierung von Grafikkarten wagen.