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 Descend entwickelt. Descend 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 Descend 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 Descend-Compiler weiterentwickelt und evaluiert werden. Descend 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 Descend 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. |