Мне необходимо настроить существующий код на Фортране для запуска с ограничением по времени (т.е. 24-часовые циклы).Я пытаюсь реализовать простую синхронизацию во время выполнения, которая измеряет «реальное» время (а не время процессора), в котором выполнялся код, и выполняет надлежащую процедуру сохранения и завершения.Так как эта проверка происходит очень часто, я не хочу фактически получать весь дневной период и рассчитывать общее количество часов / минут из этого.Я бы предпочел что-то в строках 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
в некоторых случаях, например, в моем случае.