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!
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 Rechen- und Kommunikationszentrum 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.

Um den Einstieg in die parallele Programmierung zu erleichtern empfehlen wir den Besuch der PPCES.

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

Kontakt

Tim Cramer
Tel.: +49 241 80 24924
E-mail: cramer@rz.rwth-aachen.de


Abschlußinformationen

  • Keine Stichwörter