Как получить время работы программы в Haskell

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

4 ответов


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

 $ time ./A

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

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

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


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

и он сообщит о пользователе, стене и системном времени.


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


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