如何在Haskell中获取程序的运行时间

时间:2011-05-11 18:06:02

标签: haskell time profiling execution measurement

如何在Haskell中通过系统时间函数获取程序的运行时间?我想测量整个程序和/或单个函数的执行时间。

4 个答案:

答案 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)

如果使用ghci,

:set +s非常简洁,否则您可以使用Criterion.Measurement,请参阅my answer to another question with example

答案 3 :(得分:3)

我不确定它有多准确,但在ghci中使用:set +s会显示用于后续计算的时间和空间。