[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