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“启动配置中指定的程序文件不存在”

未记录的 GCC 扩展:结构中的 VLA

Linux下 gcc编译提示错误,,在函数_start中 main 未定义的引用

通过安装 intel parallel X studio 使用 Cilk 库