Watson's Blog

Benchmark Result

| Comments

昨日は、ベンチマーク用ライブラリ を作ったので、RubyMotion のパフォーマンスと、Objective-C のパフォーマンスをそれぞれ計測してみました。

RubyMotion の計測に使用したものは、昨日 Github にアップロードしたフィボナッチ数列を求めるものをそのまま利用しました。

Objective-C で利用したコードは、1 つは以下のような C 言語の関数で用意しました。

1
2
3
4
5
6
int fib(int n)
{
    if (n <= 0) return 0;
    if (n == 1) return 1;
    return fib(n - 2) + fib(n - 1);
}

2 つ目には、

1
2
3
4
5
6
7
8
9
10
@implementation Fib

+ (int)calc:(int)n
{
    if (n <= 0) return 0;
    if (n == 1) return 1;
    return [self calc:(n - 2)] + [self calc:(n - 1)];
}

@end

とクラスを用意してメッセージを送信する形式にしました。Ruby ではメソッドはクラスやモジュールに属しメッセージ送信が行われるので、Objective-C でもクラスを用意しないとアンフェアですよね。

計測する部分のコードは、

1
2
3
4
5
6
7
Bench *bench = [[Bench alloc] init];
void (^func)() = ^(){
    [Fib calc:34];
    //fib(34);
};
bench.bm = func;
[bench exec];

と昨日作成したライブラリを活用してみました。

結果は (シミュレータ上でしか試していません)、

Result (sec)
Objective-C 関数0.100919
Objective-C クラス0.203850
RubyMotion0.205876

(3回ずつ計測して最小値をピックアップしただけです)

フィボナッチ数列を求める場合では、RubyMotion は Objective-C のクラスでメッセージ送信を行うものとほぼ差が無いことがわかりました。

MacRuby では遅いと叩かれ続けている文字列処理のパフォーマンスなども計測してみるとおもしろいかもしれない。

Comments