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.

Другие вопросы по тегам