|
Fortran
Compilervergleich
Stand: 9.12.2019
Die Vorgeschichte
In den 1990er Jahren hatten wir Fortran
Compiler bereits ausführlich verglichen und dies in unseren jährlich
erschienenen Katalogen veröffentlicht. Mit der großen Verbreitung
und Verfügbarkeit des Internet wurde dies überflüssig,
da Dr. John Appleyard von Polyhedron Software Ltd., England, diese Vergleiche
ebenfalls anstellte und auf der Website seiner Firma publizierte. Dr.
Appleyard gründete nach Auflösung von Polyhedron Software Ltd.
seine eigene Firma Polyhedron Solutions Ltd. und führte dort die
Vergleiche bis 2017 weiter (https://www.fortran.uk/fortran-compiler-comparisons/).
Mitte des Jahres (2019) fragte er, ob wir die Vergleiche übernehmen
wollen, und so kam es, daß nun wir, d.h. die QT software GmbH und
die Polyhedron
Software & Services Ltd., England (Nachfolger von Polyhedron Software
Ltd.), die Fortran Compilervergleiche durchführen (und die Kosten
teilen).
Hinweise vorab
Im Vordergrund des Vergleichs der Fortran Compilersysteme
steht der Vergleich der Laufzeiten von meist rechenintensiven Fortran
Programmen, die mit den verschiedenen Fortran Compilern erstellt wurden
- die sog. Runtime-Benchmarks.
Wie in unserem Ratgeber
"Fortran Compilersysteme" dargelegt, sei betont darauf
hingewiesen, daß die Laufzeit-Performance nicht das einzige Kriterium
für die Auswahl eines Fortran-Compilers ist. Was nützt einem
die beste Performance, wenn die Bedienung des Compilers schwierig ist,
die Rechenergebnisse mglw. nicht korrekt bzw. ausreichend präzise
sind, die Compilier- und Linkzeiten lang sind, so daß man sich in
seiner Arbeit behindert fühlt, die Fehlerdiagnostik schwach und dergleichen
mehr.
Die Compilervergleiche von Dr. Appleyard sind
wesentlich ausführlicher als die hier vorgestellten. Insbesondere
auf die Diagnostic
Capabilities und den jeweiligen Fortran
Sprachumfang (Fortran 95, 2003, 2008 etc.) sei hingewiesen. Bzgl.
letzterem sind auch die Tabellen
von Ian Chivers & Jane Sleightholme aufschlußreich.
Wünschenswert (und eigentlich notwendig) wäre noch die Begutachtung
der Rechenergebnisse bzw. der numerischen Genauigkeit der Fortran Compilersysteme.
Insbesondere die Meldungen einiger Compiler aufgrund numerischer Probleme
- siehe bspw. die Ergebnisse zu "capaci(ta)" und "channe(l2)"
- schüren Zweifel an der Korrektheit der Testprogramme. Vielleicht
finden wir eines Tages neben dem regulären Tagesgeschäft auch
die Zeit zur gründlicheren Analyse. Wir bitten um Verständnis.
Testequipment und -bedingungen
Als Testumgebung wird ein handelsüblicher
PC verwandt, der mit einer Intel® Core i7-9700F CPU @ 3.00GHz
(8 Cores) und 16 GB RAM ausgestattet ist. Auf diesem sind sowohl Microsoft
Windows 10 und Linux Mint 19.2 installiert.
Die getesteten Fortran Programme sind im Quellcode auf der Website der
Fa. Polyhedron Solutions Ltd. (s.o.) zu finden.
Nachfolgend unsere Ergebnisse der Runtime-Benchmarks. Verwendet wurden
die 64-Bit Compilervarianten, mit Ausnahme des Lahey Fortran LF (früher
LF95), der nur als 32-Bit Compiler existiert und aufgrund seiner weiten
Verbreitung hier ebenfalls aufgeführt wird.
Compiliert wurde mit folgenden Compiler- und Linkeroptionen (fast alle
Compilersysteme fungieren als "Driver", starten also zuerst
den Compiler und rufen dann den Linker auf).
Anmerkungen
Durchweg wurden die Optimierer der Compilersysteme in der laut Dokumentation
"höchsten Optimierungsstufe" zugeschaltet, sowie - sofern
unterstützt - prozessorspezifische Optionen gesetzt, so daß
der Binärcode für die vorhandene CPU optimiert wurde. Desweiteren,
wenn nicht durch die Optimierungsstufe vorgegeben, wurde Loop-Unrolling
verwendet.
AP steht für AutoParallel, d.h. das Compilersystem versucht zusätzlich
den Code zu parallelisieren.
Die Benchmark-Programme wurden mehrfach, mindestens
10 mal hintereinander gestartet, und die jeweilige Laufzeit wurde gemessen.
Wenn sich die Laufzeitmessungen stabilisierten (d.h. sich weniger als
1% Abweichung von der vorherigen Messung ergab), wurden der Benchmark
für das betroffene Progamm abgeschlossen.
Laufzeiten in Sekunden.
Grün unterlegte Zellen: die Laufzeit liegt im Bereich von 10% der
kürzesten Laufzeit.
Rot unterlegte Zellen: die Laufzeit beträgt mehr als 150% der kürzesten
Laufzeit.
Die Namen der Benchmarkprogramme sind auf 6 Zeichen gekürzt.
Fortran Compilersystem |
Compiler- und Linkeroptionen,
Windows |
Absoft ProFortran
19.0 |
-m64 -O4 -speed_math=11
-march=wolfdale -xINTEGER -stack:0x80000000 |
Absoft ProFortran 19.0 (AP) |
-m64 -O5 -apo -speed_math=11
-march=wolfdale -xINTEGER -stack:0x80000000 |
Silverfrost FTN95 8.51 |
/64 /optimise, /stack:0x10000000 |
gfortran 8.1 |
-O3 -funroll-loops -ffast-math
-o |
Lahey GNU 6.4 |
-O3 -funroll-loops -ffast-math
-o |
Lahey LF (LF95), 32-Bit |
-inline (35) -o1 -sse2 -nstchk
-tp4 -ntrace -unroll (6) -zfm |
Intel Visual Fortran, 2019
Update 5 |
/fast /link /stack:64000000 |
Intel Visual Fortran, 2019
Update 5 (AP) |
/fast /Qparallel /link /stack:64000000 |
NAG Fortran 6.2 |
-abi=64 -O4 -Ounroll=4 -s -v
-V |
PGI Fortran 19.4 |
-V -fastsse -Munroll=n:4 -Mipa=fast,inline |
PGI Fortran 19.4 (AP) |
-V -fastsse -Munroll=n:4 -Mipa=fast,inline
-Mconcur=innermost,allcores |
Windows - Runtime Benchmarks 64-Bit Fortran
|
|
Absoft
19.0 |
Absoft
(AP)
19.0 |
FTN95
8.51 |
gfortran
8.1 |
Lahey
GNU
6.4 |
Lahey
LF
(32-Bit)
7.80 |
Intel
2019.5 |
Intel
(AP)
2019.5 |
NAG
6.2 |
PGI
19.4 |
PGI
(AP)
19.4 |
ac |
4.02 |
4.05 |
8.32 |
4.85 |
4.84 |
7.45 |
3.41 |
3.42 |
5.45 |
6.49 |
6.47 |
aermod |
7.40 |
7.52 |
14.99 |
11.84 |
11.32 |
10.51 |
5.83 |
6.17 |
11.83 |
7.06 |
7.41 |
air |
1.77 |
0.87 |
6.48 |
1.95 |
2.14 |
2.74 |
1.30 |
0.73 |
2.34 |
1.53 |
4.34 |
capaci |
11.72 |
11.63 |
27.17 |
12.72 |
11.96 |
18.29 |
9.87 |
10.10 |
13.06 |
9.64(4 |
14.94(4,5 |
channe |
53.25 |
46.49 |
165.90 |
50.16(1 |
50.01 |
77.42 |
44.75 |
48.24 |
69.58(3 |
50.57(4,5 |
51.86(4,5 |
doduc |
10.71 |
10.77 |
18.37 |
11.01(2 |
11.08 |
11.76 |
5.49 |
5.47 |
10.64 |
9.24(5 |
11.06(5 |
fatigu |
37.56 |
40.08 |
188.39 |
55.81 |
57.13 |
114.56 |
31.27 |
31.26 |
87.56 |
94.32 |
121.13 |
gas_dy |
29.57 |
28.86 |
62.65 |
62.52 |
60.70 |
56.71 |
22.55 |
23.41 |
41.40 |
42.35 |
65.78 |
induct |
25.38 |
15.62 |
141.73 |
21.89 |
22.45 |
225.75 |
18.96 |
19.62 |
29.87 |
37.26 |
37.17 |
linpk |
3.45 |
3.50 |
4.05 |
3.46 |
2.93 |
3.47 |
2.56 |
2.57 |
3.76 |
3.56 |
4.42 |
mdbx |
5.40 |
4.56 |
9.47 |
4.34 |
4.42 |
6.50 |
3.43 |
2.13 |
5.00 |
4.84 |
21.25 |
mp_pro |
176.00 |
55.53 |
499.20 |
150.05 |
150.84 |
67.26 |
31.48 |
5.75 |
90.96 |
33.44 |
33.51 |
nf |
5.37 |
5.39 |
10.02 |
6.79 |
6.52 |
6.81 |
3.62 |
3.58 |
6.27 |
6.54 |
14.98 |
protei |
13.19 |
13.05 |
26.93 |
12.61 |
12.89 |
24.78 |
13.41 |
13.69 |
14.62 |
14.63 |
14.44 |
rnflow |
9.15 |
9.09 |
18.67 |
15.06 |
10.24 |
13.12 |
6.80 |
4.67 |
13.19 |
10.11 |
9.83 |
test_f |
36.54 |
33.79 |
95.04 |
42.43 |
33.56 |
61.30 |
18.66 |
17.24 |
56.09 |
23.13 |
72.30 |
tfft2 |
25.76 |
24.51 |
50.32 |
22.29 |
20.35 |
28.25 |
23.33 |
24.02 |
26.34 |
23.92 |
24.17 |
|
Geometric
Mean |
13.65 |
11.63 |
32.55 |
15.46 |
14.69 |
21.02 |
9.37 |
7.88 |
16.47 |
13.40 |
19.13 |
Während mancher Programmläufe
wurden Exceptions (bspw. Wertüberläufe, Wertunterschreitungen,
etc.) gemeldet, die auf Rechenprobleme hinweisen.
Das Programm meldet während oder am Ende des Programmlaufs:
1) "The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG".
2) "The following floating-point exceptions are signalling: IEEE_INVALID_FLAG".
3) "Warning: Floating underflow occurred".
4) "Warning: ieee_underflow is signaling. FORTRAN STOP".
5) "Warning: ieee_inexact is signaling. FORTRAN STOP".
Fortran Compilersystem |
Compiler- und Linkeroptionen,
Linux |
Absoft ProFortran 19.0 |
-m64 -Ofast -h4 -speed_math=10
-march=wolfdale -xINTEGER -fPIC -o |
Absoft ProFortran 19.0 (AP) |
-m64 -apo -O5 -h4 -speed_math=10
-march=wolfdale -xINTEGER -no-pie -o |
gfortran 7.4 |
-march='native' -funroll-loops
-O3 -o |
Intel Visual Fortran, 2019
Update 5 |
-Ofast -fast -ipo -o |
Intel Visual Fortran, 2019
Update 5 (AP) |
-Ofast -fast -ipo -parallel
-o |
NAG Fortran 6.2 |
-o -abi=64t -O4 -Ounroll=4
-s -v -V |
PGI Fortran 19.4 |
-V -O4 -fastsse -Munroll=n:4
-m64 -o |
PGI Fortran 19.4 (AP) |
-V -O4 -fastsse -Munroll=n:4
-m64 -Mconcur=allcores -ta=multicore -o |
Linux - Runtime Benchmarks
64-Bit Fortran
|
|
Absoft
19.0 |
Absoft(AP)
19.0 |
gfortran
7.40 |
Intel
2019.5 |
Intel(AP)
2019.5 |
NAG
6.2 |
PGI
19.4 |
PGI(AP)
19.4 |
ac |
3.80 |
3.76 |
13.99 |
3.32 |
3.47 |
14.05 |
5.50 |
5.56 |
aermod |
6.05 |
6.21 |
5.12 |
5.61 |
6.01 |
7.85(3 |
---(6 |
---(6 |
air |
1.73 |
0.75 |
2.45 |
1.71 |
1.11 |
1.86 |
1.14 |
1.35 |
capaci |
10.75 |
10.92 |
11.72(7 |
9.67 |
10.92 |
11.94(3 |
9.55(4,5 |
9.86(4,5 |
channe |
53.13 |
46.27 |
49.32(7 |
45.79 |
48.06 |
69.21 |
50.70(4,5 |
50.05(4,5 |
doduc |
8.98 |
8.99 |
7.87 |
5.45 |
5.38 |
10.03 |
7.77(4,5 |
9.33(4,5 |
fatigu |
37.81 |
38.57 |
44.16 |
31.70 |
31.63 |
87.94 |
63.94 |
64.77 |
gas_dy |
32.30 |
29.44 |
48.59 |
45.27 |
44.82 |
54.97 |
31.54 |
32.80 |
induct |
19.93 |
12.67 |
24.13 |
18.87 |
19.76 |
63.66 |
30.59 |
30.58 |
linpk |
3.56 |
3.58 |
2.82 |
2.40 |
2.47 |
2.90 |
2.50 |
4.35 |
mdbx |
5.40 |
4.61 |
4.51 |
3.51 |
2.22 |
5.14 |
3.92 |
4.24 |
mp_pro |
81.44 |
27.76 |
160.46 |
32.57 |
6.08 |
158.88 |
32.43 |
32.44 |
nf |
5.57 |
5.50 |
4.13 |
3.57 |
3.67(8 |
5.70 |
4.74 |
4.80 |
protei |
14.18 |
13.79 |
13.76 |
14.30 |
14.35 |
13.22 |
13.63 |
14.51 |
rnflow |
9.27 |
9.19 |
18.35 |
7.09 |
5.02 |
18.82 |
16.37 |
11.57 |
test_f |
36.02 |
27.20 |
47.16 |
12.37(8 |
17.10(8 |
49.86 |
23.07 |
22.48 |
tfft2 |
31.73 |
25.65 |
23.26 |
26.04 |
25.94 |
30.25 |
29.80 |
24.56 |
|
Geometric
Mean |
12.78 |
10.57 |
14.98 |
9.76 |
8.56 |
18.20 |
12.15 |
12.60 |
6) "AERMOD Finishes UN-successfully"
7) "The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG
IEEE_DENORMAL"
8) "forrtl: severe (174): SIGSEGV, segmentation fault occurred"
Hinweise
zu Haftung & Urheberrecht bzgl. der Information auf dieser WebSeite.
Copyright QT software GmbH 2019/2020. Alle Rechte vorbehalten.
Intel and the Intel logo are trademarks of Intel Corporation in the U.S.
and/or other countries.
PGI is a product of the NVIDIA Corporation.
| |
|
|