Abstract
Current (heterogeneous) multi-core environments such as GPU architectures are hard to program with normal imperative and object-oriented (OO) languages because of race-conditions and general side-effects that code may have. We propose that both problems can be solved with a hybrid language that combines both Functional Programming (FP) and OO programming. By auto-parallelization in the FP-core, all loops and non-dependent calls can be executed in parallel. FP is to be used to write computationally intensive code with safe concurrent memory access. OO is to be used for I/O and management related tasks. In this article, we propose a new clean way to integrate the two language cores that even grants some restricted means to read and write arrays and objects from within FP mode. For the proposed new language features we have developed a compiler prototype that transparently parallelizes code to target both Cuda and multi-core machines (without annotations from the programmer) and that obtains good speedups.
Zusammenfassung
Aktuelle (heterogene) Multi-Core Umgebungen wie z. B. GPU-Architekturen können nur umständlich mit normalen imperativen Programmiersprachen oder mit Objekt-Orientierten (OO) Sprachen programmiert werden, weil diese Sprachen weder Wettlaufsituationen noch allgemeine Seiteneffekte im Code verhindern. Beide Probleme können mit einer hybriden Sprache gelöst werden, die sowohl Funktionale Programmierung (FP) als auch OO-Programmierung unterstützt. Durch automatische Parallelisierung in FP-Teilen eines Programms können alle Schleifen und unabhängige Methodenaufrufe parallel ausgeführt werden. Rechenintensive Programmabschnitte sollten mit FP-Sprachmitteln ausgedrückt werden, da diese sichere parallele Datenzugriffe garantieren. OO-Sprachmittel dienen dazu, Ein- und Ausgaben zu tätigen und allgemeinen Verwaltungscode zu gestalten. Der vorliegende Artikel stellt eine neue saubere Integration beide Sprachkonzepte vor, die im FP-Teil sogar eingeschränktes Lesen und Schreiben von Objekten erlaubt. Für die neuen Sprachmittel haben wir einen prototypischen Übersetzer entwickelt, der Code transparent parallelisiert (ohne Annotationen durch den Programmierer) und diesen sowohl auf Cuda als auch auf Multi-Core-Rechnern zur Ausführung bringt und dabei gute Beschleunigungen erzielt.
© by Oldenbourg Wissenschaftsverlag, Erlangen, Germany