Implementierung und Bewertung eines alternativen Parallelitätsparadigmas für JaMP

Student:Benjamin Bieber
Title:Implementierung und Bewertung eines alternativen Parallelitätsparadigmas für JaMP
Type:diploma thesis
Advisors:Klemm, M.; Philippsen, M.
State:submitted on December 19, 2006
Prerequisits:

Bei OpenMP handelt es sich um ein Programmiermodell für die Sprachen C/C++ und Fortran, welches eine einfache und flexible Schnittstelle zur Entwicklung von Shared-Memory-Anwendungen bietet. Mit JaMP wurde am Lehrstuhl eine Portierung des OpenMP-Programmiermodells für die Programmiersprache untersucht und implementiert. Die Basis für JaMP bildet das Übersetzersystem Jackal, welches Java-Quellprogramme in Maschinenprogramme für eine ganze Reihe von Architekturen übersetzen kann. Jackal verfügt dabei auch über die Fähigkeit, ein Rechnerbündel mit Hilfe eines speziellen Laufzeitsystems als DSM-System nutzen zu können.

Die vorliegende Implementierung von JaMP verwendet Aktivitätsträger, die bereits in der Sprachspezifikation von Java verfügbar sind. Der JaMP-Übersetzer bildet dabei die parallelen Abschnitte des Programms auf einzelne Java-Aktivitätsträger ab. Dies geschieht über Austrennen von Programmcode in eine seperate Funktion, die dann die run()-Methode der JaMP-Aktivitätsträger bildet.

Seit Java 5 steht mit dem java.util.concurrent-Paket jedoch eine weitere Möglichkeit zur Verfügung, Parallelität in einem Java-Programm auszudrücken. Hierzu stellt das Paket zahlreiche neue Konstrukte zur Verfügung. Genannt seien an dieser Stelle: die Möglichkeit atomare Daten zu nutzen (AtomicInteger, AtomicLong usw.), asynchrone und verzögerte Ausführung von Methoden (Future und Delayed), sowie Semaphoren und andere (reentrante) Sperrobjekte.

Topic:

Der Bearbeiter soll im Rahmen dieser Arbeit den existierenden JaMP-Übersetzer dahingehend erweitern, so dass dieser in der Lage ist, Code zu erzeugen, der das java.util.concurrent-Paket nutzt. Hierzu muss zunächst geklärt werden, welche Teile aus java.util.concurrent benötigt werden, um eine Ausführung eines JaMP-Programms zu ermöglichen. Die nötigen Konstrukte des Pakets sollen anschließend in das Jackal-Laufzeitsystem eingebettet werden. Hierbei ist darauf zu achten, dass die Portierung möglichst effizient ist. Es muss entschieden werden, welche Teile des Pakets in Java und welche Teile direkt im C-Teil des Laufzeitsystems implementiert werden.

In einem zweiten Schritt muss die Code-Erzeugung des JaMP-Übersetzer dahingehend erweitert werden, dass die Konstrukte aus java.util.concurrent verwendet wird, um das parallele JaMP-Programm auszuführen. Hierbei ist sicherzustellen, dass der erzeugte Code schlank ist und mit möglichst hoher Effizienz ausgeführt werden kann. Die existierende JaMP-Implementierung kann hier als Vorlage dienen; wo jedoch neue Übersetzerschablonen sinnvoll erscheinen, sind die diese entsprechend zu implementieren.

Die java.util.concurrent-Variante des JaMP-Übersetzers ist mit der Java-Thread-Variante durch aussagekräftige Messungen zu vergleichen. Die Auswahl der Benchmarks soll durch den Bearbeiter erfolgen. Sofern keine passenden Benchmarks bereits von Jackal bereitgestellt werden, sind neue Benchmarks zu entwickeln. Es soll beurteilt werden, welche Art von Transformation sich für welche Art von Programmen eignet. Die Messergebnisse sind argumentativ zu begründen.

Abschließend soll die Arbeit klären, ob sich das java.util.concurrent-Paket besser für eine Reparallelisierung von parallelen Regionen eignet, als die Variante mit Java-Threads. Unter Reparalleliserung ist hierbei eine Änderung der für die Ausführung einer parallelen Region benutzten Thread-Anzahl zu verstehen.

watermark seal