Das Programmieren von Rechnerbündeln befindet sich derzeit
noch in
einer sehr maschinennahen Phase. Als besonders dringend
erscheint
die Behandlung der non-uniformen
Speicherzugriffshierarchie, die in
verteilten Systemen neben Registern, Cache und
Hauptspeicher um eine
weitere Leistungsebene vertieft ist. Wie im folgenden
skizziert,
erfordern gute Lösungen Arbeiten auf allen
Systemschichten.Betriebssysteminteraktion: Welche Leistungsengpässe
bestehen und wie
können diese beseitigt werden? Wie kann der
Kommunikationskanal - auch
durch das Betriebssystem hindurch - weiter verschlankt
werden (sowohl
für Methodenaufrufe, die in der Regel gute Latenzzeiten
verlangen, als
auch für Datenstromübertragungen, bei denen es auf hohe
Bandbreite
ankommt)?
Übersetzerunterstützung, Laufzeitsystem: Können
verteilte
Systeme der
Tradition von Einprozessorsystemen folgend auch weiterhin
mit der
Illusion eines transparenten Zugriffs programmiert werden?
Kann man
durch statische Analyse nebenläufigen objekt-orientierten
Codes
Informationen über bestehende Lokalitätsbeziehungen
extrahieren?
Welche Optimierungen sind dann möglich? Profitieren
statische Analyse
und Laufzeitmechanismen voneinander? Wie können durch
Programmanalyse
Pre-Fetch- und Post-Store-Kommandos im generierten Code
erzeugt
werden, durch die Kommunikation und Berechnung überdeckt
und dadurch
Wartezeiten vermieden werden?
Programmiersprache, Systementwurf: Programmierer haben
in
der Regel das anwendungsspezifische Hintergrundwissen über
bestehende Lokalitätszusammenhänge. Um guten Code zu
erzeugen, muss der Übersetzer auch über dieses Wissen
verfügen. Im Idealfall sollte der Übersetzer durch
statische und dynamische Analyse in der Lage sein, das
Wissen aus dem Programm-Code zu extrahieren - dies ist
außer in datenparallelen Sprachen bisher leider kaum
möglich.
Der alternative Ansatz, besteht im Prinzip darin, dass der
Programmierer sein Wissen explizit, z.B. mit Hilfe von
leicht zu entdeckenden Pragmas, an den Übersetzer
weitergibt. Offen ist, wie man diese Wissensweitergabe
sinnvoll ausgestaltet. Sinnvoll bedeutet dabei erstens,
dass es für den Programmierer bequem bleiben muss, und
zweitens, dass das codierte/entdeckte Wissen
aussagekräftig
genug sein muss, um vom Übersetzer oder dem Laufzeitsystem
effizienzsteigernd genutzt werden zu können.
Noch sehr schlecht verstanden ist generell, wie man
verteilte Systeme von vorneherein so entwirft,
dass Lokalität per Design vorhanden ist.
Im Jahr 2005 wurde an neuen Funktionen für den Lehrstuhl-eigenen Übersetzer entwickelt.
Ein verteiltes Sicherungsverfahren erlaubt es, eine im Rechnerbündel verteilt ausgeführte Applikation zu sichern und wiederherzustellen. Damit können Ausfälle eines Teils des Rechnerbündels abgefangen und der Verlust von Rechenzeit minimiert werden.
Das Laufzeitsystem des DSM-Übersetzers wurde um eine eigene Kommunikationsbibliothek erweitert. Diese erlaubt die Kommunikation in heterogenen Rechnerbündeln mit unterschiedlichster Kommunikations-Hardware. Neben maximaler Effizienz wurde beim Design der Bibliothek verstärkt darauf geachtet, dass sie auch die Anforderungen eines Computational Grids vollständig unterstützt (u.a. Authentifizierung und Datenverschlüsselung).