Intel Xeon Phi 提供使用“IMCI”指令集,
我用它来做“c = a*b”,像这样:
float* x = (float*) _mm_malloc(N*sizeof(float), ALIGNMENT) ;
float* y = (float*) _mm_malloc(N*sizeof(float), ALIGNMENT) ;
float z[N];
_Cilk_for(size_t i = 0; i < N; i+=16)
{
__m512 x_1Vec = _mm512_load_ps(x+i);
__m512 y_1Vec = _mm512_load_ps(y+i);
__m512 ans = _mm512_mul_ps(x_1Vec, y_1Vec);
_mm512_store_pd(z+i,ans);
}
并测试它的性能,当 N SIZE 为 1048576 时,
它需要花费 0.083317 秒,我想将性能与自动矢量化进行比较,
所以其他版本代码如下:
_Cilk_for(size_t i = 0; i < N; i++)
z[i] = x[i] * y[i];
这个版本花费 0.025475 秒(但有时花费 0.002285 或更少,我不知道为什么?)
如果我将 _Cilk_for 更改为 #pragma omp parallel for,性能会很差。
那么,如果答案是这样的,为什么我们需要使用内在函数?
我在哪里犯错了吗?
有人可以给我一些优化代码的好建议吗?