[PATCH] PR fortran/31593: Speed up loops with DO variables as procedure arguments
Dominique Dhumieres
dominiq@lps.ens.fr
Tue Aug 25 10:53:00 GMT 2009
Hi Tobias,
I have tested your patch on the polyhedron suite and have found
a slowdown (~15%) on the air.f90 test. As far as I can tell, it
is another incarnation of pr40106: a significant increase of the
call to pow:
Without the patch valgrind gives:
6,383,991,286 ???:MAIN__ [./a.out]
5,449,550,260 ???:derivy_ [./a.out]
5,434,083,830 ???:derivx_ [./a.out]
928,522,490 ???:fvspltx2_ [./a.out]
870,521,635 ???:fvsplty2_ [./a.out]
378,564,472 ???:state_ [./a.out]
153,867,154 ???:__quorem_D2A [/usr/lib/libSystem.B.dylib]
78,800,012 ???:__multadd_D2A [/usr/lib/libSystem.B.dylib]
63,907,869 ???:pow$fenv_access_off [/usr/lib/libSystem.B.dylib]
60,230,275 ???:__dtoa [/usr/lib/libSystem.B.dylib]
52,886,059 ???:__vfprintf [/usr/lib/libSystem.B.dylib]
49,249,824 ???:log$fenv_access_off [/usr/lib/libSystem.B.dylib]
41,644,728 ???:exp$fenv_access_off [/usr/lib/libSystem.B.dylib]
38,120,090 ???:__cmp_D2A [/usr/lib/libSystem.B.dylib]
31,960,034 ???:__sfvwrite [/usr/lib/libSystem.B.dylib]
31,494,744 ???:write_float [/Volumes/MacBook/opt/gcc/gcc4.5w/lib/x86_64/libgfortran.3.dylib]
28,012,798 ???:0x00007fffffe007a0 [???]
22,464,832 ???:topwall_ [./a.out]
20,055,796 ???:__lshift_D2A [/usr/lib/libSystem.B.dylib]
19,061,748 ???:output_float.clone.1 [/Volumes/MacBook/opt/gcc/gcc4.5w/lib/x86_64/libgfortran.3.dylib]
18,315,388 ???:botwall_ [./a.out]
16,458,864 ???:__Balloc_D2A [/usr/lib/libSystem.B.dylib]
15,963,688 ???:aexit_ [./a.out]
with the patch, it gives:
6,934,475,714 ???:MAIN__ [./a.out]
5,368,997,970 ???:derivy_ [./a.out]
5,273,028,040 ???:derivx_ [./a.out]
1,953,139,629 ???:pow$fenv_access_off [/usr/lib/libSystem.B.dylib]
923,918,805 ???:fvspltx2_ [./a.out]
863,231,015 ???:fvsplty2_ [./a.out]
377,986,128 ???:state_ [./a.out]
213,838,182 ???:floorl$fenv_access_off [/usr/lib/libSystem.B.dylib]
153,862,648 ???:__quorem_D2A [/usr/lib/libSystem.B.dylib]
78,791,682 ???:__multadd_D2A [/usr/lib/libSystem.B.dylib]
60,230,068 ???:__dtoa [/usr/lib/libSystem.B.dylib]
52,887,541 ???:__vfprintf [/usr/lib/libSystem.B.dylib]
49,249,824 ???:log$fenv_access_off [/usr/lib/libSystem.B.dylib]
47,519,596 ???:fabs$fenv_access_off [/usr/lib/libSystem.B.dylib]
41,644,728 ???:exp$fenv_access_off [/usr/lib/libSystem.B.dylib]
38,120,090 ???:__cmp_D2A [/usr/lib/libSystem.B.dylib]
31,965,392 ???:__sfvwrite [/usr/lib/libSystem.B.dylib]
31,494,744 ???:write_float [/Volumes/MacBook/opt/gcc/gcc4.5w/lib/x86_64/libgfortran.3.dylib]
28,014,628 ???:0x00007fffffe007a0 [???]
24,843,254 ???:read_encoded_value_with_base [/usr/lib/libSystem.B.dylib]
22,092,044 ???:topwall_ [./a.out]
20,050,764 ???:__lshift_D2A [/usr/lib/libSystem.B.dylib]
19,059,148 ???:output_float.clone.1 [/Volumes/MacBook/opt/gcc/gcc4.5w/lib/x86_64/libgfortran.3.dylib]
17,928,664 ???:botwall_ [./a.out]
16,457,159 ???:__Balloc_D2A [/usr/lib/libSystem.B.dylib]
I suspect this to be related to pr41098: some x*x being folded as
pow(x,2.0) and not unfolded by subsequent passes.
Thanks for the patch.
Dominique
More information about the Fortran
mailing list