Как я могу узнать время работы программы с помощью функций системного времени в Haskell? Я хотел бы измерить время выполнения всей программы и / или отдельной функции.
Как узнать время работы программы в Haskell
Ответы (4)
Предполагая, что вы не просто хотите измерить общее время работы вашей программы, например:
$ time ./A
Затем вы можете рассчитать время вычисления несколькими способами в Haskell:
- Базовое время (например, как в пакет timeit)
- Время в циклах
Для более статистически обоснованного измерения рассмотрите
Наконец, во всех случаях вам нужно подумать о ленивом вычислении: хотите ли вы измерить стоимость полной оценки любых данных, которые вы производите, или просто для их внешнего конструктора?
-prof
и использования +RTS -s
?
- person ErikR; 23.03.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
И он будет сообщать о времени пользователя, стены и системного времени.
:set +s
действительно здорово, если использовать ghci, иначе вы можете использовать Criterion.Measurement
, см. мой ответ на другой вопрос с примером.
Я не уверен, насколько это точно, но использование :set +s
в ghci покажет время и пространство, используемые для последующих вычислений.