Eine Programmiersprache zur sicheren Programmierung von GPUs: Entwicklung und Evaluation des Descent-Compilers

Veranstaltungsnummer 102058

Grafikkarten (GPUs) sind ein wichtiger Bestandteil von modernen Hochleistungsrechnern. Die Programmierung von GPUs ist bekannt dafür, schwierig und fehleranfällig zu sein. Ein Grund für die Schwierigkeiten in der Programmierung von GPUs sind die dafür zur Verfügung stehenden Low-Level-Programmiersprachen, wie CUDA oder OpenCL. In Anlehnung an die Programmiersprache C bieten diese eine große Flexibilität und Kontrolle über die unterliegende Hardware auf Kosten von Sicherheitsmechanismen, die vor Programmierfehlern wie illegalen Speicherzugriffen, Null-Pointer-Dereferenzierungen und Data Races schützen.

Für die Programmierung von CPUs existieren heutzutage Programmiersprachen, die diese Probleme erfolgreich adressieren, während Experten weiterhin die volle Kontrolle über das System behalten. Die wohl bekannteste Sprache in diesem Kontext ist Rust. Beispielsweise gibt es in Rust ein Konzept, nachdem Daten von einzelnen Codeabschnitten besessen werden. Nur ein besitzender Codeabschnitt kann die Daten manipulieren. Dadurch können Fehler wie Data Races erfolgreich vermieden werden.

Basierend auf den in Rust verwendeten Ideen zur Absicherung von paralleler Programmierung wird in der Arbeitsgruppe Parallele und Verteilte Systeme der WWU in Kooperation mit Forschern der University of Edinburgh die Programmiersprache Descent entwickelt. Descent erweitert die Konzepte in Rust um GPU-spezifische Sprachkonstrukte und soll die sichere, aber hardwarenahe Programmierung von GPUs ermöglichen. Ziel ist es, GPU-Programme in Descent zu schreiben und diese mit einem in Rust implementierten Source-to-Source Compiler in korrekten hochperformanten CUDA- oder OpenCL-Code zu übersetzen.

In diesem Projektseminar soll der Descent-Compiler weiterentwickelt und evaluiert werden. Descent soll genutzt werden, um praktisch relevante Anwendungen aus dem Bereich des Hochleistungsrechnens zu implementieren. Dazu werden als Teil des Projektseminars bestehende Implementierungen in CUDA und OpenCL analysiert und in Descent neu implementiert. Gleichzeitig wird an der Codegenerierung gearbeitet, die entsprechend den Anforderungen der Anwendungen angepasst und weiterentwickelt wird. Am Ende des Projektseminars soll für eine Auswahl an Anwendungen hochperformanter GPU-Code generiert und dessen Performance mit handgeschriebenem CUDA- und OpenCL-Code verglichen werden.


Veranstalter

Ansprechpartner: Bastian Köpcke M.Sc. und Florian Fey M.Sc.