英特尔Fortran矢量化:矢量循环成本高于标量

时间:2015-07-22 11:35:46

标签: fortran vectorization simd intel-fortran

我正在使用英特尔Fortran 15测试和优化遗留代码,我有这个简单的循环:

do ir=1,N(lev)
  G1(lev)%D(ir) = 0.d0
  G2(lev)%D(ir) = 0.d0
enddo

其中lev等于某个整数。

编译器的结构和索引非常复杂,但它可以在任务中成功,正如我在其他行上看到的那样。 现在,在上面的循环中,我从编译报告中得到了这个:

LOOP BEGIN at MLFMATranslationProd.f90(38,2)
  remark #15399: vectorization support: unroll factor set to 4
  remark #15300: LOOP WAS VECTORIZED
  remark #15462: unmasked indexed (or gather) loads: 2
  remark #15475: --- begin vector loop cost summary ---
  remark #15476: scalar loop cost: 12
  remark #15477: vector loop cost: 20.000
  remark #15478: estimated potential speedup: 2.340
  remark #15479: lightweight vector operations: 5
  remark #15481: heavy-overhead vector operations: 1
  remark #15488: --- end vector loop cost summary ---
LOOP END

我的问题是:矢量循环成本如何高于标量?我该怎么做才能走向estimated potential speedup

1 个答案:

答案 0 :(得分:1)

循环成本是对一个循环迭代的持续时间的估计,并且在向量化的情况下需要更长的时间,但是您可以在一个向量化迭代中处理更多的数组项。

在你的情况下,加速大约是12/20 * 4 = 2.4,因为你可以在一次迭代中处理4个双精度数组元素(可能是AVX指令)。

相关问题