Haskell,测量函数的CPU时间

时间:2011-03-21 14:46:22

标签: haskell lazy-evaluation

我需要测量以下函数的CPU时间:

t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t

问题来自Haskell的懒惰。必须严格评估callTheFunction。我搜索了很多,并尝试使用seq和$!但没有成功。我认为这应该是一项非常普遍的任务。无论如何,我需要一些帮助。感谢。

更新 感谢所有的帮助,特别是@FUZxxl。它让我想起WHNF(弱头普通形式)和普通形式之间的区别。 Haskell/Laziness 帮助理解Haskell的懒惰评估。

我需要的是再做一步评估。无论如何$!只要Res:

只需要WHNF,就可以评估两种作品
t <- getCPUTime
res <- callTheFunction input
evaluate res  OR  return $! res
t' <- getCPUTime
print $ t' - t

3 个答案:

答案 0 :(得分:8)

如果您是基准测试,则应使用Criterion。否则,请使用NFData(rnf)和bang patterns强制进行评估。

答案 1 :(得分:7)

使用evaluate :: a -> IO a中的Control.Exception功能。当执行相应的IO动作时,它会评估其对WHNF的参数。你必须确保WHNF足以满足你的功能。

答案 2 :(得分:4)

如果您正在尝试做基准测试,请使用Hackage上的优秀标准库。