首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCaml MicroBenchmark

OCaml MicroBenchmark
EN

Stack Overflow用户
提问于 2011-01-17 09:21:45
回答 2查看 434关注 0票数 2

我正在尝试对c和ocaml进行基本的微基准测试比较。我听说对于fibonacci程序,c和ocaml大致相同,但我不能复制这些结果。我用gcc -O3 fier.c -o编译c代码,用ocamlopt -o ocaml-code fibo.ml编译OCaml代码。我使用time ./c-code和time ./ocaml-code来计时。每次我这样做,OCaml都需要0.10秒,而c代码每次大约需要0.10秒。除了这是一个天真的基准之外,有没有办法让ocaml更快?有人能看到他们电脑上的时间吗?

C

代码语言:javascript
复制
#include <stdio.h>

int fibonacci(int n)
{
    return n<3 ? 1 : fibonacci(n-1) + fibonacci(n-2);
}

int main(void)
{
    printf("%d", fibonacci(34));
    return 0;
}

OCaml

代码语言:javascript
复制
let rec fibonacci n = if n < 3 then 1 else fibonacci(n-1) + fibonacci(n-2);;
print_int(fibonacci 34);;
EN

回答 2

Stack Overflow用户

发布于 2011-01-17 14:10:04

当用gcc -O2编译时,ML版本已经超过了C版本,我认为这是一项相当不错的工作。看一下gcc -O3生成的程序集,看起来gcc正在进行一些积极的内联和循环展开。为了让代码更快,我认为你必须重写代码,但你应该专注于更高层次的抽象。

票数 6
EN

Stack Overflow用户

发布于 2011-01-18 13:37:23

我认为这只是ocaml的开销,与更大的程序相比会更相关。

您可以使用-S选项生成程序集输出,还可以使用-verbose查看ocaml如何调用外部应用程序(gcc)。此外,使用-p选项并通过gprof运行您的应用程序将有助于确定这是ocaml的开销,还是您可以实际改进的东西。

干杯。

对于我的计算机,我得到了以下内容,

代码语言:javascript
复制
ocaml - 0.035 (std-dev=0.02; 10 trials)  
    c - 0.027 (std-dev=0.03; 10 trials)  
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4709266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档