c++gccvectorization

Getting auto-vectorization with GCC?


In the context of evaluating negative-log-likelihoods, I have to perform a bunch of operations that could benefit from vectorization:

  1. for (i = 1...n) { a[i] = 0; } // but this I think

    std::fill( a.begin(), a.end(), 0 ) is already optimal

  2. for (i = 1...n) { a[i] += b * c[i]; }

  3. sum = 0; for (i = 1 .. n) { sum += a[i] * log( b[i] / c ); }

Do you know if there is 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 am using doubles, have to check if I can move to floats at least for (1).


Solution

  • http://gcc.gnu.org/projects/tree-ssa/vectorization.html

    Use the required options, -O3 -msse2

    For more options, read the documentation above.