【问题标题】:How to determine what gfortran is vectorizing如何确定 gfortran 正在矢量化什么
【发布时间】:2014-05-14 01:26:30
【问题描述】:

我正在尝试编写一个大规模并行的蒙特卡罗代码,其中一部分将被导出到至强 phi 协处理器。为了确保我有效地使用协处理器,我想看看我的代码的哪些部分编译器,目前是 gfortran,能够向量化。我知道我可以使用 ifort commane -vec-report 来做到这一点。但是,我将在大约一个月内无法访问协处理器,因此暂时坚持使用 gfortran。但是,如果可能的话,我想现在开始优化。不幸的是,我似乎找不到 gfortran 的命令行标志,它告诉我代码的哪一部分正在被矢量化。有没有。如果有,是什么?

谢谢

【问题讨论】:

  • 非常简短的回答:看看man gcc

标签: fortran gfortran


【解决方案1】:

如果-fopt-info适合你的需要,你可以试试。

您可以使用-fopt-info-all 获得更多输出,其中包含有关成功和未优化的信息。

【讨论】:

  • 这种方式可能更有用,只是需要注意除了矢量化之外还有更多的东西。
【解决方案2】:

矢量化器可以被指示为详细并报告它的作用:

-ftree-vectorizer-verbose=n

其中较大的整数n 意味着更详细的报告。

更多信息请见http://gcc.gnu.org/projects/tree-ssa/vectorization.html

(我用谷歌搜索了 1 分钟)。

【讨论】:

  • 这不会为我的代码报告任何内容,这是来自 -fopt-info 的成功报告。
  • 它确实报告了我的代码。你用了什么n?您是否完全启用了矢量化(需要-O3)?
  • 我尝试了从 1 到 10 的所有 n。这可能是因为我得到了 forall 循环的循环矢量化吗?我做了-O3,但这并没有启用-ftree-vectorize。所以我手动添加了。
  • 它也向我报告forall。即使它最终没有向量化它。 gfortran 4.8 -O3
  • 奇怪,我可以确认它不会为 gfortran-4.9 或 4.7 打印任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2013-05-29
  • 2010-12-03
  • 2018-05-25
相关资源
最近更新 更多