【问题标题】:GCC no vectorization output?GCC没有矢量化输出?
【发布时间】:2016-11-16 13:24:12
【问题描述】:

我正在尝试使用 ivdep 对循环进行矢量化,但没有得到任何输出。我查看了documentation 并使用了那里提到的标志。这是我的代码:

int main()
{
int a[100], b[100];
int size = 100;

for (int i = 0; i < size; i++)
      a[i] = 5; 

#pragma GCC ivdep
   for (int i = 0; i < size; i++)
      b[i] = a[i] + i;
}

我如何编译它:

g++ vectest.c -O2 -fopt-info-all -fopt-info-missed-all -o vectest

【问题讨论】:

    标签: c++ gcc vectorization pragma


    【解决方案1】:

    您缺少使 GNU 调试器工作的 -g 标志。 这样编译:

    g++ vectest.c -O2 -g -fopt-info-all -fopt-info-missed-all -o vectest
    

    【讨论】:

    • 如果不是您想要的答案,请告诉我。
    • 所以我真的误解了你想要的东西。请尝试更多地解释“这个输出必须是什么”,请
    • 我只是想让它告诉我循环是否被矢量化。这只是一个测试程序。我有一个非常大的并行应用程序,当我使用#pragmas 时我没有得到任何加速,而且我无法调试,因为我没有得到任何调试矢量化输出。类似this@Barretxx
    • 啊...我现在明白了。所以,如果你想看看你的程序是否以它可以使用的最佳方式使用并行性,那么在没有任何优化的情况下编译它(-O0 标志)。然后您将能够看到逐步运行的顺序代码。你认为这样它会输出你想要的@Mo
    • 我得到了我需要的输出:g++ vectest.c -O3 -fopt-info-all -fopt-info-all-missed -o vectest。我使用的是'missed-all'而不是'all-missed'。但现在我有另一个问题。这仅在我指定O3 时才有效,而不管ivdep。为什么ivdep 不能单独工作? @Barretxx
    猜你喜欢
    • 2015-07-30
    • 2018-12-16
    • 1970-01-01
    • 2018-05-02
    • 2010-09-29
    • 2016-06-03
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多