性能 – 测量每条线路上花费的时间,fortran

我写了一个Fortran 95代码并用gfortran编译它.我使用gprof并发现它给出的时间远远小于CPU时间. gprof告诉我所有函数使用的时间是15.77s.然而,经过的CPU时间是1分28秒.下面显示了配置文件结果的一瞥:

    Each sample counts as 0.01 seconds.
    %   cumulative   self              self     total           
    time   seconds   seconds    calls   s/call   s/call  name    
    76.67     12.09    12.09        1    12.09    12.82  __bem_mod_MOD_rradwbem
    15.60     14.55     2.46        1     2.46    15.77  MAIN__
    3.36     15.08     0.53      736     0.00     0.00  __bem_mod_MOD_dbesselh_3d
    3.11     15.57     0.49      140     0.00     0.00  __fem_mod_MOD_feasmbl
    0.70     15.68     0.11    30912     0.00     0.00  __bem_mod_MOD_bdrdn
    0.38     15.74     0.06    30915     0.00     0.00  __bem_mod_MOD_bq1n3
    0.13     15.76     0.02        2     0.01     0.01  __bem_mod_MOD_bdrdn_3d
    0.06     15.77     0.01    30912     0.00     0.00  __bem_mod_MOD_dbesselh_1d

其他功能几乎没有时间.该代码包含许多复杂的* 16类型矩阵运算.这些操作主要包含在__bem_mod_MOD_rradwbem中.

我没有在代码中使用I / O操作.

我不清楚为什么gprof告诉我这么少的时间与CPU时间比较?有什么方法我可以知道花费的时间在哪里?我是否有可能将代码的速度提高到与gprof上显示的水平相差不远的水平?目前我只让(外部)循环运行一次,gprof显示这方面的分析结果.但是我将来需要数以千计的循环.

谢谢

最佳答案 你试过用tcov吗?

tcov进行逐行分析,非常老式但在某些环境中仍然很有价值.

在这里观看:http://www.amath.unc.edu/sysadmin/DOC4.0/fortran/prog_guide/8_profiling.doc.html
和手册页.

PS:对不起,这可能更像评论,但我没有必要的50个代表.而且我认为正是你所寻找的.

点赞