Investigations indicate that McStas-generated code is very sensitive to bugs
in the optimizers of commonly used compilers! This note documents preliminary
results on comparing a McStas simulation when compiled with different
compilers and optimizations.
Compilers were:
gcc-i386 - GCC 2.7.2.3 for i386-linux
egcs - EGCS 2.90.29 for i386-linux
pgcc - PGCC 2.90.29 for i386-linux
cc - HP92453-01 A.10.32.03 HP ANSI C Compiler HPPA/HPUX B.10.20
gcc-hp - GCC 2.7.2 for HPPA/HPUX B.10.20
The i386-linux compiled simulations were run on a 300MHz Pentium II. The HPPA
compiled simulations were run on the fys-hp-2 workstation.
The results:
Compiler
flags
I [p/N]
MON [p/N]
neutrons/sec
gcc-i386
none
3.1e-07/393
17823.7/72244
23k
gcc-i386
-O6
3.3e-07/428
17868.9/72309
25k
egcs
-O6
3.6e-07/420
17938.8/72394
30k
pgcc
none
2.8e-07/387
17945.1/72334
21k
pgcc
-O6
4.8e-07/718
8420.16/34245
36k
cc
-Aa
2.9e-07/379
17937.6/72292
17k
cc
-Aa +Oall -Wl,-a,archive
1.7e-07/203
17949.7/72351
40k
gcc-hp
none
3.0e-07/373
17877.8/71976
19k
gcc-hp
-O6
3.2e-07/368
17726.2/71825
22k
As can be seen from the table, PGCC and HP CC with full optimization gives
very large speedups on the simulations, but unfortunately also produce
incorrect results!
Update
A new release of PGCC (1.1a) seems to correct the bugs and produce correct
code. Using the '-mstack-align-double' switch in addition to -O6 it also
achieves slightly better performance, about 31k neutrons/sec.
Kristian Nielsen
<kristian.nielsen@risoe.dk> /
Sep 3, 1998.