由于某种原因运行简单的串行代码

for(i=0;i<1152*1152;i++){
    MatrixA3[i] = MatrixA1[i] + z*MatrixA2[i];}


与矢量化等效算法相比,运行速度要快或相同;

for (int i = 0; i < 1152*1152; i+=4){
    load_data1 = _mm256_load_pd(MatrixA1 + i);
    load_data2 = _mm256_load_pd(MatrixA2 + i);
    _mm256_store_pd(MatrixA3 + i, _mm256_fmadd_pd(load_z,
    load_data2,load_data1_dp));
    }


在具有Intel XE 15.0的intel i7-4578U上,前者以1.507millesecs运行,而后者以10,000runs以1.513millisecs完成。

我的经验是使用avx2内部函数取得了显着的进步,但是由于某种原因,这条线决定让我失败。
请问我做错了什么?

最佳答案

你在做什么错不信任您的编译器。

手动优化不是这种情况,任何受人尊敬的编译器都可以将其向量化。

09-07 01:43