Как получить время работы программы в Haskell
Как я могу получить время работы программы через системные функции времени в Haskell? Я хотел бы измерить время выполнения всей программы и / или отдельной функции.
4 ответов
предполагая, что вы не просто хотите измерить общее время работы вашей программы, например:
$ time ./A
тогда вы можете вычислить время несколькими способами в Haskell:
- основные сроки (например, в пакет timeit)
- времени в циклах
для более статистически ядрового измерения, рассматривайте
наконец, во всех случаях вам нужно подумать о ленивой оценке: вы хотите измерить стоимость полной оценки любых данных, которые вы производите, или просто к его внешнему конструктору?
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 покажет время и пространство, используемые для последующих вычислений.