我试图弄清楚为什么在使用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/