Pony [1] ist eine Programmiersprache, die dafür designed wird, hoch
performant zu sein.
Sie basiert auf dem Akteur-Modell [2]: Akteure beinhalten
sequentielle Code-Abschnitte, verschiedene Akteure werden
nebenläufig und unabhängig voneinander ausgeführt.
Die Nebenläufigkeit auf der Ebene von Akteuren [3] siedelt
Beschleunigung direkt im Design der Sprache an.
Es gibt jedoch auch andere Formen von Parallelismus auf anderen Ebenen,
welche dazu genutzt werden könnten, Pony noch performanter zu machen.
Auf Ebene der Daten gibt es sogenannten Datenparallelismus [4].
Er kann beispielsweise in Schleifennestern gefunden werden,
die viele Male ausgeführt werden und auf unabhängigen aber
gleich strukturierten Daten arbeiten.
Grafische Prozessoren (GPUs) spezialisieren sich darauf
datenparallele Probleme zu berechnen. [5]
In einem System, in dem sowohl eine GPU als auch eine CPU vorhanden
sind, kann die GPU die Berechnungen der CPU unterstützen,
indem datenparallele Probleme von ihr übernommen werden.
Der Fachbegriff dazu heißt GPU Offloading.
Die GPU berechnet aufgrund ihrer internen Struktur und Ressourcen
datenparallele Probleme effizienter und schneller als die CPU und
beschleunigt dadurch die Gesamtausführung eines Programms.
In diesem Softwareprojekt wollen wir gemeinsam herausfinden,
ob sich GPU Offloading in Pony integrieren lässt.
Dazu experimentieren wir mit Ponys Compiler und schreiben Teile
dieses Compilers um.
Das SWP bietet die Möglichkeit, einmal genauer in den internen
Aufbau eines Compilers zu blicken und sich anzusehen, wie genau
GPUs dazu verwendet werden können, ein Programm zu beschleunigen.
Darüber hinaus werden wir die Compiler Infrastruktur LLVM [6]
kennenlernen, denn der Pony Compiler ist ein Compiler Frontend
zu LLVM.
Falls Ihnen der Name LLVM nichts sagt, ist es vielleicht interessant
für Sie zu wissen, dass sowohl der Rust, als auch der Clang Compiler
Frontends zu LLVM sind.
Das Softwareprojekt zielt darauf ab im Bereich GPU Offloading zu forschen,
möglicherweise mit der Option später die Ergebnisse der Experimente
zu veröffentlichen und zu den beiden genannten Open-Source-Projekten
Pony und LLVM beizutragen.
Ablauf
Während der Vorlesungszeit wird die Aufgabenstellung mit reduziertem Anwesenheits- und Arbeitsaufwand spezifiziert. Die eigentliche Bearbeitung der Aufgabenstellung erfolgt dann in der vorlesungsfreien Zeit.
Links:
[1]: [Pony](https://www.ponylang.io/discover/#what-is-pony)
[2]: [Actor Model](https://en.wikipedia.org/wiki/Actor_model)
[3]: [Task-level parallelism](https://en.wikipedia.org/wiki/Task_parallelism)
[4]: David A. Patterson and John L. Hennessy. Computer Organization and Design: The Hardware Software Interface [RISC-V Edition]. 2nd. The Morgan Kaufmann Series in Computer Architecture and Design. Morgan Kaufmann, 2021. ISBN: 9780128203316. Page 528.
[5]: David A. Patterson and John L. Hennessy. Computer Organization and Design: The Hardware Software Interface [RISC-V Edition]. 2nd. The Morgan Kaufmann Series in Computer Architecture and Design. Morgan Kaufmann, 2021. ISBN: 9780128203316. Appendix B.
[6]: [LLVM](https://llvm.org/)
Zusätzliche Informationen
Zielgruppe
BA und MA Informatik
Webseite
https://www.mi.fu-berlin.de/w/SE/SoftwareprojektCompilerOptimization2024
Dozent & Ansprechpartner
Barry Linnert führt die Veranstaltung durch.