Как узнать время работы программы в Haskell

Как я могу узнать время работы программы с помощью функций системного времени в Haskell? Я хотел бы измерить время выполнения всей программы и / или отдельной функции.


person Community    schedule 11.05.2011    source источник
comment
См. Также stackoverflow.com/questions/1516808/   -  person Don Stewart    schedule 11.05.2011


Ответы (4)


Предполагая, что вы не просто хотите измерить общее время работы вашей программы, например:

 $ time ./A

Затем вы можете рассчитать время вычисления несколькими способами в Haskell:

Для более статистически обоснованного измерения рассмотрите

Наконец, во всех случаях вам нужно подумать о ленивом вычислении: хотите ли вы измерить стоимость полной оценки любых данных, которые вы производите, или просто для их внешнего конструктора?

person Don Stewart    schedule 11.05.2011
comment
А как насчет компиляции с -prof и использования +RTS -s? - person ErikR; 23.03.2014
comment
Компиляция с -prof изменяет характеристики программы. Примечательно, что программа будет работать намного медленнее. - person Thomas M. DuBuisson; 10.09.2014

1) Если вы хотите что-то протестировать, используйте пакет критерий.

2) Если вы хотите синхронизировать функцию и уверены, что при необходимости контролировали лень, просто используйте Data.Time.getCurrentTime из время:

import Data.Time
...
   start <- getCurrentTime
   runOperation
   stop <- getCurrentTime
   print $ diffUTCTime stop start

Более привлекательную упаковку вышеуказанного шаблона можно найти в пакете timeit.

3) Если вам действительно нужно время работы программы, которая просто написана на Haskell, тогда используйте вашу системную time утилиту. Для большинства систем POSIX (Mac, Linux) просто запустите:

$ time ./SomeProgram

И он будет сообщать о времени пользователя, стены и системного времени.

person Thomas M. DuBuisson    schedule 11.05.2011

:set +s действительно здорово, если использовать ghci, иначе вы можете использовать Criterion.Measurement, см. мой ответ на другой вопрос с примером.

person Zane XY    schedule 23.03.2014

Я не уверен, насколько это точно, но использование :set +s в ghci покажет время и пространство, используемые для последующих вычислений.

person Dan Burton    schedule 11.05.2011