首页 > 解决方案 > 逐行分析 Fortran 子例程

问题描述

我已经编写了一个大型 Fortran 程序(使用新标准),我目前正在尝试让它运行得更快。我已经设法使用 gprof 简化了大多数例程,但我有一个非常大的子例程来组织计算,现在几乎占用了 50% 的 CPU 时间。我确信这个例程中有几个瓶颈,但我没有设法设置任何编译或运行程序的参数,所以我可以看到这个例程中的时间花在了哪里。我想至少简单地计算一下每行计算了多少时间,或者执行每行花费了多少 CPU 时间。也许 valgrind 是一个更好的工具?消除内存泄漏非常有用。

标签: fortrancode-profiling

解决方案


GCC 中的“gcov”工具很好地概述了我的代码中的单个子例程,以了解每行执行了多少次。带有要“覆盖”的子例程的文件必须使用
gfortran -c -fprofile-arcs -ftest-coverage -g subr.F90 编译,并且要链接程序,我必须添加 -lgcov 作为 LAST 库。
运行程序后,我可以使用 gcov "subr.F90" 创建一个文件 "subr.F90.gcov",其中包含子例程中每行已执行次数的信息。这应该可以发现子程序中的瓶颈。这是对 gprof 的一个很好的补充,它给出了每个子例程的时间,但是由于我的程序有超过 50000 行代码,因此能够为这个“逐行”选择几个子例程真是太好了


推荐阅读