Android Dev Phone 1 届いたので、iPhoneと比較ベンチマーク取った

Android 初の、開発用実機 Dev Phone 1 が入手できました。Twitter上でAndroid遅い遅い話しが出てたりしたので、早速ベンチマークを取ってみました。lucilleのsyoyoさん作のAO benchというGIレンダラのbenchmarkです。なぜAO benchかというと、syoyoさんご自身が、Proce55ing, AS3, iPhone, NativeClientに移植されていて、それぞれの値が出ているため比較が容易かなと思ったからです。これは浮動小数点演算がメインのベンチマークとなります。

今回は、syoyoさんオリジナルのAS3のコードを、Javaに移植して、表示用に少々Android用のコードを書きました。

今回使ったコードはgithubに置いておきました。こちらから:
http://github.com/takuma104/androidaobench/tree/master

ベンチマーク結果は

  • Android Dev Phone 1実機 (dalvikvm) : 1924秒 (32分ぐらい) 2966秒(49分ぐらい)
  • iPhone実機 (C/非thumbモード):38秒

※ConfigはiPhoneに合せて、256x256です。

というように、かなりの差(50倍! 78倍!)となりました。Androidのほうは、まだ実機単体で動かす手段が分らなかったため、Macに繋いだ状態で行っています。(いちおうreleaseモード) 参考までに、Core2Duo 2GHzのMacでJVM1.5でUIなしでbenchだけ実行すると、7秒程度、syoyoさんによるとC実装でC2Dで2,3秒程度の演算のようです。

1つ気付いた点としては、ベンチを取っている間、ずっと dalvikvm の GC 動いてるよメッセージが秒間2回ぐらい出続けるということです。こんな感じで。

12-16 19:38:45.937: DEBUG/dalvikvm(4813): GC freed 14305 objects / 524304 bytes in 99ms

これによると99msの間、時よ止れ状態ということだと思うので、1秒間に200msこれに取られるとすると、まず8割ぐらいの性能しか出てないんじゃないかと。あとはどうもこのdalvikvmはJITではないという話も聞いたので、その辺も関連しているのかもしれません。もし詳しい事を御存じの方いらっしゃったらコメントいただければ幸いです。その他やりかたがマズいなど、ツッコミ歓迎です。

今回のベンチは、あくまでCPUでの演算が過剰に多いアプリにしか適用されないと思いますが、それでもiPhoneと比較するとやっぱり重めになってしまいそうです。Android開発する場合、現時点では、その辺も考慮したアプリデザインにする必要があるのかなと思いました。

(追記) 初出のコードでバグがありました>< ので、結果を修正しました。すでにgithubの方には、修正版が上っています。