GCC 向量化编译指示

GCC Vectorization Pragma

使用 intel 编译器,如果用户使用 #pragma ivdep.

确认没有依赖关系,则循环仍然可以向量化

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

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

"#pragma ivdep" 从 GCC4.9 开始得到完全支持。

您使用哪个 GCC 版本? #pragma ivdep 至少在 2013 年之前未在 GCC 中得到正式支持。

我不确定 2013 和 2014 之间其他 GCC4.x 子版本的官方支持,尽管我看到在 4.9 版本之前有一些部分补丁支持 ivdep。

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

对于其他编译器:Microsoft 从 MSVS 2013 开始支持“#pragma loop ivdep”。Cray 和其他一些 "old school" 编译器可能从 1990 年代开始支持它,但我不确定。

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