Как узнать время выполнения программы на Хаскеле - PullRequest
9 голосов
/ 11 мая 2011

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

Ответы [ 4 ]

20 голосов
/ 11 мая 2011

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

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

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

$ time ./SomeProgram

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

10 голосов
/ 11 мая 2011

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

 $ time ./A

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

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

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

4 голосов
/ 23 марта 2014

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

3 голосов
/ 11 мая 2011

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

...