fortran - 逐行分析 Fortran 子例程
问题描述
我已经编写了一个大型 Fortran 程序(使用新标准),我目前正在尝试让它运行得更快。我已经设法使用 gprof 简化了大多数例程,但我有一个非常大的子例程来组织计算,现在几乎占用了 50% 的 CPU 时间。我确信这个例程中有几个瓶颈,但我没有设法设置任何编译或运行程序的参数,所以我可以看到这个例程中的时间花在了哪里。我想至少简单地计算一下每行计算了多少时间,或者执行每行花费了多少 CPU 时间。也许 valgrind 是一个更好的工具?消除内存泄漏非常有用。
解决方案
GCC 中的“gcov”工具很好地概述了我的代码中的单个子例程,以了解每行执行了多少次。带有要“覆盖”的子例程的文件必须使用
gfortran -c -fprofile-arcs -ftest-coverage -g subr.F90 编译,并且要链接程序,我必须添加 -lgcov 作为 LAST 库。
运行程序后,我可以使用 gcov "subr.F90" 创建一个文件 "subr.F90.gcov",其中包含子例程中每行已执行次数的信息。这应该可以发现子程序中的瓶颈。这是对 gprof 的一个很好的补充,它给出了每个子例程的时间,但是由于我的程序有超过 50000 行代码,因此能够为这个“逐行”选择几个子例程真是太好了
推荐阅读
- docker - 无法初始化本地 MSP:设置错误:nil conf 参考
- c# - 无法先使用代码创建正确的表
- unix - 在 MAC OS X 上从 UNIX 终端运行 Google Chrome 的 Shell 代码
- ios - IphoneX 屏幕未覆盖科尔多瓦项目中的页眉和页脚
- mysql - 不嵌套重写 SQL 查询
- botframework - Microsoft Teams 消息扩展不显示搜索的多个参数列表
- .net - 将 .net core 2.2 控制台应用程序升级到 .net core 3.0。3.0 不可用
- ios - 如何在 UITableView 中选择一行?
- simulink - 将初始条件添加到自定义 Simulink 离散时间积分器模块
- nlp - 如何解释对齐工具 fast_align 中的对齐分数?