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 stichwortartigen Entwicklertagebuchs ebenso eine Teilaufgabe innerhalb des Projekts. Die Studierenden müssen zusätzlich am Anfang 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) dienstags 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. Wir versuchen die Termine möglichst am Anfang des Semesters zu zentrieren, sodass Sie am Ende des Semester 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 (16. März - 20. März 2015, vermutlich davon Mittwoch und Freitag) 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 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 letzten Jahr zur Vorbereitung zur Verfügung stellen.

Es ist möglich (aber unwahrscheinlich), dass wir die GPU Programmierung nicht mit OpenACC sondern mit dem Accelerator Model von OpenMP 4.0 vornehmen. Die Einführung während des PPCES Workshops wäre dann entsprechend auch mit OpenMP 4.0.

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).

Kontakt

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

  • Keine Stichwörter