распечатать общее время выполнения (настенные часы) с помощью команды dtime или time? - PullRequest
1 голос
/ 05 марта 2012

Я пытаюсь оценить производительность модели с помощью ifort, однако распечатка не отображается должным образом.

Вот мой код. Пожалуйста, покажи мне, как выполнить это задание.

! Time the run

      call dtime(timearray, telapse)

! End of the simulation

      call dtime(timearray, telapse)
      call print_runtime(telapse, ctime)

      subroutine print_runtime(telapse, ctime)

      implicit none
      real*4    telapse 
      character*8 ctime(2)
      integer*2 RunDays,
     >          RunHours,
     >          RunMins,
     >          RunSecs
      character*40 msgstr, rtfname 
      parameter (msgstr = ' *** Total run time (wallclock) was ')
      parameter (rtfname = 'runtime.txt')

! Now convert telapse from seconds to DD HH:MM:SS

      RunDays  = INT (telapse / 86400.0)
      telapse  = telapse - (RunDays * 86400.0)
      RunHours = INT (telapse / 3600.0)
      telapse  = telapse - (RunHours * 3600.0)
      RunMins  = INT (telapse / 60.0)
      RunSecs  = NINT (telapse - (RunMins * 60.0))

      if (RunDays  .GT. 0) then
          write (*,1) msgstr, RunDays, RunHours, RunMins, RunSecs
 1        format (A36, I2, 'days, ', I2.2, ':', I2.2, ':', I2.2, ' hh:mm:ss ***')

      else if (RunHours .GT. 0) then
          write (*,2) msgstr, RunHours, RunMins, RunSecs
 2        format (A36, I2, ':', I2.2, ':', I2.2, ' hh:mm:ss ***') 

      else if (RunMins .GT. 0) then
          write (*,3) msgstr, RunMins, RunSecs
 3        format (A36, I2, ':', I2.2, ' mm:ss ***') 

      else
          write (*,4) msgstr, telapse
 4        format (A36, F7.4, ' seconds ***') 

      endif
      return
      end 

В настоящее время моя распечатка показывает "*** Total run time (wallclock) was ******* seconds ***" Как отобразить правильное общее время выполнения (настенные часы) здесь? Благодарю. Майкл

1 Ответ

5 голосов
/ 05 марта 2012

Следующий фрагмент кода показывает, как вывести истекшее время настенных часов в секундах.Это отличается от потребляемого процессорного времени и не может быть хорошим показателем производительности кода.DTIME - это время выполнения, а не время настенных часов, а также расширение.Если вы хотите cpu rutime, языковой стандарт предоставляет cpu_time.Ваш код для преобразования из секунд выглядит хорошо.

integer :: clck_counts_beg, clck_counts_end, clck_rate
call system_clock ( clck_counts_beg, clck_rate )
your code
call system_clock ( clck_counts_end, clck_rate )
write (*, *)  (clck_counts_end - clck_counts_beg) / real (clck_rate)

Пример времени процессора, также в секундах

real ::  beg_cpu_time, end_cpu_time
call cpu_time (beg_cpu_time)
your code
call cpu_time (end_cpu_time)
write (*, *) end_cpu_time - beg_cpu_time
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...