我试图弄清楚为什么在使用gcc 4.9.0时,使用-O -ftree-vectorize,gcc 4.9.0不会对简单数组进行矢量化:

int a[256], b[256], c[256];
foo () {
  int i;
  a[:] = b[:] + c[:];
}


通过查看生成的汇编程序,该循环尚未被向量化,并且通过-fopt-info-vec-all标志,我得到了很多输出,告诉我向量化失败的原因,首先是:

>testvec.c:5: note: ===== analyze_loop_nest =====
>testvec.c:5: note: === vect_analyze_loop_form ===
>testvec.c:5: note: not vectorized: control flow in loop.
>testvec.c:5: note: bad loop form.


这令人困惑,因为循环中没有控制流。使用相同操作的标准数组符号对for循环进行矢量化效果很好。

最佳答案

看起来只有最新版本的GCC(6.1)才能将您的示例向量化:

http://melpon.org/wandbox/permlink/LOIweYNRRLXeJsZf

关于c - cilk plus数组符号未使用gcc 4.9.0矢量化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39131648/

10-14 12:07