OCamlでプロファイリング

30分プログラム、その585。OCamlのプロファラを試してみよう。

マニュアル曰く、実行したときに何回関数が呼ばれたか、何回条件分岐が行なわれたかを記録できるらしい。どうも、各関数に何秒かかったか、などの情報は取れないらしい。

1.コンパイル

とりあえず、適当なコードを書く。

let rec fact =
  function
      0 -> 1
    | n -> n * fact (n - 1)

let _ =
  Printf.printf "%d\n" (fact 10)

ocamlcpでコンパイル

$ ls
fact.ml

$ ocamlcp -o fact fact.ml

# factができてる
$ ls
fact*  fact.cmi  fact.cmo  fact.ml

2.実行

普通に実行する。

$ ./fact
3628800

すると、ocamlprof.dumpができてる。

$ ls
fact*  fact.cmi  fact.cmo  fact.ml  ocamlprof.dump

3.表示

最後に、ocamlprofで結果を表示してやる。

$ ocamlprof fact.ml
let rec fact =
  function
      0 -> (* 1 *) 1
    | n -> (* 10 *) n * fact (n - 1)

let _ =
  Printf.printf "%d\n" (fact 10)