【问题标题】:Which files? Which subroutines?哪些文件?哪些子程序?
【发布时间】:2017-03-29 14:54:42
【问题描述】:

我有一个包含大约 100 个文件的 Fortran 项目。所有这些都已编译,但并非所有运行都需要它们。还有一些文件包含混合使用/未使用的子程序。

有没有办法知道运行所需的最小文件/子例程/函数集?

【问题讨论】:

  • 您为什么有兴趣这样做?如果从程序中删除未使用的子例程,您的代码可能不会运行得更快。
  • 我正在评估将代码从 fortran 转换为 c/c++ 所需的时间。我想从我需要的最少文件集开始,然后再添加其余文件。

标签: fortran profiling unused-variables


【解决方案1】:

是的。 仅从顶级主程序开始。

编译/链接它并获取不满足的引用列表。

对于每个不满意的引用,添加包含它的文件。

重复这两个步骤,直到不再有不满意的引用。

这会删除干净构建不需要的所有文件。 是的,这是很多工作。事情并不总是那么容易。

如果您想知道特定输入的运行不需要什么, 为此,您需要一个覆盖工具,例如gcov。 未使用的例程将显示覆盖计数为 0。 那么如果你真的想摆脱它们, 将它们提取到单独的源文件中,以便您可以排除它们,并确保它们没有被调用。

【讨论】:

  • 您知道一种适用于使用 intel 编译器编译的代码的替代方法吗?不幸的是,我遇到了一些阻止编译的 gfortran 错误。
  • 英特尔编译器代码覆盖率工具在software.intel.com/sites/default/files/article/401105/… 中进行了描述,注意他们没有提到它在多大程度上使用 ifort 进行了测试。
  • 如果您的初始项目状况不佳以至于无法在 gfortran 中运行,那么转换为 c++ 可能为时过早。
  • 将其移至 c 意味着更多人可以使用它。如果它有效,那么就没有理由移动它。除非您精通 c,否则我相信您会专注于使其按原样工作或使用 Python。
  • @Manfredo:你能用 Intel 或 gfortran 编译/链接它吗?如果是这样,你能运行它吗?你必须到达一垒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多