我写了一个 Fortran 95 代码并用 gfortran 编译它。我使用了 gprof,发现它给出的时间明显少于 CPU 时间。gprof 告诉我所有函数使用的时间是 15.77 秒。然而,经过的 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 显示这方面的分析结果。但是我将来需要成千上万个这样的循环。
谢谢