Как узнать время затраченное на вычисление в фортране?
А какие существуют функции в фортране для получения текущего времени?
Вот я их не знаю
Есть такая программа, Intel® VTune™ Performance Analyzer. Так вот она умеет считать какой участок кода сколько времени выполнялся. Когда волнуют вопросы оптимизации - первейший инструмент. Фортран он поддерживает, так что даже по строчкам кода можно будет посмотреть производительность.
Нет, не умеет.
А что по твоему она умеет делать?
Оно останавливает программу через определенные интервалы и смотрит в какой месте висит программа. Так что отдает оно только вероятностную статистику. Точно считать не умеет. Для точного подсчета надо процессор эмулировать, как например valgrind.
Q: Какую задачу нужно было решить ?
A: Узнать сколько времени будут выполняться две различные функции.
Q: Сможет ли решить эту задачу VTune, с учетом того, что он использует для подсчета вероятностный метод? С какой точностью?
A: Да. С офигенной.
Q: Кто тут флудер?
Не зная природы задачи(функций) нельзя заранее сказать подойдет ли vtune для профилирования Если они очень короткие, то vtune запросто в них вообще не попадет.
Откуда такая информация?
Точно не скажу. Раньше приходилось с ним работать.
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'
В одном из обучений-манулов по VTune видел фразы про то, что можно получить в том числе и растактовку по командам, в том числе, и с учетом текущей загрузки кэшей процессора.
Как он тогда эту инфу выцепляет?
Хрен знает. Может он уже по всякому умеет?
Спасибо всем! А можно еще ссулку на документацию по Intel Vtune Perf. Monitor?
М.б., она внутри программы?
Ладно, буду разбираться.
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
CPU_TIME, насколько я знаю, есть во всех компиляторах.
В догонку. А что покажет CPU_TIME на двухпроцессорной машине если программа разбита на два потока? И как определить время затраченное на вычисление в этом случае?
Оставить комментарий
olga-grabskaja
нужно сравнить две программы работающих по разным алгоритмам, нужно определить какая из них быстрее работает. Как это можно реализовать в фортране?