Haskell,测量函数的CPU时间
我需要测量函数的CPU时间,如下所示:Haskell,测量函数的CPU时间,haskell,lazy-evaluation,Haskell,Lazy Evaluation,我需要测量函数的CPU时间,如下所示: t <- getCPUTime res <- callTheFunction input t' <- getCPUTime print $ t' - t t使用Control.Exception中的函数evaluate::a->IO a。当执行相应的IO操作时,它将其参数求值为WHNF。但是,您必须确保WHNF足以满足您的功能。如果您尝试进行基准测试,请使用优秀的标准库,该库位于Hackage上。如果您正在进行基准测试,则应使用。否则使
t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t
t使用Control.Exception
中的函数evaluate::a->IO a
。当执行相应的IO操作时,它将其参数求值为WHNF。但是,您必须确保WHNF足以满足您的功能。如果您尝试进行基准测试,请使用优秀的标准库,该库位于Hackage上。如果您正在进行基准测试,则应使用。否则使用(rnf)并强制求值。问题是,特别是在IO上下文中,seq
和rnf
通常不够强大,无法将表达式求值到所需的级别。@fuzzxl我不清楚您的意思。如果您在任何时候(IO操作之前或之后)有一个类型为NFData=>a
的值,那么bang模式和rnf
就足够了(在许多情况下肯定比WHNF好)。这根本不能解决您的严格性问题(使用evaluate进行评估),但用于快速而肮脏的计时(即比标准简单)您可以只使用timeIt包:注意WHNF通常是不够的。例如,列表的WHNF只是第一个缺点。您可以将评估和强制执行相结合。
t <- getCPUTime
res <- callTheFunction input
evaluate res OR return $! res
t' <- getCPUTime
print $ t' - t