Haskell,测量函数的CPU时间
我需要测量如下函数的CPU时间:
t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t
问题来自Haskell的懒惰。 callTheFunction必须严格评估。 我搜索了很多,并尝试使用seq和$! 但没有成功。 我认为这应该是一个相当普遍的任务。 无论如何,我需要一些帮助。 谢谢。
更新:感谢所有帮助,特别是@FUZxxl。 它让我想起了WHNF(弱首标准形式)和正常形式之间的区别。 Haskell / Laziness有助于理解Haskell的懒惰评估。
我需要的是多一步评估。 无论如何$! 或评估这两个作品,只要WHNF需要res:
t <- getCPUTime
res <- callTheFunction input
evaluate res OR return $! res
t' <- getCPUTime
print $ t' - t
使用Control.Exception
的函数evaluate :: a -> IO a
。 当相应的IO动作被执行时,它将它的参数评估为WHNF。 你必须确保WHNF对于你的功能来说是足够的。
如果你是基准测试,那么你应该使用标准。 否则使用NFData(rnf)和爆炸模式来强制评估。
如果您正在尝试做基准测试,请使用Hackage上的优秀标准库。
链接地址: http://www.djcxy.com/p/7437.html