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