OCaml微基准
我正在尝试c和ocaml的基本微基准比较。我听说对于fibonacci程序,c和ocaml大致相同,但我无法复制这些结果。我使用gcc-O3 fib.c-o c-code编译c代码,并使用ocamlopt-o OCaml代码fibo.ml编译OCaml代码。我使用时间计时。/c代码和时间。/ocaml代码。每次执行此操作时,OCaml需要0.10秒,而c代码每次大约需要0.03秒。除了这是一个幼稚的基准之外,还有什么方法可以让ocaml更快呢?有人能看到他们电脑上的时间吗 COCaml微基准,c,benchmarking,ocaml,C,Benchmarking,Ocaml,我正在尝试c和ocaml的基本微基准比较。我听说对于fibonacci程序,c和ocaml大致相同,但我无法复制这些结果。我使用gcc-O3 fib.c-o c-code编译c代码,并使用ocamlopt-o OCaml代码fibo.ml编译OCaml代码。我使用时间计时。/c代码和时间。/ocaml代码。每次执行此操作时,OCaml需要0.10秒,而c代码每次大约需要0.03秒。除了这是一个幼稚的基准之外,还有什么方法可以让ocaml更快呢?有人能看到他们电脑上的时间吗 C #包括 整数斐波那
#包括
整数斐波那契(整数n)
{
return n当使用gcc-O2
编译时,ML版本已经超过了C版本,我认为这是一项相当不错的工作。查看由gcc-O3
生成的程序集,它看起来像是在做一些积极的内联和循环展开。为了使代码更快,我认为您必须重写代码,但是您应该关注更高级别的抽象。我认为这只是ocaml的一个开销,与更大的程序相比,它更相关
您可以使用-S
选项生成程序集输出,以及-verbose
查看ocaml如何调用外部应用程序(gcc
)。此外,使用-p
选项并通过gprof
运行应用程序将有助于确定这是来自ocaml
的开销,还是您可以实际改进的开销
干杯
对于我的电脑,我得到以下信息:
ocaml - 0.035 (std-dev=0.02; 10 trials)
c - 0.027 (std-dev=0.03; 10 trials)
你看过了吗?它包括ocaml的详细测试结果,以及测试代码的链接。是的,我看过了。我运行的C代码大约是.05秒,而ocaml代码是.15秒。
let rec fibonacci n = if n < 3 then 1 else fibonacci(n-1) + fibonacci(n-2);;
print_int(fibonacci 34);;
ocaml - 0.035 (std-dev=0.02; 10 trials)
c - 0.027 (std-dev=0.03; 10 trials)