[Patch, fortran] PR24518 and PR24520 - Improvements to MOD and
Tim Prince
tprince@myrealbox.com
Sat Nov 12 15:11:00 GMT 2005
Paul Thomas wrote:
> :REVIEWPATCH:
>
> Janne and Tobi,
>
> Thank you for your comments. For the reasons that I outline below, I am
> withdrawing this patch for repairs. I will resubmit when I am satisfied
> that I have satisfactory solutions for the optimal switching between
> library and inline.
>
>> BTW, does BLAS do anything fancy for dot product that might help for
>> big vectors? I mean, is it worth thinking about inlining only for
>> small vectors? What happpens when the vectors won't fit into cache?
>> I'm not saying this as a criticism of your patch, just idle
>> wondering..
>>
> I have found circumstances where the library and inline DOT_PRODUCT
> execution times cross over at lengths ~32.
>
> The timing test that I supplied with the patch is a complete aberration
> on my part, as a quick examination will reveal, and the results should
> be ignored completely.
>
> Please find attached a test which is more "realistic" (ie. correct):
>
> With -O3 -ffast-math, I obtain:
>
> DOT_PRODUCT test library inline
> array length time(ns) time(ns)
> -ve stride (+ve stride)
> 4 57.90 34.20 (22.00)
> 8 58.70 34.90 (22.20)
> 16 94.70 76.60 (67.20)
> 32 140.40 133.30 (112.50)
> 64 230.60 247.20 (203.70)
> 128 412.80 473.50 (385.40)
> 256 775.10 927.20 (748.00)
> 512 1500.80 1833.40 (1472.40)
> 1024 2949.30 3645.70 (2921.10)
>
> The time for the library function does not depend on the stride of the
> arguments of DOT_PRODUCT. What I learn from this is:
>
> (i) Lengths 4 and 8 are too fast for the timer resolution.
> (ii) There is an overhead of ~25ns for the library function call.
> (iii) With a positive stride, this difference between the library and
> the inline is present for any vector length.
> (iv) The more complicated scalarizer index arithmetic makes the inline
> slower per element, so that the advantage is lost between vector lengths
> of 32 and 64.
>
We showed that the library version of dot_product can be speeded up
significantly for length >= 8. If the compiler implements in-lining for
short length, we would have more incentive to optimize the library for
longer length.
More information about the Fortran
mailing list