In diesem Projekt implementieren die Studierenden in Zweiergruppen selbständig ein bis zwei vorgegebene Aufgaben im Umfeld der parallelen Programmierung. Diese Aufgaben sind für alle Gruppen gleich, allerdings verwendet jede Gruppe ein anderes paralleles Programmiersystem. Es werden verschiedene Systeme zur Auswahl gestellt, zum Beispiel Legion, Chapel, Julia und CompsS. Zu den Anforderungen gehören die theoretische Ausarbeitung eines parallelen Algorithmus, die Implementierung sowie das Testen auf dem Cluster der Uni Kassel. Am Ende präsentieren alle Gruppen ihre Ergebnisse und Erfahrungen, über die anschliessend diskutiert wird.

Die traditionellen parallelen Programmiersysteme MPI und OpenMP werden zunehmend wegen ihres hohen Programmentwicklungsaufwandes und einer begrenzten Portabilität kritisiert. Entsprechend wurden in den letzten Jahren und Jahrzehnten verschiedene Alternativen vorgeschlagen. Viele davon verfolgen einen taskbasierten Ansatz, d.h., die Berechnung wird nicht durch Prozesse / Threads, sondern durch Tasks beschrieben. Darunter versteht man weitgehend in sich abgeschlossene Teilprogramme, deren Anzahl anwendungsspezifisch gewählt wird. Die Tasks werden durch ein Laufzeitsystem automatisch auf die Prozesse und Threads abgebildet. Je nach Programmiersystem sind Abhängigkeiten zwischen Tasks, ihre intern parallele Ausführung und weitere Optionen möglich.

Im Seminar stellen die Teilnehmer je ein taskbasiertes paralleles Programmiersystem vor. Die Funktionalität erschließen sie sich dabei aus der Literatur, ggf. ergänzt durch Experimente mit eigenen Programmen. Beispielsysteme sind Cilk, Chapel, StarPU, COMPSs, Charm4py und Intel TBB.

Situationsbedingt finden alle Seminartreffen voraussichtlich digtal per Webex oder Zoom statt. Das erste gemeinsame Treffen (inklusive Vergabe der Themen) findet am XX statt. Weitere Infos dazu werden rechtzeitig in Moodle bekannt gegeben.

Die Veranstaltung beginnt mit einer Einführung zu Gegenstand, Anwendungsgebieten und Grundbegriffen des parallelen Rechnens. Wir behandeln Entwurfstechniken für parallele Algorithmen (z.B. paralleles Divide-and-Conquer) sowie allgemeine Anforderungen an den Entwurf effizienter Programme (z.B. Cacheoptimierung).

Anhand von drei exemplarischen Programmiersystemen werden dann im Hauptteil Grundkenntnisse zur parallelen Programmierung vermittelt:

  • OpenMP für Rechner mit gemeinsamem Speicher,
  • APGAS für Java" für Rechner mit verteiltem bzw. hybridem Speicher und
  • CUDA für GPUs.

In die Veranstaltung sind zwei Praktikumsabschnitte integriert, in denen die Teilnehmer in Zweierteams Programmieraufgaben lösen. Die Ergebnisse werden anschließend in Prüfungsgesprächen vorgestellt und bilden die Basis für die Bewertung der Veranstaltung.

Die Veranstaltung ersetzt die bisherigen Veranstaltungen PV1 und P V2.