是否存在结果[i] + = A [k] * sin(B [k] * C [i] + D [k])的内在指令?

时间:2016-05-18 04:49:25

标签: cpu intel intrinsics instructions

我在for循环中有一个简单的代码行(64个字节,8个双精度形式 - 正好one i7 cache line),它嵌套在k循环中:

 result[i] += A[k] * sin(B[k] * C[i] + D[k])

我环顾intell intrinsics manual但似乎丢失了:如何查询这样的功能?

1 个答案:

答案 0 :(得分:1)

等一下,内圈是i还是k?假设k对于所有i都是常量,则将A[k]广播到整个向量中,_mm256_set1_pd(A[k]),并且其他数组[k]操作数相同。

正如雷蒙德所说,这是复合单指令的方法。即使sin()也没有在硬件中实现(除了x87版本的标量)。英特尔的内在指南列出了一些只有Intel's SVML provides的英特尔库函数,而不是gcc / clang <immintrin.h>的一部分。

an FMA (_mm256_fmadd_pd)用于B[k] * C[i] + D[k],并将结果传递给矢量化sin()函数,如果可以找到的话。

将结果输入result[i] += A[k] * ...的其他FMA。

这当然需要带有AVX的两个32B向量。

AVX512可以使用64B矢量,但目前仅在Xeon Phi加速卡中可用。