Früher oder später kommst du als Mathematiker*in an den Punkt, deine theoretischen Erkenntnisse in praktischen Programmiercode zu gießen. Dies kann unerwartet schnell zu einem Abenteuer mit ungewissem Ausgang werden, und jeder Schritt wirft neue Fragen auf:
- Wie beginne ich, und was ist ein guter Programmierstil?
- Ist das ein Rundungsfehler oder ein Programmierfehler?
- Kann mein Algorithmus mir sagen, ob er korrekt arbeitet
- Wie kann ich mein Programm mit einfachen Mitteln schneller und effizienter machen?
In dieser Vorlesung betrachten wir anhand ausgesuchter praktischer Problemstellungen einige Fallstricke, die uns beim wissenschaftlichen Programmieren begegnen können und wie wir damit umgehen. Wir arbeiten vornehmlich in python, Programmierkenntnisse können hilfreich sein, sind aber keine Voraussetzung.
Termine und Prüfungsleistung
Typ | Ergänzungsvorlesung |
Dozent | Dr. Kai Werth |
Termin | Fr, 10-12 in R05-426 |
Sprache | Deutsch |
Creditpoints | 3 |
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.