首页 > 解决方案 > 在 Fortran 中获得准确的运行时间

问题描述

我需要设置现有的 Fortran 代码以在时间限制(即 24 小时周期)内运行。我正在尝试实现一个简单的运行时计时,它测量代码正在运行的“真实生活”时间(不是 CPU 时间)并执行正确的保存和终止例程。由于这种检查经常发生,我不想真正得到一整天的时间并从中计算总小时/分钟。我更喜欢一些CPU_TIME()简单的东西(Current-Start)/3600(我真的只需要几个小时的分辨率)。

我实际上尝试CPU_TIME()以最简单的方式实现它,它似乎工作时间很短,但显然随着时间的增加,有一个“漂移”,我最终运行的时间比实际时间限制略多,这会终止我的代码而不保存一个“检查点”。除了尝试设置小时数的下限以尝试解释“漂移”之外,是否有更精确但更简单的实现可以在几分钟内获得正确的运行时间?

编辑:我也尝试过使用system_clock,但是这个例程的实际时间和输出时间完全关闭了......我做错了什么?

INTEGER :: scount,  & ! Starting "time"
           ecount,  & ! Ending "time"
           rate       ! number of clock ticks per second

call system_clock(scount,rate)
...
<CODE>
...
call system_clock(ecount)
timer_elapsed_time = real(ecount-scount,8)/real(rate,8)
write(*,*) "Calculated run time is ",timer_elapsed_time *3600," hours"

解决方案:时钟频率在某些情况下可以real和不可以integer,比如我的情况。

标签: fortranbenchmarking

解决方案


发布的代码使用整数来获取系统的时钟速率。 system_clock也可以使用实变量调用以返回速率。我的怀疑,现在通过交换意见得到证实,是整数是时钟速率的不准确表示,从而解释了使用system_clock.

OP 报告通过使用时钟速率的实变量来解决问题。


推荐阅读