■
現在、システムトレードの売買ルールを見つけるため、とりあえずブルートフォースで検証しまくるツール*1をOCamlで動かしているのだけど、検証対象の売買ルールの数が2億8千万を越えているので、自宅の非力マシンではちょっと辛い。
で、いろいろ設計レベルのボトルネックを潰してぼちぼち性能が改善してきたので、今度はソースコードレベルで見直しているのだけど、ちょっと気になったのがOCamlの例外コスト。
適当に試してみた。
#load "unix.cma" exception Hoge let f_e i = if i >= 0 then raise Hoge let test_e n = let rec loop i = if i > 0 then (try f_e i with Hoge -> loop (i - 1)) in loop n let f i = if i >= 0 then () let test n = let rec loop i = if i > 0 then (f i; loop (i - 1)) in loop n let _ = let n = 100_000_000 in let s = Unix.gettimeofday () in test n; let e = Unix.gettimeofday () in Printf.printf "normal : %f\n" (e -. s); let s = Unix.gettimeofday () in test_e n; let e = Unix.gettimeofday () in Printf.printf "exception : %f\n" (e -. s)
で、
komamitsu@potato:~/lab/misc$ ocaml bench_ex.ml normal : 20.562651 exception : 25.250192
と、何回か繰り替えしても同じくらいの差がつく。
まぁ、1億で5秒程度の差であれば毎回発生しても無視できるので気にしないでおくことに。
というか、まずprofとれという話ですな。