如果用户使用#pragma ivdep
确认没有依赖关系,那么使用intel编译器仍然可以对循环进行矢量化。
我在GCC #pragma GCC ivdep
找到了一个,但收到如下错误:
warning: ignoring #pragma GCC ivdep [-Wunknown-pragmas]
#pragma GCC ivdep
答案 0 :(得分:5)
您使用哪种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是真正的标准,所以所有编译器供应商将来或多或少必须支持它,并且必须支持相同的语法。