1

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

谢谢

4

1 回答 1

1

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

条带挖掘是 gcc 中引入的一种优化,在 4.4 版本中合并了石墨分支。另见手册

-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.

于 2011-08-29T10:42:15.587 回答