Unter Sun ONE Studio 7 (Sun Forte Developer 7) steht eine neue Version des Fortran-Compilers (f95) zur Verfügung. Es handelt sich um einen "echten" optimierenden Fortran95-Compiler.
Die Voreinstellung ist -xarch=v8. Wenn Sie Code für die 64-Bit-Umgebung erzeugen lassen wollen, dann müssen Sie explizit -xarch=v9 angeben. Für detaillierte Hinweise zur 64-Bit-Verarbeitung lesen Sie bitte weiter in www.unics.uni-hannover.de/rrzn/gehrke/SunFD7/64-neu.html.
| -cg89 | spezifiziert die generische SPARC-Architektur und ist daher für alle am RRZN im Einsatz befindlichen Sun-Workstations nicht optimal. Die Option ist überholt und sollte nicht mehr verwendet werden. |
| -cg92 | selektiert die SPARC-V8-Architektur und
ist die Kurzform (Makrooption) für -xarch=v8 -xchip=super -xcache=16/32/4:1024/32/1 Die Option ist überholt und sollte nicht mehr verwendet werden; sie ist äquivalent zu -xtarget=ss1000. |
| -fast | (hat eine neue/erweiterte Bedeutung und) ist die Kurzform
(Makrooption) für -dalign -depend -fns -fsimple=2 -ftrap=common -libmil -xtarget=native -O5 -xlibmopt -pad=local -xvector=yes -xprefetch=yes -xprefetch_level=2 |
| Achtung: Die implizite Option -xtarget=native bewirkt, daß 32-Bit-Code erzeugt wird, der für 32-Bit- und 64-Bit-Umgebungen geeignet ist. Wenn mit -fast übersetzt worden ist, muß auch mit -fast gelinkt werden (s.u. Abschnitt "Konsistentes Linking"). Diese Option ist ungeeignet, wenn das Programm von Standard-IEEE-Ausnahmebehandlung abhängig ist. Sie ist gut als Anfangsoption für die Laufzeitoptimierung geeignet; i. allgem. ist jedoch weiteres Tuning erforderlich. | |
| -xarch | selektiert die Rechnerarchitektur, d.h. den Instruktionssatz für die Codeerzeugung. Die Option wird auch von diversen Makro-Optionen gesetzt, z.B. von der Makro-Option -xtarget. Die Voreinstellung ist immer -xarch=v8. Das bedeutet, daß 32-Bit-Code erzeugt wird. Wenn 64-Bit-Code erzeugt werden soll, d.h. wenn die 64-Bit-Architektur verwendet werden soll, dann muß explizit -xarch=v9 gesetzt werden. |
| RRZN-Host | CPUs | optimale Compiler-Option(en) | gleichbedeutend mit |
|---|---|---|---|
| SunAS | 2 | -xtarget=ultra2
-xchache=16/32/1:4096/64/1 |
-xarch=v8 -xchip=ultra2 -xcache=16/32/1:4096/64/1 |
| Sun218d XServ | 1 | -xtarget=ultra | -xarch=v8 -xchip=ultra -xcache=16/32/1:512/64/1 |
| UniCS | 4 | -xtarget=ultra | -xarch=v8 -xchip=ultra -xcache=16/32/4:512/64/1 |
| e10k e10kcs e10kio e10kpp |
8 8 8 32 | -xtarget=ultra2
-xcache=16/32/1:8192/64/1 | -xarch=v8 -xchip=ultra2 -xcache=16/32/1:8192/64/1 |
| sonstige | mittels folgender Kommandos erfragen: fpversion uname -a sysinfo |
||
64-Bit-Codes: Um optimalen Code für 64-Bit-Umgebungen zu erzeugen, geben Sie hinter der Option -fast zusätzlich die Option -xtarget=native64 an. Für detaillierte Hinweise zur 64-Bit-Verarbeitung lesen Sie bitte weiter in www.unics.uni-hannover.de/rrzn/gehrke/SunWS6/64-neu.html.
Wenn man einen Teil eines Programmes mit einer der folgenden Optionen übersetzt, dann sind auch für das Linking die gleichen Optionen erforderlich:
-a, -autopar, -B..., -fast, -G, -L..., -l..., -mt, -xmemalign, -nolib, -norunpath, -p, -pg, -xlibmopt, -xclic_lib=..., -xprofile=...
Für die folgenden Optionen gilt, daß grundsätzlich alle zugehörigen Quellprogramme mit der betreffenden Option übersetzt und geladen werden müssen:
-autopar, -aligncommon, -dx, -dalign, -dbl, -explicitpar, -f, -misalign, -native, -parallel, -r8, -xarch=..., -xcache=..., -xchip=..., -xF, -xtarget=..., -xtypemap, -ztext
Wenn beim Laden z.B. im f95-Kommando keine Quelltextdateien, sondern nur Objektdateien genannt werden, dann verwendet das System intern nicht den Lader ld, sondern den inkrementellen Lader ild. Das kann in bestimmten Fällen zu Problemen führen. Abhilfe ist leicht möglich durch expliziten Verzicht auf den ild, indem man im f95-Kommando die Option -xildoff angibt.
Library | Name | Options Needed |
f77 functions, nonmath | libF77 | None |
f77 functions, nonmath, multithread safe | libF77_mt | -parallel |
f95 support intrinsics | libfsu | None |
f95 interface | libfui | None |
f95 array intrinsics libraries | libf*ai | None |
f95/f77 I/O compatibility library | libf77compat | -lf77compat |
Library of Sun math functions | libsunmath | None |
POSIX bindings | libFposix | -lFposix |
POSIX bindings for extra runtime checking | libFposix_c | -lFposix_c |
Routinen der Performance Library werden automatisch geladen zur Durchführung bestimmter Feldoperationen. Sie können die Bibliothek aber auch explizit verwenden.
Zur Verwendung mit dem f95-Compiler ist jetzt eine neue Version der Performance Library verfügbar.
Achtung:
Bei Verwendung der NAG Fortran 77 Library reicht die Angabe der Bibliothek, beispielsweise für libnag.a die Option -lnag, allein nicht aus, sondern es müssen weitere zwei Optionen und eine weitere Bibliothek angegeben werden:
f95 -dalign -xarch=generic64 xyz.f90 -lnag -lF77
Die lokal im RRZN zugreifbare Online-Dokumentation können Sie zur Zeit nur lesen, wenn Sie sich zuvor auf einen unserer Sun-Rechner aufschalten, dort mit "netscape &" den Netscape-Browser starten und dann hier klicken.
Sie können aber auch direkt bei NAG lesen.
Die Namensräume der NAG (Fortran 77) Library und der SunSoft Performance Library sind nicht disjunkt. D.h., diverse Routinen treten jeweils in unterschiedlicher Implementierung (aber mit gleicher Funktionalität) in beiden Programmbibliotheken auf. Wegen der besseren Laufzeiteffizienz der Performance Library gegenüber der NAG Library sollten Sie dafür sorgen, daß beim Linken/Laden zusätzlich zur NAG Library auch die Performance Library durchsucht wird und zwar so, daß die Performance Library immer zuerst zum Zuge kommt. Also beispielsweise so:
f95 -dalign -xarch=generic64 xyz.f90 -Bstatic -xlic_lib=sunperf -Bdynamic -lnag -lF77
Oder nehmen Sie gleich die für dir Zusammenarbeit mit der Sun Performance Library erzeugt NAG Fortran 77 Library:
f95 -dalign -xarch=generic64 xyz.f90 -Bstatic -xlic_lib=sunperf -Bdynamic -lnag-spl -lF77In den obigen beiden Beispielen haben wir die Performance Library statisch geladen. Das ist natürlich nur dann erforderlich, wenn es beim dynamischen Laden Probleme gibt. Weitere Hinweise zum Gebrauch der Performance Library finden Sie hier.
| Name/Aufruf | Beschreibung |
|---|---|
| analyzer | graphical performance analysis tool |
| asa | converts Fortran carriage-control output in printable form |
| dbx | source-level debugger |
| error | insert compiler error messages at right source lines |
| fsplit | split multi-routine Fortran file in individual files |
| fpp | Fortran language preprocessor |
| gprof | display call-graph profile data |
| prism (nur E10000) | a programming environment (also for MPI programs) |
| tcov | construct test coverage analysis and statement-by-statement profile |
| teamware | GUI tool for CodeManager commands |
| workshop | an integrated programming environment (not for MPI programs) |
Einige der obigen Tools können nur aus der Programmierumgebung workshop heraus aufgerufen und ausgeführt werden, andere können auch außerhalb oder nur außerhalb als singuläres Werkzeug verwendet werden. Achtung: In diversen man pages muß es statt f90 eigentlich f95 heißen.
Eventuell müssen Sie bei Verwendung von Tools mit graphischer Benutzerschnittstelle den verwendeten Host-Rechner als xhost anmelden.
Abhilfe(n):
Leider geht es nicht ohne (kleine) Quelltextänderungen:
2. Möglichkeit:
Falls Sie nicht jede betroffene Ausgabeanweisung ändern
wollen, können Sie durch folgende Einfügung
dafür sorgen, daß Ihr Programm nach dem
Harware-Interrupt die Kontrolle zurückbekommt.
Danach können Sie es programmiert beenden, wobei die Puffer
wie üblich geleert werden. Beispiel für reelle
Division durch Null:
PROGRAM test
...
CALL aaa ! hier wird die Ueberwachung eingeschaltet
...
END PROGRAM test
...
SUBROUTINE aaa
EXTERNAL myhandler
iii = ieee_handler('set', 'division', myhandler)
END SUBROUTINE aaa
INTEGER FUNCTION myhandler(a,b,c)
INTEGER a,b,c(5)
STOP ' Programmende nach Ausnahmebehandlung')
myhandler = 0
END FUNCTION myhandler
Im Hauptprogramm wird gleich im Anschluß an den
Spezifikationsteil die Subroutine (hier) aaa aufgerufen.
(Sie können die beiden Anweisungen aus dem Rumpf der Subroutine
natürlich auch direkt in das Hauptprogramm einfügen.)
Mit dem Aufruf der vordefinierten Funktion ieee_handler wird die Ausnahmebehandlung eingeschaltet. Der zweite Parameter gibt an, was überwacht werden soll. Der dritte Parameter spezifiziert eine Funktion, die im Ausnahmefall die Kontrolle übernimmt.
Die Überwachung kann programmiert ein- und ausgeschaltet werden. Und man kann auch mehrere Ausnahmesituationen zugleich überwachen lassen. Hinweise dazu finden Sie in den Manual Pages zu f95 bei der Option -ftrap und im "Fortran Programming Guide" im Kapitel 6 "Floating Point Arithmetic".
Man beachte, daß die beiden graphischen Programmierumgebungen letztlich lediglich einen anderen Rahmen für den Einsatz des kommandoorientierten dbx darstellen.
Die anderen Sun-Workstations und die anderen Partitionen der E10000 arbeiten als Mehrbenutzer-Durchsatzrechner. D.h., die Parallelverarbeitung macht dort keinen rechten Sinn.
Hinweis für ehemalige VPP-Anwender: Die Sun-E10000 kann für bestimmte vektorisierbare Anwendungen als Nachfolgerechner der VPP eingesetzt werden. Solch ein SMP-Rechner ist im Hinblick auf eine Reihe von Architekturmerkmalen (aus der Sicht des Programmierers) vielleicht der nächste Verwandte des Vektorrechners; beispielsweise:
Insgesamt ist die Klasse der Anwendungen, die von der parallelen Hardware der E10000 profitieren können, vermutlich größer als die Klasse der für die VPP vektorisierbaren Programme.
Es gibt eine sehr leistungsfähige MPI-Umgebung. Sie heißt Sun HPC Clustertools. Hauptmerkmale sind folgende:
Compilieren und Linken unter Verwendung des Wrappers mpf90
(s. man mpf90):
mpf90 *.f90
Wenn Sie mal versuchsweise "mpf90 -dryrun -V aaaaa.f90" eingeben, werden Sie sehen, daß tatsächlich der Fortran95-Compiler verwendet wird, und Sie sehen, was sonst noch so für Ihren MPI-Job eingerichtet wird.
Programmausführung mit dem mprun-Kommando
(s. man mprun).
Hinweise finden Sie in "news HPC" auf der E10000.
Um ein seriell formuliertes Programm ohne Eingriffe in den Quelltext parallel zu verarbeiten, können Sie es automatisch parallelisieren:
Umgebungsvariable PARALLEL setzen; z.B.
export PARALLEL=16
Compilieren, Parallelisieren und Linken unter Verwendung der
Option -parallel; also beispielsweise
f95 -fast -parallel -mp=%none *.f90
Der vom Compiler erzeugte parallele Code kann ggf. durch in den Quelltext eingestreute Direktiven (z.B. OpenMP) verbessert werden.
Umgebungsvariable PARALLEL setzen; z.B.
export PARALLEL=16
Compilieren und Linken unter Verwendung der Option
-openmp: also beispielsweise
f95 -fast -openmp *.f90
oder
(wenn man die automatische Parallelisierung durch in
in Quelltext eingestreute Direktiven unterstützen will)
f95 -fast -parallel -mp=openmp *.f90
Exekutieren wie ein serielles Programm z.B. durch Angabe von a.out
Die sonstige lokal im RRZN zugreifbare Online-Dokumentation besteht aus HTML-Dokumenten und einigen PDF-Dokumenten. Falls Sie nicht nur einzelne Seiten, sondern komplette Dokumente drucken wollen, sollten Sie die Dokumente in PDF-Form dazu verwenden.
Diese Dokumentation ist z.Zt. nur nach Aufschalten auf einen der Sun-Rechner am RRZN zugreifbar. Dort müssen Sie mittels "netscape &" den Browser starten. Dann finden Sie die in der folgenden Liste angegebene Dokumentation unter file:/opt/SUNWspro/docs/index.html.
Falls Sie die obige Dokumentation nicht lokal lesen wollen/können oder wenn Sie zusätzliche Dokumentation benötigen, suchen Sie bitte unter docs.sun.com weiter und klicken dort z.B. die Forte Developer 7 Collection an.
Wenn Sie modernes Fortran (d.h. Fortran 90 ohne FORTRAN 77) lernen wollen oder wenn Sie neue Fortran-Programme methodisch programmieren wollen, dann sollten Sie das Handbuch Die Programmiersprache F verwenden.

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