如何使用gcc编译代码,执行循环平铺(Blocking)?默认情况下-O3优化不执行循环平铺。我需要在此标志中启用循环平铺,并找出平铺因子。 (例如,立方平铺或矩形平铺),即内部平铺启发式。
谢谢
答案 0 :(得分:1)
你没有提供gcc的确切版本,也没有提供示例代码,也没有提供结果代码,你在互联网上看起来也不够,但可能这已经回答了你的问题:
条带挖掘是一种优化,已通过合并graphite branch in version 4.4引入gcc。另请参阅the manual:
-floop-带状矿 在循环上执行循环条挖掘转换。条带挖掘将循环分成两个嵌套循环。外环具有等于条带尺寸的步幅,并且内环具有条带内的原始环的步幅。可以使用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。要使用此代码转换,必须使用--with-ppl和--with-cloog配置GCC以启用Graphite循环转换基础结构。
您可以运行man gcc | grep '\-floop\-strip\-mine'
来检查这是否是受支持的选项。对于确切的gcc版本,请键入gcc --version
。