【发布时间】:2011-08-29 10:29:36
【问题描述】:
如何使用 gcc 编译代码,执行循环平铺(阻塞)?默认情况下,-O3 优化不执行循环平铺。我需要在这个标志中启用循环平铺,并找出平铺因素。 (例如立方平铺或矩形平铺)即内部平铺启发式。
谢谢
【问题讨论】:
标签: optimization gcc loops gcc4 tiling
如何使用 gcc 编译代码,执行循环平铺(阻塞)?默认情况下,-O3 优化不执行循环平铺。我需要在这个标志中启用循环平铺,并找出平铺因素。 (例如立方平铺或矩形平铺)即内部平铺启发式。
谢谢
【问题讨论】:
标签: optimization gcc loops gcc4 tiling
您没有提供 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。
【讨论】: