[patch,libgfortran] PR51119 - MATMUL slow for large matrices
Jerry DeLisle
jvdelisle@charter.net
Mon Nov 14 02:39:00 GMT 2016
On 11/13/2016 06:04 PM, Tim Prince wrote:
> On 11/13/2016 7:55 PM, Steve Kargl wrote:
>> On Sun, Nov 13, 2016 at 04:08:50PM -0800, Jerry DeLisle wrote:
>>> Hi all,
>>>
>>> Attached patch implements a fast blocked matrix multiply. The basic algorithm is
>>> derived from netlib.org tuned blas dgemm. See matmul.m4 for reference.
>>>
>>> The matmul() function is compiled with -Ofast -funroll-loops. This can be
>>> customized further if there is an undesired optimization being used. This is
>>> accomplished using #pragma optimize ( string ).
>>>
>>
>> Did you run any tests with '--param max-unroll-times=4' where
>> the 4 could be something other than 4. On troutmask, with my
>> code I've found that 4 seems to work the best with -funroll-loops.
>>
> That's been a typical optimum for Intel server and client CPUs beginning with
> Nehalem. For small loops it should fit within Loop Stream Detection. The high
> degree of source code blocking here argues that would be the most unrolling
> which could be useful.
> AVX2 CPUs seem to have a more pronounced optimum at unroll-times=4 than earlier
> ones. AVX-512 might argue for 2.
>
It will not play with #pragma optimize.
Jerry
More information about the Fortran
mailing list