GCC矢量化语用

时间:2015-06-22 06:48:44

标签: gcc vectorization pragma icc auto-vectorization

如果用户使用#pragma ivdep确认没有依赖关系,那么使用intel编译器仍然可以对循环进行矢量化。

我在GCC #pragma GCC ivdep找到了一个,但收到如下错误:

warning: ignoring #pragma GCC ivdep [-Wunknown-pragmas] #pragma GCC ivdep

1 个答案:

答案 0 :(得分:5)

GCC4.9开始,完全支持“#pragma ivdep”。

您使用哪种GCC版本?至少在2013年之前,#pragma ivdep在海湾合作委员会中没有得到官方支持。

我不确定2013年至2014年期间其他GCC4.x子版本的官方支持,虽然我已经看到在版本4.9之前有一些部分补丁用于ivdep支持。

在ICC中(您还在问题标签中提到过)#pragma ivdep很久以前就已得到支持(至少过去5年)。

对于其他编译器:Microsoft从MSVS 2013开始支持“#pragma loop ivdep”。从20世纪90年代开始,Cray和其他一些“老派”编译器可能会支持它,但我不确定。

最后,如果您寻找跨平台和标准化的解决方案,请查看OpenMP4.x #pragma omp simd。虽然它是不同的语义,也只有GCC4.9 + ICC / IFORT支持,但它可能在未来更有益,因为(与ivdep相反) - pragma omp simd是真正的标准,所以所有编译器供应商将来或多或少必须支持它,并且必须支持相同的语法。