Computing x^y with GCC vector intrinsics

c, gcc, optimization, performance, sse

Solution

Yes, this should be possible if you have no special cases (negative numbers, 0, 1, NaN etc...) so that the code path is linear.

Here is the generic code for the `pow` function for IEEE754 doubles, it has no looping constructs, so if you flesh out all the special cases, vectorization seems straightforward. Have fun.

Problem

Suppose I have a 2 element vector defines as follows (using the GCC syntax for packed vectors) ``` // packed vector of 2-elements typedef double v2d __attribute__((vector_size(sizeof(double)*2))); v2d x = ...; double y = ...; x[0] = pow(x[0], y) x[1] = pow(x[1], y) ``` I'd like to know if there's a faster way to do the two power computations using vector operations. The architecture is GCC on x86-64 and platform specific code is OK.

Original source

Related problems