【问题标题】:GCC Vectorization PragmaGCC 向量化编译指示
【发布时间】:2015-06-22 06:48:43
【问题描述】:

使用英特尔编译器,如果用户使用#pragma ivdep 确认没有依赖关系,则循环仍然可以向量化。

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

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

【问题讨论】:

    标签: gcc vectorization pragma icc auto-vectorization


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • Clang 怎么样?语法一样吗?
    • CLang(至少它的一些分支)绝对应该支持#pragma omp simd 并且很可能Clang 不支持#pragma ivdep 这是专有扩展。
    • 所有大的编译器都支持#pragma omp simd,但是它和#pragma ivdep是有区别的。第一个 pragma 强制向量化,而第二个 pragma 告诉编译器没有向量依赖关系,但让编译器根据其成本模型决定是否对循环进行向量化。
    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2011-02-10
    • 2019-11-27
    • 2015-12-27
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多