12

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

4

4 回答 4

22

1)如果你想对某些东西进行基准测试,请使用标准包。

2)如果你想为一个函数计时并且是积极的,你已经根据需要控制了懒惰,那么只需Data.Time.getCurrentTimetime包中使用。:

import Data.Time
...
   start <- getCurrentTime
   runOperation
   stop <- getCurrentTime
   print $ diffUTCTime stop start

在timeit包中可以找到上述模式的更光滑的包装。

3) 如果您真的想要恰好用 Haskell 编写的程序time的运行时间,请使用您的系统实用程序。对于大多数 POSIX 系统(Mac、Linux),只需运行:

$ time ./SomeProgram

它会报告用户、墙和系统时间。

于 2011-05-11T18:13:54.517 回答
12

假设您不只是想测量程序的总运行时间,如下所示:

 $ time ./A

然后,您可以在 Haskell 中通过多种方式为计算计时:

对于统计上更合理的测量,请考虑

最后,在所有情况下,您都需要考虑惰性评估:您是要衡量完全评估您生成的任何数据的成本,还是仅评估其最外层构造函数的成本?

于 2011-05-11T18:13:48.747 回答
6

:set +s如果使用 ghci 真的很整洁,否则您可以使用Criterion.Measurement,请参阅我对另一个问题的回答示例

于 2014-03-23T07:02:50.343 回答
4

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

于 2011-05-11T19:22:18.443 回答