我们应该如何衡量OCaml toplevel中函数的执行时间?
答案 0 :(得分:11)
正如@ user3075773所说,您可以使用Sys.time
。但请注意,它会返回处理器时间(CPU时间)。我经常想知道挂钟时间(经过时间)。您可以从Unix.gettimeofday
:
let time f x =
let t = Unix.gettimeofday () in
let fx = f x in
Printf.printf "execution elapsed time: %f sec\n"
(Unix.gettimeofday () -. t);
fx
答案 1 :(得分:7)
let time f x =
let t = Sys.time() in
let fx = f x in
Printf.printf "execution time: %fs\n" (Sys.time() -. t);
fx
使用任何函数,它将打印函数在顶层运行多长时间。
答案 2 :(得分:1)
使用gettimeofday
就像接受的答案所示,这不是一个好主意,因为它对日历时间操作系统调整很敏感(例如通过ntp
)。
如果您只想要CPU时间,那么使用Sys.time
就可以了。如果你想要挂钟时间,那么应该使用单调时间源。一个可用于mtime包中的OCaml。