两个简单的循环没有被intel编译器矢量化

时间:2015-04-04 20:47:08

标签: c++ loops optimization vector icc

我写了一个非常简单的代码,用于添加剂量。源代码是

#include <iostream>
#include <vector>
#include <ctime>


using namespace std;

int main(int argc, const char * argv[]) {

  long int n=10000;
  vector<double> a(n,0.0),b(n,0.0),c(n,0.0);

  for (int i=0; i<n; i++){
    a[i]=i;
    b[i]=2*i;
  }

  for (int i=0; i<n; i++){
    c[i]=a[i]+b[i];
  }

  return 0;
}

此代码中有两个循环。第一个循环(第21-24行)将值赋给向量ab。第二个循环(第26-28行)执行向量加法。在两个循环中,迭代彼此独立。根据我的理解,这两个循环应该很容易由编译器自动矢量化。 但是,我用带有标志-opt-report

的intel编译器编译了代码
icpc -opt-report main.cpp

我收到了一份优化报告main.optrpt。但是,在本报告中,它表明两个循环都没有矢量化。报告中的详细信息是

LOOP BEGIN at main.cpp(21,3)
   remark #15344: loop was not vectorized: vector dependence prevents vectorization. First dependence is shown below. Use level 5 report for details
   remark #15346: vector dependence: assumed ANTI dependence between  line  22 and  line 23
   remark #25438: unrolled without remainder by 2  
LOOP END

LOOP BEGIN at main.cpp(26,3)
   remark #15344: loop was not vectorized: vector dependence prevents vectorization. First dependence is shown below. Use level 5 report for details
   remark #15346: vector dependence: assumed FLOW dependence between  line 27 and  line 27
   remark #25438: unrolled without remainder by 2  
LOOP END

有谁知道为什么这两个循环没有被编译器矢量化?

0 个答案:

没有答案