This article is the third in a series of articles comparing the speed of Fortran 90 codes compiled with various commercially available F90 compilers. The previous two benchmark reports gave results for F90 compilers from the Numerical Algorithms Group (NAG), Pacific-Sierra Research Corporation (PSR), and ParaSoft (PS) on a Sun SPARC workstation. In this report, we again benchmark those compilers as well as the Edinburgh Portable Compilers (EPC) F90 compiler for the Sun SPARC and the Cray Research, Inc. (CRI) F90 compiler on two types of Cray YMP computers.
[Editor's note: after this article was written, Dan Fuka of Quetzal ran these codes on a PC using several compilers. The results are here.]
The SPARC benchmark runs were performed on a Sun SPARC 10 with 64 Mbytes of memory. The operating system was Solaris version 1.1 (also known as SunOS 4.1.3). The compilers used were Sun Fortran 77 version 2.0.1, Sun C version 1.1, NAG F90 version 2.0a(264), ParaSoft F90 version 2.05, Pacific-Sierra Research VAST/f90 version 1.06G6, and Edinburgh Portable Compilers F90 version 1.0.8. The C generated by the NAG F90 compiler was compiled using the -O optimization flag. The F77 generated by the PS and PSR F90 compilers was compiled using the -fast optimization flag. In addition, the PSR compilations were performed using the -WvO -Wv,-y3 VAST/f90 optimization flags. The EPC compilations used the -fast -cg92 optimization flags. The F77 versions of the codes were compiled using the -fast option. Each code was executed three times in a row on an otherwise idle system with no logged in users. The execution time for each code was determined using the UNIX time utility. CPU and system time were recorded. Table 1 shows the average CPU time for each benchmark code on the SPARC.
The CRAY benchmark runs were performed on two systems, a Cray YMP-EL 1/32 running UNICOS version 8.0.2.2 and a Cray YMP 2/64 running UNICOS version 7.0.6.1. On the Cray YMP-EL, the F77 compiler was version 6.0.1.0 and the F90 compiler was version 1.0.0.0. On the Cray YMP 2/64, the F77 compiler was version 6.0.2.0 and the F90 compiler was version 1.0.1.3. Default level 2 optimization was used for all calculations and the -dp compiler option was used to ensure that all calculations were done using 64 bit words. As with the SPARC tests, each code was executed three times in a row and the execution time was determined using the time utility. CPU and system time were recorded. [The results are not shown here.]
TABLE 1. Average CPU (user) time in seconds required for the benchmark codes on the SPARC 10. Each code was run three times in a row on an otherwise idle system with no logged in users. N/A in the Sun F77 column means that no equivalent F77 code existed for that benchmark. N/C in a F90 column means that the compiler was unable to compile the benchmark code while N/R means that the benchmark code aborted during execution. Note that on the scattering benchmark, the timing reported for the PSR VAST/f90 is without any VAST/f90 optimizations, whereas the other PSR VAST/f90 timings are with those optimizations.
Benchmark Sun F77 PS F90 NAG F90 PSRVAST90 EPC F90
kepler 41.5 53.7 75.0 50.9 42.9 integral N/A N/R 207.4 158.0 1.8 gas dynamics 66.6 66.5 100.4 61.6 60.6 overlap 16.9 26.6 21.1 16.4 20.5 static N/A 2.0 6.3 1.8 2.5 dynamic N/A 12.0 25.1 5.4 8.8 lu N/A 2111.2 1500.1 543.7 904.1 gen romans N/A N/C 31.0 26.7 20.1 big integers N/A N/C 11.2 6.6 7.8 scattering 803.5 837.2 970.8 808.8 580.5 rnflow N/A 596.5 716.0 522.0 581.8 channel 1523.2 3152.6 1630.4 1031.4 1438.2 where N/A 466.4 511.5 426.0 613.4 no where N/A 436.1 462.1 430.9 582.7 reshape N/A 0.9 1.1 0.6 1.0 Monte Carlo 23.9 181.3 133.7 79.6 125.1
The source for some of the benchmark codes may be found here.