Prof. Dr. habil. Sergei Gorlatch
Ein Java-basiertes Grid-System mit Skeletten
Bei sog. "Computational Grids" wird die Rechenleistung vieler Hochleistungsrechner, die über ein Netzwerk verbunden sind, zu einem verteilten Rechnerverbund zusammengefasst. Der Vorteil solcher "Verbundrechner" ist, dass bei relativ geringen Kosten äußerst leistungsfähige Recheneinheiten entstehen, die die Leistung einzelner Superrechner weit übertreffen können. Ein Nachteil ist jedoch, dass in Grids häufig sehr unterschiedliche
Rechnerarchitekturen miteinander verbunden werden, so dass Anwendungen hochgradig
portabel entwickelt werden müssen, um auf allen teilnehmenden Rechnern ausführbar zu sein. Gleichzeitig müssen die Anwendungen die Besonderheiten der einzelnen Rechner berücksichtigen, um eine möglichst gute Rechenleistung zu erzielen. Dieser Widerspruch zwischen Portabilität einerseits, und Effizienz andererseits erfordert neue Programmiermodelle für Computational Grids.
Der von der Arbeitsgruppe von Prof. Gorlatch verfolgte Ansatz für die Anwendungsprogrammierung in Grids basiert auf algorithmischen Skeletten. Dabei handelt es sich um vordefinierte Berechnungs- und Kommunikationsmuster, die auf den Grid Servern implementiert werden und dem Anwendungsprogrammierer zur Verfügung gestellt werden. Mit Hilfe anwendungsspezifischer Codes werden Skelette an konkrete Anwendungen angepasst. Ein einfaches Beispiel ist das Pipeline-Muster, bei dem die Kommunikation und Synchronisation zwischen einzelnen Pipelinestufen auf dem Server als Skelett bereitgestellt wird, während die Anwendung die verschiedenen Stufen der Pipeline implementiert und dem Skelett als Parameter übergibt. Skelette eignen sich besonders gut für Grid-Computing, da ihre parallele Implementierung vor dem Anwendungsprogrammierer verborgen bleibt. Somit können Server mit sehr unterschiedlicher Hardware-Architektur einheitlich angesprochen werden, und es ist möglich, optimierte Implementierungen einzelner Skelette und portable Anwendungsprogrammierung zu verbinden.
Es wurde ein experimentelles, Java-basiertes Grid-Programmiersystem entwickelt, um die Verwendung paralleler Programmskelette in Grid-Systemen zu untersuchen. Skelette sind typische parallele Programmmuster, die auf Hochleistungsrechnern im Grid implementiert werden und von Clients aus per Fernaufruf angesprochen werden können.
Eine wesentliche Herausforderung beim Grid Computing ist die effiziente Zuordnung von Ressourcen zu Anwendungen, da Teilanwendungen auf verschiedenen Rechnern auf Grund der Heterogenität des Grids unterschiedlich viel Zeit in Anspruch nehmen. Ein Hauptziel des Projekts ist es deshalb, eine leistungsorientierte Auswahl von Grid-Servern zu ermöglichen indem die Laufzeit von Skeletten auf unterschiedlichen Servern vorhergesagt wird [1, 2, 4]. Es wurde ein Verfahren zur Laufzeitvorhersage für Skelette in Grids entwickelt, bei dem zunächst die Laufzeit der Codeparameter eines Skelettes an Hand der Struktur des Codes und gemessener Zeitwerte für die Ausführung von Bytecodebefehlen auf dem Server bestimmt wird [3,5]. Mit Hilfe von analytischen Laufzeitvorhersagefunktionen für die einzelnen Skelette wird anschließend die Gesamtlaufzeit eines Skelettes bestimmt.
Des Weiteren wurden Verfahren entwickelt, um Skelette effizient über mehrere Rechner im Grid zu verteilen [6]. Hierzu stehen auf dem Client Bibliotheksfunktionen zur Verfügung, die die gleichen Schnittstellen implementieren wie die serverseitigen Skelette. Aufgabe dieser Bibliotheksfunktionen auf dem Client ist es, die Berechnungen möglichst effizient auf verschiedene Server zu verteilen. Dabei kommen je nach Skelett unterschiedliche Lastverteilungsstrategien zum Einsatz, die speziell für die konkreten Skelette entwickelt wurden und die vorhergesagte Performance auf den unterschiedlichen Servern verwenden, um eine möglichst effiziente Abarbeitung zu erreichen.
Im Bereich Service-basierter Grid-Computing Ansätze gewinnen Grid-Workflow Werkzeuge zunehmend an Bedeutung, die es erlauben den Daten- und Kontrollfluss von Grid-Anwendungen darzustellen und die Ausführung von Jobs oder Diensten auf Grid-Servern zu steuern und zu überwachen. Zur Erstellung von Workflow-Beschreibungen wird meist eine graphische Beschreibungssprache verwendet, basierend auf gerichteten azyklischen Graphen oder anderen graphischen Notationen, z.B. Petri-Netzen.
Im Projekt wurde eine auf farbigen Petri-Netzen basierende Beschreibungssprache für skelettbasierte Programme entwickelt und ein prototypisches Programmierwerkzeug erstellt. Gegenüber traditionellen gerichteten Graphen oder einfachen Petri-Netzen hat die Verwendung farbiger Petri-Netze den Vorteil, dass nicht nur die Struktur des Programms dargestellt werden kann, sondern mit Hilfe verschiedener Farbmengen unterschiedliche Aspekte eines Programms einheitlich beschrieben werden können. So können beispielsweise Zeitwerte als Farbmenge verwendet und den Transitionen die Performancevorhersagefunktionen der Skelette zugeordnet werden. Mit Hilfe einer Erreichbarkeitsanalsyse kann dann die maximale Ausführungsdauer der Anwendung abgeschätzt werden, ohne dass die Struktur des Petri-Netzes angepasst werden müsste.
Drittmittelgeber:
Beteiligte Wissenschaftler:
Veröffentlichungen:
|