如何在Haskell中通过系统时间函数获取程序的运行时间?我想测量整个程序和/或单个函数的执行时间。
答案 0 :(得分:20)
1)如果您想要对某些内容进行基准测试,请使用criterion包。
2)如果你想对某个功能进行计时,并且你已经根据需要控制了懒惰,那么只需使用time包中的Data.Time.getCurrentTime
。:
import Data.Time
...
start <- getCurrentTime
runOperation
stop <- getCurrentTime
print $ diffUTCTime stop start
可以在timeit包中找到上述模式的光滑包装。
3)如果您确实希望恰好在Haskell中编写的程序的运行时间,请使用您的系统time
实用程序。对于大多数POSIX系统(Mac,Linux),只需运行:
$ time ./SomeProgram
它将报告用户,墙壁和系统时间。
答案 1 :(得分:10)
假设您不只是想测量程序的总运行时间,例如:
$ time ./A
然后你可以在Haskell中计算多种方法:
对于更具统计学意义的测量,请考虑
最后,在所有情况下,您需要考虑延迟评估:您是否想要衡量完全评估您生成的数据的成本,还是仅仅考虑其最外层的构造函数?
答案 2 :(得分:4)
:set +s
非常简洁,否则您可以使用Criterion.Measurement
,请参阅my answer to another question with example。
答案 3 :(得分:3)
我不确定它有多准确,但在ghci中使用:set +s
会显示用于后续计算的时间和空间。