Polyhedron 2005 Benchmarks
Paul Thomas
paulthomas2@wanadoo.fr
Fri Nov 18 15:54:00 GMT 2005
Dominique,
>
>It seems that your AMD is slower than mine and have a smaller L2 cache.
>If so, it confirms that some of the Polyhedron tests are sensitive to the
>L2 cache size (I have proof of that for tfft).
>
Yes, I would agree with that. This is apparent from the Wiki posting,
where a PIV, even under Cygwin, is doing much better for the tests that
are sensitive to cache size.
>
>I also confirm that mod() is slow in g95 and gfc (g77 as well), that there
>is a large benefit to inline dot_product (at least for small vectors).
>
I have put in a lot of work to fashion an inline MOD that both improves
the range for which a result is given and the speed. I know what to do
now (Thanks, Uros and Tobi) and will implement it it in the next week.
>
>In addition replacing 3 dot_products by a matmul of a 3x3 matrix times a
>length 3 vector gives catastrophic results (with all compilers) and
>g95 and gfc are unable to reorder loops such as
>
>do i = 1, ni
> do j = 1, nj
> a(i,j) = b(i,j)
> end do
>end do
>
>
I was just going to try Stephen's suggestion of -ftree-loop-linear.
>limit stacksize unlimited (csh)
>ulimit -s unlimited (sh)
>
I have been using the gfortran option.
The present status of the three lines that I have been persuing to
improve gfortran's performance is:
(i) I think that the inline dot_product is ready to resubmit. It
improves the performance for small arrays and, as far as I know, does no
harm anywhere.
(ii) MOD requires some work but there is light at the end of the tunnel.
(iii) There is a typo in dependency.c(gfc_is_same_range)
00157 /* Use the bound of the array if no bound is specified. */
00158 if (ar1->as && !e1)
00159 e1 = ar1->as->lower[n];
00160
00161 if (ar2->as && !e2)
00162 e2 = ar2->as->upper[n]; <==== this should be lower
which when corrected, allows it to be used in gfc_check_section_vs_section to return immediately with GFC_DEP_EQUAL.
The one reference to this function is to a commented out section in trans-array that is meant to do scalarizer loop reordering.
This section of code is broken; the more obvious corrections result in a reordering but the strides get mixed up.
I have put this on a longer term TODO list.
In the mean time, the simplest fix of dependency.c will ready for submission in a few days.
Best regards
Paul
More information about the Fortran
mailing list