In the context of evaluating negative-log-likelihoods, I have to perform a bunch of operations that could bene开发者_如何学JAVAfit from vectorization
0) for (i = 1...n) { a[i] = 0; } // but this I think
std::fill( a.begin(), a.end(), 0 ) is already optimal
1) for (i = 1...n) { a[i] += b * c[i]; }
2) sum = 0; for (i = 1 .. n) { sum += a[i] * log( b[i] / c ); }
do you know if there's any hope to get gcc 434 to do auto-vectorization, and how should I code the loop to help him (e.g. using indices vs using iterators, should I break up (2) in simpler loops, ...) up to now I'm using doubles, have to check if I can move to floats at least for (1).
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
Use the required options, -O3 -msse2
For more options, read the documentation above.
for autovectorization of floating point reductions like 2) you need to enable -funsafe-math-optimizations
on i386 like targets you also need to add -mfpmath=sse
精彩评论