Как измерить время выполнения функции в OCaml toplevel?OCaml: измерять время выполнения в верхнем углу
ответ
Как @ 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
Это важное различие. Спасибо, что выделили его. Может потребоваться любой вид времени, но вы определенно не хотите смешивать их, если они отличаются. – Mars
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.
Возможный дубликат [Время работы в Ocaml] (https://stackoverflow.com/questions/9061421/running-time-in-ocaml) – Mars