2015-06-22 101 views
1

使用intel编译器,如果用户使用#pragma ivdep确认没有依赖关系,则循环仍然可以被矢量化。GCC向量化Pragma

我发现了一个在GCC #pragma GCC ivdep,却得到了一个错误如下:

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

回答

4

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

您使用哪个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。虽然它是不同的sematic,也只有GCC4.9 + ICC/IFORT的支持,它可能在未来更有利,因为(与ivdep相反) - pragma omp simd是真正的标准,所以所有编译器厂商都会或多或少必须在未来支持它,并且必须支持相同的语法。