How should we measure the execution time of a function in the OCaml toplevel?
Asked
Active
Viewed 1,423 times
5
-
Possible duplicate of [Running time in Ocaml](https://stackoverflow.com/questions/9061421/running-time-in-ocaml) – Mars Aug 23 '17 at 02:59
3 Answers
11
As @user3075773 says, you can use Sys.time
. However note that it returns processor time (CPU time). More often I want to know the wall clock time (elapsed time). You can get this from 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

Jeffrey Scofield
- 65,646
- 2
- 72
- 108
-
This is a crucial distinction. Thanks for highlighting it. One might want either kind of time, but you definitely don't want to mix them up if they differ. – Mars Sep 07 '17 at 05:41
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
Works with any function, it will print how long did the function take to run in the toplevel.

user3075773
- 139
- 1
- 5
2
Using gettimeofday
like the accepted answer suggests is not a good idea as it is sensitive to calendar time operating system adjustements (e.g. via ntp
).
If you just want CPU time then using Sys.time
is fine. If you want wall-clock time, then a monotonic time source should be used. One is available for OCaml in the mtime package.

Daniel Bünzli
- 5,119
- 20
- 21