Unix Cluster Hinweise - Universitätsrechenzentrum Heidelberg
Aufruf der Fortran Compiler und Bibliotheken
Inhalt:
A. Fortran Compiler
A.1. Fortran90 (IBM)
B. Unterprogrammbibliotheken
B.1. ESSL
B.2. IMSL
C. Weitere Dokumentation
C.2. f90 Compiler User's Note (NAG Originaldokument)
A. Fortran Compiler
A.1. Fortran90 (IBM)
Die lfd. Version des Compilers ist Version 4 Release 1.
xlf90 - Fortran90 Compiler von IBM Version 4.1 (Help mit: xlf90)
xlf - FORTRAN77 Version des obigen Compilers (nicht empfehlenswert)
f77 - Alias zu xlf
Bitte beachten Sie, dass xlf und f77 im I/O Format und einigen anderen
Punkten zu der bisherigen Compiler Version 2 kompatibel ist und nicht
100% dem Standard Fortran90 entspricht. Verwenden Sie daher
zum Neukompilieren nur xlf90.
Zum Kompilieren von Fortran Programmen im freien / festen Format:
xlf90 -[Optionen] .. file .. freies Fortran90 Format
xlf90 -qfixed [weitere Optionen] .. file .. festes (FORTRAN77) Format
wobei anstelle von file der Name der Datei einzusetzen ist, in der das
Programm steht. Endet der Name auf .f, dann erwartet der Compiler ein
Fortran Quellprogramm, mit .o eine Objektdatei, mit .s ein Assembler
Quellprogramm, mit .F ein Fortran Quellprogramm mit vorangehendem Aufruf
des C Präprozessors cpp.
Eine Liste der Optionen bekommt man durch Aufruf von 'xlf90' ohne
Parameter. Das ausführbare Programm wird standardmäßig in die Datei a.out
geschrieben.
Bitte beachten Sie die ab Version 3.2 eingeführte Optimierungsstufe O3.
Gegenüber O (=O2) hat sich beim Linpack Test eine Steigerung der MFlops
von 50 auf 80 auf der aixcomp3 ergeben, auf den aixcomp1/2 von 26 auf 42.
Achtung:
Bitte nehmen Sie ggf. die Warnung beim Optimieren mit O3 ernst, dass sich
evtl. eine Endlosschleife bilden könne; ich habe das gleich mit dem
ersten xlf90 Versuch mit einem Standard Programm geschafft!
Mit @PROCESS STRICT unmittelbar vor dem betr. Programm/Subroutine/Function
verhindern Sie die Veränderung der Programm Semantik durch O3, wobei dann
einige Optimierungstechniken abgeschaltet werden. Jedenfalls ist damit das
Zurücksetzen der Optimierung auf O2 überflüssig geworden.
Die Angabe der Architektur für die aixcomp3 ist erforderlich, um die
Geschwindigkeit um den Faktor 2 (knapp) gegenüber den anderen Maschinen
derselben Taktfrequenz heraufzusetzen. Die hiermit erstellten Object Files
sind dann aber nicht allgemein portierbar, sie laufen nur auf einer Power2
Maschine. Die Kompilation kann jedoch auf einer bel. Maschine erfolgen.
xlf90 -qarch=pwr2 [weitere optionen] .. Power2 Architektur für aixcomp3
xlf90 -qarch=pwr2 -lesslp2 [ .. ] .. dass. mit Benutzung der ESSL
Zum Entwickeln und Testen sind folgende Optionen empfehlenswert:
-C checkt (Teil-) Array Grenzen und Character Substrings
-qextchk checkt Prozeduren, Argumentlisten, COMMON Blöcke und
Modul Daten (Meldung durch den Linker)
-qflttrap legt fest, welche Art von floating point exceptions
(SIGTRAP signal) erzeugt werden
enable: erzeugt SIGTRAP signal für einen trap handler
-qsigtrap installiert einen trap handler (sonst core dump)
-qinitauto automatische Variable werden initialisiert
=FF: undefinierte reals werden zu NaNQ "not a number"
(s.a. die IBM Extension AUTOMATIC, IMPLICIT AUTOMATIC
sowie SAVE und -qsave)
-g erzeugt Output für einen symbolischen Debugger (xldb!)
Zur Optimierung sind folgende Optionen empfehlenswert:
-O3 höchste Stufe der Optimierung
-qpipa Optimierung mittels interprozeduraler Analyse
-qhot=arraypad Optimiert Schleifen / Array Language
-qarch=pwr2 falls das Programm auf pwr2 Architektur laufen soll
das ist die Maschine AIXCOMP3
-qarch=604 falls das Programm auf Power PC 604 laufen soll
das sind die Maschinen AIXTERMn, n=1..9
-qalias=noaryovrlp falls Operationen auf Arrays sich nicht überschneiden
-qassert=nodeps falls Iteration n nicht von Iteration n-1 abhängt
-qstrict falls die Semantik durch O3 fehlerhaft wird
-qnozerosize falls keine Leerstrings und Leerarrays vorkommen
-qpdf1, -qpdf2 mit O3: Optimierung in 2 Schritten durch Analyse des
1. Programmlaufs
-p der Profile Output von -p kann von -qpipa zur
Optimierung verwendet werden
-Q spezifiziert prozeduren, die inline expandiert werden
-qalign=4k für "logical volume I/O" oder "disk striping"
Neuerungen der Version 4 gegenüber Version 3:
1. Einige Optionen sind neu, andere verändert:
-qhot hat neuen Parameter [no]arraypad
(Optimierung von Schleifen /Array Language)
Empfohlen: -qhot=arraypad
-qassert ist neu (Abhängigkeit der Iteration n von Iteration n-1
sowie Zahl der erwarteten Iterationen im Loop)
-qtbtable ist neu (steuert die debug Information im Object File)
-qipa hat neue Suboptionen exits=..., inline=...
(zur Optimierung von exiting und inline procedures)
-qarch hat neue Werte 601,603,604
-qreport ist neu (steuert den Report über Optimierung von Schleifen)
Mit -qhot erzeugt -qreport ein Pseudo Assember Listing.
2. Der Compiler unterstützt die neuen dynamischen Link Libraries von AIX
Version 4.2, insbes.
neue Optionen für den Linker ld: -G, -brtl, -bstatic, -bdynamic
Shared Objects dürfen den Suffix .so tragen.
Näheres s. das ld Kommando.
3. Es gibt neue Signal Handler und neuen signal handling code (zusammen
mit der -qsigtrap Option).
Die wichtigsten Neuerungen gegenüber Version 2 (beachten Sie besonders
den Debugger xldb sowie xxlf zum komfortablen Angeben der Optionen):
1. Volle Unterstützung des Fortran90 Standards.
2. Neue Optimierungsstufe O3 (s.o).
3. Option -qipa für interprozedurale Analyse.
4. Datentypen INTEGER(8) und LOGICAL(8) (s.a. -qintsize und -qrealsize).
5. Optionen -qarch, -qtune, -qcache für POWER2 und PowerPC Systeme.
6. Option -S für echten Assembler Output.
7. xldb ist ein neuer graphischer Debugger für Fortran90.
8. xxlf ist ein graphisches System zur Erleichterung der Optionenwahl.
9. Option -xinitauto initialisiert automatische Variablen (z.B. zur
Erkennung undefinierter Werte).
10. Option -qsigtrap (oder CALL SIGNAL) ruft neuen exeption handler auf.
Sowohl traceback als auch core dump sind möglich.
11. Endet das source file auf .F, so wird automatisch der C preprocessor
(Cpp) aufgerufenn, s.a. Optionen -d, -B, -t.
12. $ und _ sind jetzt erlaubt für selbstdefinierte Operatoren.
13. Ein neues Argument (MINDIM) für MATMUL macht die Matrixmultiplikation
für große Matrizen schneller.
14. Option -qalign macht die neue AIX Technik des data striping schneller
15. Die runtime Option scratch_vars gibt scratch files Namen.
Dasselbe mit unit_vars für implizit geöffnete Files.
16. Neue Suboptionen für -qtune: 603, 604, pwr2s.
17. Option -qpdf optimiert bedingte Verzweigungen.
18. Option -qfullpath hilft beim Finden von source files beim Debuggen.
19. Option -qnullterm erleichtert die Übergabe von Strings an C Programme.
20. Option -qxlf77=softeof macht I/O kompatibel mit früheren xlf Versionen
21. Die Funktion GAMMA ist auch für negative Argumente definiert.
22. Mit dem GENERATOR Argument von RANDOM_SEED kann ein neuer
langperiodischer Zufallsgenerator ausgewählt werden.
23. Das Modul xlfutility dient mittels USE zur Überprüfung des Typs der
Argumente beim Aufruf von Service und Utility Funktionen.
B. Unterprogrammbibliotheken
Will man Unterprogramme aus anderen Bibliotheken mit einbinden, so werden
diese über die Optionen "-L< pfad >" für die Pfadangabe und "-l< name >"
für den Namen der Bibliothek angegeben. Die Option "-L" kann bei den
standardmäßig angezogenen Pfaden "/lib" und "/usr/lib" weggelassen werden.
Um z.B. Unterprogramme aus der ESSL Bibliothek einzubinden, ist folgender
Befehl sinnvoll:
xlf fort.f -L/usr/lib -lessl
(In diesem Beispiel könnte "-L/usr/lib" auch fehlen).
Zum Einbinden mehrerer Bibliotheken können die Optionen "-L" und "-l"
beliebig oft wiederholt werden.
Wegen Fragen zu den Bibliotheken wende man sich an
Siegfried Vetter, URZ Zi. 214, T. 564511; Mailadresse s.u.
Im Folgenden steht "xxx" für einen der oben beschriebenen Compiler Namen.
B.1. ESSL Bibliothek Version 2.2.1
Auf allen Maschinen außer aixcomp3 ist keine weiter Angabe erforderlich.
Auf der aixcomp3 muss zur Nutzung der power2 Architektur (s.o)
-lesslp2
angegeben werden.
Der Aufruf des Info Explorers für ESSL lautet
info -s essl
B.2. IMS Bibliothek Version 2.0
xxx -qextname ... -limslib