5

我们应该如何测量 OCaml 顶层函数的执行时间?

4

3 回答 3

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
于 2014-12-16T18:07:54.107 回答
8
let time f x =
    let t = Sys.time() in
    let fx = f x in
    Printf.printf "execution time: %fs\n" (Sys.time() -. t);
    fx

适用于任何函数,它将打印函数在顶层运行需要多长时间。

于 2014-12-16T17:47:38.000 回答
2

像公认的答案一样使用gettimeofday不是一个好主意,因为它对日历时间操作系统的调整很敏感(例如 via ntp)。

如果您只想要 CPU 时间,那么使用Sys.time就可以了。如果您想要挂钟时间,则应使用单调时间源。一个可用于mtime包中的 OCaml。

于 2017-09-07T06:17:40.207 回答