如何在 gcc 中启用循环平铺?

发布于 2024-12-01 22:01:57 字数 107 浏览 4 评论 0原文

如何使用 gcc 编译代码,执行循环平铺(阻塞)? -O3 优化默认不进行循环平铺。我需要在此标志中启用循环平铺,并找出平铺系数。 (例如立方体平铺或矩形平铺)即内部平铺启发法。

谢谢

How to compile a code using gcc, which performs loop tiling (Blocking) ? The -O3 optimization by default does not do loop tiling. I need to enable loop tiling in this flag and also, find out the tile factor. (E.g. cubic tiling or rectangular tiling) i.e. the internal tiling heuristics .

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

知你几分 2024-12-08 22:01:57

您没有提供 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。要使用此代码转换,必须使用 --with-ppl 和 --with-cloog 配置 GCC 以启用 Graphite 循环转换基础设施。

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

You haven't provided the exact version of gcc, nor example code, nor result code, nor did you look hard enough at the internet, but possibly this already answers your question:

Strip mining is an optimization that has been introduced into gcc with the merge of the graphite branch in version 4.4. See also the manual:

-floop-strip-mine
Perform loop strip mining transformations on loops. Strip mining splits a loop into two nested loops. The outer loop has strides equal to the strip size and the inner loop has strides of the original loop within a strip. The strip length can be changed using the loop-block-tile-size parameter. For example, given a loop like:

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

loop strip mining will transform the loop as if the user had written:

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

This optimization applies to all the languages supported by GCC and is not limited to Fortran. To use this code transformation, GCC has to be configured with --with-ppl and --with-cloog to enable the Graphite loop transformation infrastructure.

You may run man gcc | grep '\-floop\-strip\-mine' to check if that is a supported option. For the exact gcc version, type gcc --version.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文