High Performance Fortran HPF
HPF-Compiler am RRZN
Programmierung
Meine persönliche Einschätzung
- Existierende Anwendungen mit explizitem Message Passing:
Es macht vermutlich immer noch wenig Sinn,
Fortran-Programme, die lauffähig in Message Passing (z.B. MPI)
vorliegen, nach HPF zu übertragen. Die Wartbarkeit des
HPF-Programmes wäre (von Ausnahmen abgesehen)
zwar besser, die Laufzeiteffizienz wäre
(von Ausnahmen abgesehen) deutlich schlechter.
-
Existierende serielle Programme:
Wenn man einen HPF-2.0-Compiler oder einen HPF+-Compiler hat, dann
wäre HPF möglicherweise ein geeignetes Programmiermodell,
- wenn der Compiler "native" (d.h. kein Präprozessor) ist;
andernfalls wäre das Debugging des HPF-Programmes
nicht immer einfach, weil das vom Präprozessor erzeugte
Fortran90-Programm kaum noch Ähnlichkeit mit dem
ursprünglichen HPF-Programm hätte.
- und wenn es nicht auf bestmögliche Laufzeiteffizienz ankommt.
- Neue parallele Programme:
Es gelten die obigen Hinweise für "Existierende serielle Programme".
Das Problem der Laufzeiteffizienz kann man u.U. in den Griff bekommen,
indem man bewußt die "guten" Eigenschaften von HPF (speziell
Version 2.0) berücksichtigt und diejenigen Sprachmittel
vermeidet, die ineffizient sind (weil sie viel implizite
Kommunikation erzeugen). Es wird berichtet, daß "reguläre"
HPF-Programme (d.h., bei denen die erforderlichen Kommunikationsmuster
bereits vom Compiler analysiert und bereitgestellt werden können)
heute durchaus mit explizitem Message Passing konkurrieren können.
HPF gaukelt dem Fortran-Programmierer auch in verteilter Umgebung
einen globalen Adreßraum (Indexraum für Felder) vor wie
bei einem seriellen Fortran-Programm.
Die Verteilung der Daten auf die verteilten Speicher der einzelnen
Prozessoren eines Parallelrechners wird
mit Hilfe von Direktiven gesteuert. Der HPF-Compiler erzeugt automatisch
die erforderlichen Aufrufe der Kommunikationsroutinen für den Zugriff
auf die verteilten Daten. Die Effizienz des HPF-Programms hängt
dann hauptsächlich davon ab, wie geschickt der Programmierer die Daten
mit Hilfe der Direktiven auf die Prozessoren verteilen kann, so daß
beim Zugriff möglichst wenig (impliziter) Kommunikations-Overhead erforderlich
ist; das ist das Problem der Lokalität der Zugriffe.
Wenn die einzelnen Knoten eines Parallelrechners selbst eine aufwendige
Speicherstruktur/Speicherhierarchie z.B. mit lokalen Cache-Speichern
haben, dann müßte für den effizienten Zugriff auf einzelne
Daten nicht nur die Lokalität der Zugriffe auf die Daten im obigen
Sinne, sondern auch die Cache-Lokalität berücksichtigt werden.
Je nach Parallelrechner
(z.B. wenn die Knoten selbst SMP-Rechner sind)
kann eine ganze Cache-Hierarchie zum Einsatz
kommen, so daß es eigentlich wichtiger wäre, auf die
Cache-Lokalität Einfluß nehmen zu können als darauf,
daß die Daten beim Zugriff im lokalen Speicher
liegen. Zur Zeit bieten weder HPF noch die verfügbaren
HPF-Compiler Lösungen an.
Leistungsbewertung
Hinweise zum Leistungsvergleich MPI <=> HPF finden Sie
hier.
Sonstige Informationsquellen

20. Jan 2003
Wilhelm
Gehrke
gehrke@rrzn.uni-hannover.de