我写了一个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显示这方面的分析结果。但是我将来需要数以千计的循环。
由于
答案 0 :(得分:2)
您是否尝试过使用 tcov ?
tcov 进行逐行分析,非常老式但在某些环境中仍然很有价值。
在这里观看:http://www.amath.unc.edu/sysadmin/DOC4.0/fortran/prog_guide/8_profiling.doc.html 和手册页。
PS:对不起,这可能更像评论,但我没有必要的50个代表。而且我认为正是你所寻找的。 p>