【问题标题】:How to enable Loop tiling in gcc?如何在 gcc 中启用循环平铺?
【发布时间】:2011-08-29 10:29:36
【问题描述】:

如何使用 gcc 编译代码,执行循环平铺(阻塞)?默认情况下,-O3 优化不执行循环平铺。我需要在这个标志中启用循环平铺,并找出平铺因素。 (例如立方平铺或矩形平铺)即内部平铺启发式。

谢谢

【问题讨论】:

    标签: optimization gcc loops gcc4 tiling


    【解决方案1】:

    您没有提供 gcc 的确切版本,也没有提供示例代码,也没有提供结果代码,您在互联网上也没有仔细查看,但这可能已经回答了您的问题:

    条带挖掘是通过合并graphite branch in version 4.4 引入gcc 的优化。另见the manual

    -floop-strip-mine 对循环执行循环剥离挖掘转换。条带挖掘将一个循环分成两个嵌套循环。外环的步幅等于条带大小,而内环的步幅与条带内的原始环的步幅相同。可以使用 loop-block-tile-size 参数更改条带长度。例如,给定一个循环:

              DO I = 1, N
                A(I) = A(I) + C
              ENDDO
    

    循环剥离挖掘将像用户写的那样转换循环:

              DO II = 1, N, 51
                DO I = II, min (II + 50, N)
                  A(I) = A(I) + C
                ENDDO
              ENDDO
    

    此优化适用于 GCC 支持的所有语言,不限于 Fortran。要使用此代码转换,GCC 必须配置 --with-ppl 和 --with-cloog 以启用 Graphite 循环转换基础结构。

    您可以运行man gcc | grep '\-floop\-strip\-mine' 来检查这是否是受支持的选项。对于确切的 gcc 版本,请输入 gcc --version

    【讨论】:

    • 我的 gcc 版本是 4.4.5。我读到标志 -floop-block 执行代码阻塞。我的问题是,我们如何知道阻塞因子?是否有任何标志可以在编译时报告阻塞因素..?
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2014-04-28
    • 2013-12-24
    相关资源
    最近更新 更多