C中的矢量化Trig功能?

Jer*_*wen 8 c gcc trigonometry vectorization

我正在寻找计算高度并行化的trig函数(在1024的块中),并且我想利用至少一些现代架构所具有的并行性.

当我编译一个块

for(int i=0; i<SIZE; i++) {
   arr[i]=sin((float)i/1024);
}
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会不会对其进行矢量化,并表示

not vectorized: relevant stmt not supported: D.3068_39 = __builtin_sinf (D.3069_38);
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义.但是,我想知道是否有一个库可以进行并行三角计算.

只有一个简单的泰勒系列上升到第11阶,GCC将向所有循环进行矢量化,并且我的速度超过了一个天真的sin循环的速度的两倍(具有精确答案,或者具有9阶系列,只有一个位)关闭1600个值的最后两个,加速> 3倍).我确定有人之前遇到过这样的问题,但是当我谷歌时,我发现没有提及任何库等.

A.是否已存在某些内容?
B.如果没有,建议优化并行触发功能?

编辑:我发现所谓的"SLEEF"以下库:http://shibatch.sourceforge.net/ 其描述文件,并使用SIMD指令来计算几个基本功能.它使用SSE和AVX特定代码,但我认为将其转换为标准C循环并不困难.

Jer*_*wen 0

我的答案是创建我自己的库来完成这个称为 vectrig 的操作: https: //github.com/jeremysalwen/vectrig