用GCC向量内在函数计算x ^ y

drw*_*owe 6 c optimization performance gcc sse

假设我有一个2元素向量定义如下(使用GCC语法打包向量)

// 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)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更快的方法使用向量运算进行两次幂计算.该架构是x86-64上的GCC,平台特定代码是可以的.

Gun*_*iez 5

是的,如果您没有特殊情况(负数,0,1,NaN等等),这应该是可能的,以便代码路径是线性的.

powIEEE754双精度函数的通用代码,它没有循环结构,所以如果你充实了所有特殊情况,矢量化似乎很简单.玩得开心.

  • 哈哈......我明白你的意思是"玩得开心".:) (2认同)