【发布时间】:2011-08-23 12:58:59
【问题描述】:
如何通过 Haskell 中的系统时间函数获取程序的运行时间?我想测量整个程序和/或单个函数的执行时间。
【问题讨论】:
标签: haskell time profiling execution measurement
如何通过 Haskell 中的系统时间函数获取程序的运行时间?我想测量整个程序和/或单个函数的执行时间。
【问题讨论】:
标签: haskell time profiling execution measurement
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
它会报告用户、墙和系统时间。
【讨论】:
假设您不只是想测量程序的总运行时间,如下所示:
$ time ./A
然后您可以在 Haskell 中通过多种方式为计算计时:
要获得更可靠的统计测量结果,请考虑
最后,在所有情况下,您都需要考虑惰性评估:您是要衡量完全评估您生成的任何数据的成本,还是仅评估其最外层的构造函数的成本?
【讨论】:
-prof编译并使用+RTS -s怎么样?
:set +s 用 ghci 真的很简洁,否则你可以用Criterion.Measurement,见my answer to another question with example。
【讨论】:
我不确定它有多准确,但是在 ghci 中使用 :set +s 会显示用于后续计算的时间和空间。
【讨论】: