cilk 加数组表示法未使用 gcc 4.9.0 进行矢量化
Posted
技术标签:
【中文标题】cilk 加数组表示法未使用 gcc 4.9.0 进行矢量化【英文标题】:cilk plus array notation not vectorized with gcc 4.9.0 【发布时间】:2016-08-24 19:32:29 【问题描述】:我试图弄清楚为什么 gcc 4.9.0 在使用 gcc 4.9.0 时不会向量化简单的数组加法,使用 -O -ftree-vectorize:
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
循环进行矢量化处理可以正常工作。
【问题讨论】:
【参考方案1】:看起来只有最新版本的 GCC (6.1) 可以矢量化您的示例:
http://melpon.org/wandbox/permlink/LOIweYNRRLXeJsZf
【讨论】:
谢谢,我安装了 v. 6.1,它工作正常。很惊讶它为这项工作使用了最近的一个版本。以上是关于cilk 加数组表示法未使用 gcc 4.9.0 进行矢量化的主要内容,如果未能解决你的问题,请参考以下文章
将 Cilk Plus 与 MinGW-w64 (gcc 4.9.2) 一起使用?
三元运算符 '?:' 在 4.9.0 之前的 GCC 版本中推断出不正确的类型? [关闭]
Mac Eclipse GCC 4.9.0“启动配置中指定的程序文件不存在”