GCC矢量化杂注

GCC矢量化杂注,gcc,vectorization,pragma,icc,auto-vectorization,Gcc,Vectorization,Pragma,Icc,Auto Vectorization,使用“英特尔编译器”,如果用户使用#pragma ivdep确认没有依赖项,循环仍然可以矢量化 我在GCC#pragma GCC ivdep中找到了一个,但得到了如下错误: 警告:忽略#pragma GCC ivdep[-Wunknown pragmas] #pragma-GCC-ivdep“pragma-ivdep”从GCC4.9开始完全受支持。 您使用哪个GCC版本#至少在2013年之前,GCC并未正式支持pragma ivdep 我不确定2013年至2014年间其他GCC4.x子版本中是否

使用“英特尔编译器”,如果用户使用
#pragma ivdep
确认没有依赖项,循环仍然可以矢量化

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

警告:忽略#pragma GCC ivdep[-Wunknown pragmas]
#pragma-GCC-ivdep

“pragma-ivdep”从GCC4.9开始完全受支持。

您使用哪个GCC版本#至少在2013年之前,GCC并未正式支持pragma ivdep

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

在ICC中(您在问题标签中也提到了这一点)#pragma ivdep很久以前就得到了支持(至少过去5年)

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


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

那么
Clang
呢?它有相同的语法吗?CLang(至少是它的一些分支)肯定应该支持#pragma omp simd,而最有可能的是CLang不支持#pragma ivdep这一专有扩展。