I'm trying to get my code to auto vectorize, but it isn't working.
int _tmain(int argc, _TCHAR* argv[])
{
const int N = 4096;
float x[N];
float y[N];
float sum = 0;
//create random values for x and y
for (int i = 0; i < N; i++)
{
x[i] = rand() >> 1;
y[i] = rand() >> 1;
}
for (int i = 0; i < N; i++){
sum += x[i] * y[i];
}
}
Neither loop vectorizes here, but I'm really only interested in the second loop.
I'm using visual studio express 2013 and am compiling with the /O2
and /Qvec-report:2
(To report whether or not the loop was vectorized) options. When I compile, I get the following message:
--- Analyzing function: main
c:users...documentsvisual studio 2013projectsintrin3intrin3intrin3.cpp(28) : info C5002: loop not vectorized due to reason '1200'
c:users...documentsvisual studio 2013projectsintrin3intrin3intrin3.cpp(41) : info C5002: loop not vectorized due to reason '1305'
Reason '1305', as can be seen HERE, says that "the compiler can't discern proper vectorizable type information for this loop." I'm not really sure what this means. Any ideas?
After splitting the second loop into two loops:
for (int i = 0; i < N; i++){
sumarray[i] = x[i] * y[i];
}
for (int i = 0; i < N; i++){
sum += sumarray[i];
}
Now the first of the above loops vectorizes, but the second one does not, again with error code 1305.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…