In dieser Arbeit wird die universelle, automatisch parallele Programmiersprache funkyImp entwickelt. Die Semantik der Sprache wurde speziell so konstruiert, dass eine schnelle und präzise Analyse zum Auffinden unabhängiger Programmteile benutzt werden kann, während die Ausführungsgeschwindigkeit der sequentiellen Programmteile vergleichbar mit C++ ist. Dies wird erreicht, indem Aliasing und Seiteneffekte auf eine solche Art und Weise eingeschränkt werden, dass die benötigte Analyse präzise und intraprozedural allen statischen Task-Parallelismus
in einer Funktion ermitteln kann.
Zusätzlich werden Teilarrays eingeführt, wie z.B. die Diagonale oder das obere Dreieck einer Matrix, als Sprachprimitive zum Ausdruck von Daten-Parallelismus. Diese Teilarrays basieren auf einem Typsystem, welches Mengen und Teilmengen von Arrayindizes über lineare Begrenzungen
definiert. Die Möglichkeit datenparallele Berechnungen über Teilarrays auszudrücken in Kombination mit den eingeschränkten Seiteneffekten, erlaubt es Optimierungen, die auf dem Polytopmodell und Threads so wie SIMD basieren, auch in komplexen und tief verschachtelten Szenarien
anzuwenden, in denen aktuelle Compiler scheitern.
Darüber hinaus wird ein statischer Ausführungsplanungsalgorithmus entwickelt, welcher die durch Thread-Koordination entstehenden Ausführungszusatz-kosten realistisch modelliert. Dieser Algorithmus ermöglicht es automatisch extrahierten Task-Parallelismus für spezifische Zielsysteme zu optimieren.
Abschließend wird die Implementierung des funkyImp Compilers und Laufzeitsystems vorgestellt zusammen mit Experimenten, welche die Effektivität des Ansatzes illustrieren.
Der zweite Teil dieser Arbeit widmet sich der manuellen Parallelisierung von Altprogrammen und nutzt Zeigeranalysen um Parallelisierungsprobleme vorherzusagen. Mittels einer Spezifikation, welche eine geplante Parallelisierung beschreibt, können solche Analysen ungeschützte, geteilte Ressourcen finden. Solche Spezifikationen können verwendet
werden, um existierende Analysen, welche das komplette Programm als Eingabe benötigen, so zu spezialisieren, dass die Menge des zur Analyse benötigten Codes stark eingeschränkt wird.
«
In dieser Arbeit wird die universelle, automatisch parallele Programmiersprache funkyImp entwickelt. Die Semantik der Sprache wurde speziell so konstruiert, dass eine schnelle und präzise Analyse zum Auffinden unabhängiger Programmteile benutzt werden kann, während die Ausführungsgeschwindigkeit der sequentiellen Programmteile vergleichbar mit C++ ist. Dies wird erreicht, indem Aliasing und Seiteneffekte auf eine solche Art und Weise eingeschränkt werden, dass die benötigte Analyse präzise und i...
»