Parallel Programming Models for Applications in the Area of High-Performance Computation (HPC)

Ziel und Aufgabe

Das Ziel des Projekts ist die Parallelisierung eines gegebenen (!) Algorithmus auf einer CPU und einer GPU. Alle Teilnehmer des Praktikums müssen drei Programmversionen durch Abänderung des gegebenen Codes erstellen, die jeweils ein anderes paralleles Programmiermodell einsetzten. Zu benutzen sind:

a) OpenMP: direktiven-basierte Shared-Memory Parallelisierung für CPUs
b) CUDA: Parallelisierung für NVIDIA GPUs
c) OpenACC: direktiven-basierte Parallelisierung für GPUs

Diese drei Paradigmen können entweder für C/C++ oder Fortran eingesetzt werden. Java (und weitere Programmiersprachen) werden von ihnen nicht nativ unterstützt. Da aber nur Lesen und Abändern des Codes erforderlich ist (kein komplettes Neuschreiben!), werden sich auch reine Java-Programmierer zurechtfinden. C/C++ Kenntnisse sind aber von Vorteil!
Da das Konzept der Parallelprogrammierung für die drei Programmiermodelle relativ ähnlich ist (insbesondere für CUDA und OpenACC), können meistens auch ähnliche Programmieransätze verwendet werden; natürlich sind aber auch neue Ideen erlaubt. Dabei muss der vorgegebene Code normalerweise nicht bis ins kleinste Detail verstanden werden und nur bestimmte Code-Regionen abgeändert werden. Die notwendige Hardware wird vom IT Center zur Verfügung gestellt.

Die besondere Herausforderung liegt hierbei neben der korrekten Implementierung insbesondere in dem Erreichen einer möglichst guten Performanz. Zur Dokumentation ist die Pflege eines (elektronischen) Entwicklertagebuchs ebenso eine Teilaufgabe innerhalb des Projekts. Am Ende des Software-Praktikums müssen die Studierenden eine ihrer Tuning-Maßnahmen vorstellen. Die Studierenden sollen zusätzlich am Anfang und Ende des Praktikums einen kurzen Fragebogen ausfüllen, der anonym (!) für Forschungsarbeiten am Lehrstuhl für Hochleistungsrechnen verwendet wird.

Termine und Vorbereitung

Das Software-Praktikum findet (semesterbegleitend) donnerstags von 14.15 - 15.45 h im Seminarraum 3 des IT Centers (Kopernikusstr. 6, Aachen) statt. Die Terminserie steht entsprechend fest und kann nicht variable geändert werden. Bitte prüfen Sie entsprechend zuerst, ob Sie diese Termine wahrnehmen können, bevor Sie sich für das Praktikum anmelden! Die Termine finden wöchentlich bis zwei-wöchentlich statt. Die einzelnen Termine werden noch mitgeteilt. Einer der Termine (16.6.) wird von 14.15 - 16.15h gehen. Wir versuchen die Termine möglichst am Anfang des Semesters zu zentrieren, sodass Sie am Ende des Semesters Zeit haben sich auf andere Klausuren vorzubereiten. Die Teilnahme an den Terminen ist Pflicht. Die Veranstaltungsmaterialen sind auf Deutsch (bei Bedarf kann während der Veranstaltung auch Englisch geredet werden).

Um den Einstieg in die parallele Programmierung zu finden, müssen (!) die Teilnehmer ca. zwei Tage am Workshop PPCES (in 2016 vom 14. März - 18. März 2016, vermutlich davon Montag und Freitag - die PPCES Webseite wird in Kürze aktualisiert) teilnehmen: ~1 Tag zur Parallelprogrammierung mit OpenMP & 1 Tag zur GPU Programmierung mit OpenACC. Der Workshop wird auf Englisch gehalten. Eine Einführung in CUDA wird während des Praktikums stattfinden. Es finden dann entsprechend weniger Termine während des Semesters statt um die investierte Zeit für den Workshop aufzurechnen. Bitte melden Sie sich auf der Webseite des PPCES Workshops selbstständig für die entsprechenden Tage an (sobald die Anmeldung freigeschaltet ist) und vermerken Sie im Kommentarfeld, dass Sie an dem Software-Praktikum teilnehmen. Wir werden Sie aber auch noch einmal darauf aufmerksam machen.
Falls aus guten Gründen die Teilnahme an dem Workshop nicht geschehen kann, teilen Sie uns dies bitte rechtzeitig mit. Wir können Ihnen dann (zum Teil vertonte) Folien vom Jahr 2014 zur Vorbereitung zur Verfügung stellen.

Die Programmierabeiten können Sie an Ihrem eigenen Laptop machen, den Sie zu den Praktikumsterminen mitbringen. Alternativ stellen wir für die Praktikumstermine Laptops zur Verfügung, mit denen Sie sich remote auf den RWTH Compute Cluster verbinden können.

Der Algorithmus

Es soll ein unvorkonditionierter CG-Algorithmus (Conjugate Gradient) zum Lösen eines dünnbesetzten linearen Gleichungssystems der Form A * x = b parallelisiert werden. Bewertet wird hierbei die Laufzeit die zum Erreichen des Konvergenzkriteriums benötigt wird (nicht (!) die Gesamtlaufzeit). Mehr Details zum Algorithmus werden während der Veranstaltung gegeben.
Dünnbesetze Matrizen kommen häufig in ingenieurswissenschaftlichen Simulationen vor. Das bedeutet, dass die Matrizen sehr viele Nulleinträge besitzen und oft nur um die Hauptdiagonale Werte ungleich Null enthalten. Um Speicherplatz zu sparen, werden nur die von Null verschiedenen Einträge gespeichert (z.B. im sogenannten CRS-Format oder ELLPACK-Format).

Voraussetzungen

Programmierkenntnisse in Java, C/C++ oder Fortran sind sinnvoll.
Linux-Kenntnisse sind von Vorteil, aber nicht zwingend nötig. Die zur Verfügung gestellte Hardware wird unter Linux laufen.
Es sind keine Vorkenntnisse in Parallelprogrammierung nötig.

Kontakt

Sandra Wienke
E-mail: contact@hpc.rwth-aachen.de

  • No labels