Parallele und Funktionale Programmierung english translation

Themen der Vorlesung:


Teil I - Handwerkszeug des Parallelprogrammierers
1. Introduction
  1. Steigender Appetit, aber die Zukunft ist Multi-Core
  2. Fach-Jargon
  3. Basiswissen über Petri-Netze
2. Generation of parallelism in programs
  1. Programmiersprachliche Konzepte (fork, join, cobegin, forall)
  2. Aktivitätsfäden in Java: Thread und Runnable, Zustände
  3. Arbeitspakete; ExecutorService
  4. Future-Objekte und Ausdrücke
3. data synchronisation
  1. Wettlaufsituationen
  2. Gemeinsamer Zustand
  3. Kritische Abschnitte
  4. synchronized
  5. Rechnen mit Petri-Netzen
4. thread-safety
  1. Zusammenhang von Sichtbarkeit und Speichermodell
  2. volatile und atomic
  3. Flüchtende Objekte
  4. Typische Fehler
5. liveness problems
  1. Verklemmung
  2. - Philosophen
  3. - Bedingungen
  4. - Gegenmaßnahmen
  5. Verhungern
Teil II - Anwendungstypen und Effizienzfragen
6. task-parallel approaches (1)
  1. Einfache Task-Abhängigkeiten (Granularität)
  2. Klient & Dienstleister (Mindestproblemgröße)
  3. - Web-Server (Lastbalance)
  4. Chef & Arbeiter (Arbeitspaktgröße)
  5. - Seitenanzeige im Web-Browser (Speedup)
  6. - Monte-Carlo-Simulation (Amdahl)
7. task-parallel approaches (2)
  1. Arbeitsdiebstahl (Parallelitätsbegrenzung)
  2. - Strahlverfolgung
  3. Fließband, Produzent & Konsument (Fließbandgewinne)
  4. - Dateisystemindizierung
  5. Paralleles teile-und-herrsche (Mindestnutzarbeit)
  6. - Fibonacci (Umstiegspunkte)
  7. - Sortieren durch Mischen
  8. - Suchraumdurchforstung
8. data-parallel approaches (1)
  1. Geometrische Dekomposition
  2. - Grafikfilter
  3. Synchronisationsbarriere
  4. Turnier-Ansatz zur Reduktion (Lemma von Brent)
  5. - Maximumssuche im Feld (Schneller trotz Mehrarbeit)
  6. - Summe aller Feldelemente
  7. Paralleler Algo. von Prim
  8. Paralleler Algo. von Dijkstra
9. data-parallel approaches (2)
  1. Verzeigerte Datenstrukturen
  2. - Zeigerverdopplung
  3. Deklarativer Ansatz: MapReduce
  4. Konzept
  5. Anwendungsbeispiele
  6. - Algo. von Dijkstra
  7. - Web-Seitenwichtigkeit
Teil III - Funktionale Programmierung
10. Introduction and Basics
  1. Einführung und Motivation
    • Nebenwirkung / Werttreue
    • Funktionale vs. imperative Programmierung
  2. Funktionale Programmierung (mit Scala)
    • Datentypen (Liste, Tupel, String, Funktion)
    • Currying und Sektionen
    • Bedingte Ausdrücke
    • Mustervergleich (Pattern Matching)
    • Mengenabstraktionen, Generatoren, Wächter (Guards)
11. Main Features of Functional Programming
  1. Funktionale Programmierung (mit Scala) - Fortsetzung
    • Funktionen höherer Ordnung
    • Bedarfsauswertung (Lazy Evaluation)
    • Ströme: „unendliche“ Datenstrukturen mit Stream
  2. Eigene Datentypen
    • Type Aliasing
    • Aufzählungsdatentypen
    • Algebraische Datentypen (case class / object)
12. Parallelization
  1. Datenstrukturen: Parallel Immutable Collection
  2. Kontrollfluss: Future
  3. Spezialkonzept: Actor
13. Functional programming - illustrated
  1. Vergleich: Scala vs. Java 8
  2. Anwendungsbeispiele zu MapReduce
    • Googles MapReduce / Apache Hadoop
    • Dijkstra mit MapReduce