Jack Howarth
2008-Jun-20 13:46 UTC
[LLVMdev] llvm-gfortran polyhedron 2005 results [corrected]
The previously posted benchnarks for gcc vs llvm-gfortran had one mistake. I was actually had the gfortran for 4.3.1 installed instead of that from gcc 4.2.4. Below are the polyhedron benchmark results for all three compilers... gfortran 4.2.4 Benchmark Compile Executable Ave Run Number Estim Name (secs) (bytes) (secs) Repeats Err % --------- ------- ---------- ------- ------- ------ ac 1.16 10000 18.30 10 0.0866 aermod 60.57 10000 30.90 10 0.0385 air 3.34 10000 10.85 10 0.0971 capacita 1.49 10000 63.58 32 0.1145 channel 0.81 10000 6.29 10 0.0242 doduc 5.98 10000 47.94 10 0.0921 fatigue 3.48 10000 16.00 10 0.0841 gas_dyn 2.18 10000 22.91 33 0.0779 induct 6.93 10000 68.95 10 0.0145 linpk 0.59 10000 31.06 12 0.0591 mdbx 1.71 10000 14.94 12 0.0504 nf 0.94 10000 33.98 10 0.0897 protein 2.89 10000 51.03 10 0.0890 rnflow 3.43 10000 43.20 11 0.0924 test_fpu 2.75 10000 15.05 10 0.0736 tfft 0.46 10000 2.94 14 0.0833 Geometric Mean Execution Time = 22.58 seconds gfortran 4.3.1 Benchmark Compile Executable Ave Run Number Estim Name (secs) (bytes) (secs) Repeats Err % --------- ------- ---------- ------- ------- ------ ac 3.96 10000 15.74 12 0.0413 aermod 56.13 10000 34.64 12 0.0530 air 3.15 10000 10.57 12 0.0700 capacita 1.67 10000 58.43 23 0.0980 channel 0.82 10000 3.77 10 0.0763 doduc 6.41 10000 48.20 10 0.0705 fatigue 2.55 10000 13.40 10 0.0590 gas_dyn 2.67 10000 11.09 25 0.0926 induct 5.10 10000 90.26 10 0.0782 linpk 1.03 10000 30.20 11 0.0957 mdbx 1.99 10000 15.47 12 0.0894 nf 2.30 10000 31.97 12 0.0789 protein 4.26 10000 50.58 10 0.0867 rnflow 6.41 10000 42.79 12 0.0772 test_fpu 5.84 10000 14.11 13 0.0725 tfft 1.08 10000 2.89 12 0.0940 Geometric Mean Execution Time = 20.64 seconds llvm-gfortran Compile Executable Ave Run Number Estim Name (secs) (bytes) (secs) Repeats Err % --------- ------- ---------- ------- ------- ------ ac 0.38 10000 19.33 10 0.0337 aermod 33.57 10000 22.56 12 0.0205 air 2.00 10000 11.34 10 0.0489 capacita 0.65 10000 66.82 30 0.1579 channel 0.66 10000 4.72 13 0.0949 doduc 2.30 10000 48.87 10 0.0696 fatigue 1.18 10000 16.91 10 0.0951 gas_dyn 1.08 10000 26.84 18 0.0810 induct 2.33 10000 68.04 10 0.0221 linpk 0.62 10000 30.30 14 0.0494 mdbx 1.26 10000 17.62 10 0.0350 nf 0.67 10000 35.87 10 0.0555 protein 1.48 10000 57.71 10 0.0866 rnflow 1.79 10000 47.78 10 0.0487 test_fpu 1.58 10000 16.88 12 0.0470 tfft 0.54 10000 3.02 12 0.0545 Geometric Mean Execution Time = 23.04 seconds The ratio of the execution times for each test with FSF gfortran to that in llvm-gfortran 4.2.1 are then... gfortran gfortran 4.2.4 4.3.1 ac 0.947 0.814 aermod 1.36 1.54 air 0.957 0.932 capacita 0.952 0.874 channel 1.33 0.799 doduc 0.981 0.986 fatigue 0.946 0.792 gas_dyn 0.854 0.413 induct 1.01 1.33 linpk 1.03 0.997 mdbx 0.848 0.878 nf 0.947 0.891 protein 0.884 1.06 rnflow 0.904 0.896 test_fpu 0.892 0.836 tfft 0.974 0.957 Interestingly, there appears to be a regression in the performance of the induct test in gcc 4.3.1 (at least for the -ffast-math -funroll-loops -msse3 -O3 compiler flags). I'll look into this tonight to see if any of these flags alone can produce this speed reduction between gfortran 4.2.4 and 4.3.1 on the induct test. Jack ps The corrected results do show that llvm-gfortran 4.2.1 isn't performing quite as bad against the same major release of FSF gfortran. It does suggest we would do well to get llvm-gcc resync'ed to gcc 4.3.