Как узнать время затраченное на вычисление в фортране?

olga-grabskaja

нужно сравнить две программы работающих по разным алгоритмам, нужно определить какая из них быстрее работает. Как это можно реализовать в фортране?

Elina74

А какие существуют функции в фортране для получения текущего времени?

olga-grabskaja

Вот я их не знаю

Helga87

Есть такая программа, Intel® VTune™ Performance Analyzer. Так вот она умеет считать какой участок кода сколько времени выполнялся. Когда волнуют вопросы оптимизации - первейший инструмент. Фортран он поддерживает, так что даже по строчкам кода можно будет посмотреть производительность.

Julie16

>Так вот она умеет считать какой участок кода сколько времени выполнялся.
Нет, не умеет.

Helga87

Чо?
А что по твоему она умеет делать?

Julie16

Оно останавливает программу через определенные интервалы и смотрит в какой месте висит программа. Так что отдает оно только вероятностную статистику. Точно считать не умеет. Для точного подсчета надо процессор эмулировать, как например valgrind.

Helga87

Что дальше?
Q: Какую задачу нужно было решить ?
A: Узнать сколько времени будут выполняться две различные функции.
Q: Сможет ли решить эту задачу VTune, с учетом того, что он использует для подсчета вероятностный метод? С какой точностью?
A: Да. С офигенной.
Q: Кто тут флудер?

Julie16

А: ты
Не зная природы задачи(функций) нельзя заранее сказать подойдет ли vtune для профилирования Если они очень короткие, то vtune запросто в них вообще не попадет.

Dasar

> Оно останавливает программу через определенные интервалы и смотрит в какой месте висит программа.
Откуда такая информация?

Julie16

Точно не скажу. Раньше приходилось с ним работать.

Elina74

CPU_TIME
Platform
.NET(including Win32)

Purpose
To get the processor time.

Class
Subroutine.

Syntax
SUBROUTINE CPU_TIME(TIME)
REAL,INTENT(OUT)::TIME

Return value
TIME is a scalar value giving the processor time in seconds. A negative value denotes an error condition.

Example
REAL TIME1, TIME2
CALL CPU_TIME(TIME1)
! Processing...
CALL CPU_TIME(TIME2)
PRINT *, 'Processing time was ', TIME2-TIME1, ' seconds'

Dasar

> Точно не скажу. Раньше приходилось с ним работать.
В одном из обучений-манулов по VTune видел фразы про то, что можно получить в том числе и растактовку по командам, в том числе, и с учетом текущей загрузки кэшей процессора.
Как он тогда эту инфу выцепляет?

Julie16

Хрен знает. Может он уже по всякому умеет?

olga-grabskaja

Спасибо всем! А можно еще ссулку на документацию по Intel Vtune Perf. Monitor?

Elina74

М.б., она внутри программы?

olga-grabskaja

Ладно, буду разбираться.

durka82

Специально для этого есть функция TIMEF
 USE DFPORT
INTEGER i, j
REAL(8) elapsed_time
elapsed_time = TIMEF( )
DO i = 1, 100000
j = j + 1
END DO
elapsed_time = TIMEF( )
PRINT *, elapsed_time
END

ava3443

TIMEF - вроде бы из Digital / Visual / Intel Fortran. То есть не самая портабельная штука: в каком-нибудь GCC, Fujitsu или Lahey её скорее всего не окажется.
CPU_TIME, насколько я знаю, есть во всех компиляторах.

lili197602

В догонку. А что покажет CPU_TIME на двухпроцессорной машине если программа разбита на два потока? И как определить время затраченное на вычисление в этом случае?
Оставить комментарий
Имя или ник:
Комментарий: