Re: "unhandled use" in vectorizing a dot product?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/30/2009 05:37 PM, Tim Prince wrote:
Benjamin Redelings I wrote:

I noticed that (in gcc 4.5 as of Oct-18) the following code is not vectorized:

float sum=0;
int i;
for(i=0;i<16;i++)
  sum += f1[i]*f2[i];

The error is "unhandled use in statement"

However, the web page at http://gcc.gnu.org/projects/tree-ssa/vectorization.html says:

"Detection and vectorization of special idioms, such as dot-product and widening-summation: Incorporated into GCC 4.2."

Can you tell me if I am missing something?  Is the web page correct?

I haven't seen vector sum or dot product reduction except with the use of -ffast-math. At one time, it was said that -fassociative-math also should permit it. It's more effective with -mtune=barcelona (particularly for CPUs introduced the last 2 years). With those options, gcc/g++/gfortran are fairly good at dot product vectorization, both traditional code such as you show, and dot_product/inner_product. In my opinion, it's unfortunate not having an option to enable this optimization independent of riskier ones.
Thank you!  I don't know how long it would have taken me to notice this.

Even better, I see that it can vectorize loops that marginalize simultaneously multiple three numbers as well.

for(int i=0;i<16;i++)
  sum += f1[i] * f2[i] * f3[i]?

Hmm... the point about -fassociative-math is a good point, presuming that SSE math handles NaNs and Infs.

Also, perhaps the documentation should explicitly say somewhere that vectorization can depend on flags like this. "unhandled use in statement" certainly doesn't point the user to an idea of how to fix this :-P

-BenRI



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux