我在 Linux 上使用 Intel Fortran Compiler (v. 12.0.3)。我想执行分析gprof
并获得一个基本块计数,所有行都标有自己的运行计数,但我设法获得的只是程序/子例程/函数级别的计数。我的结论是我的编译器标志错误,但是尽管在网上查看并阅读了ifort
手册页,但我无法弄清楚我应该做什么而不是我在做什么......
我在编译时使用了以下标志:
-w -O0 -g -pg
这就是我调用的方式gprof
:
gprof -l -A -x path/to/exe gmon.out > OUT
起初看起来好像所有行都标有运行频率,但事实证明,每个块/行只是获取过程计数(在下面的简短示例中,该函数被调用 43679 次,'if' 和例如,“else”被标记为 43679,这是没有意义的):
43679 -> function variance_from_index (indices,array)
! declarations
43679 -> if (ubound(indices,1).eq.2) then
43679 -> variance_from_index = array(indices(1),indices(2))
else
43679 -> do i=1,ubound(indices,1)-1
43679 -> do j=i+1,ubound(indices,1)
43679 -> items(1:2) = (/indices(i),indices(j)/)
我已经在英特尔论坛上发布了我的问题,到目前为止,我收到了一条回复,其中指出了英特尔的codecov
工具。尽管这是一个非常有用的应用程序,但它似乎不适合我当前的需求,因为似乎没有为每一行代码输出运行计数的选项。我更喜欢使用gprof
,其输出 - 原则上 - 似乎正是我所需要的。
谢谢你的帮助!