OCaml: измерение времени выполнения на верхнем уровне
Как мы должны измерить время выполнения функции на верхнем уровне OCaml?
3 ответа
Как говорит @user3075773, вы можете использовать Sys.time
, Однако обратите внимание, что он возвращает время процессора (время процессора). Чаще всего я хочу знать время настенных часов (прошедшее время). Вы можете получить это от 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
let time f x =
let t = Sys.time() in
let fx = f x in
Printf.printf "execution time: %fs\n" (Sys.time() -. t);
fx
Работает с любой функцией, она выведет, сколько времени потребовалось для запуска функции на верхнем уровне.
С помощью gettimeofday
Как предполагает принятый ответ, это не очень хорошая идея, поскольку она чувствительна к настройкам операционной системы в календарное время (например, через ntp
).
Если вы просто хотите процессорное время, то с помощью Sys.time
Это хорошо. Если вы хотите использовать настенные часы, то следует использовать монотонный источник времени. Один доступен для OCaml в пакете mtime.