Nexus SとNexus oneリフレクション性能比較

Nexus Sは周波数1GHzの Cortex-A8 (Hummingbird)というプロセッサを搭載しており、これはCPUコアだけを見るとApple A4プロセッサ※と同等品だと言われている。(Apple社が買収したIntrinsity社が2009年にSAMSUNGとともに開発したプロセッサがHummingbirdだ)

去年の4月にApple A4プロセッサと、当時市販されているスマートフォンに搭載されているものとしては最強だったNexus oneのプロセッサであるQualcomm QSD8250 (Snapdragon)の性能比較をAnandtechが実施している。
Apple's iPad A4 SoC: Faster than the Nexus One's Snapdragon? - AnandTech

これによればHummingbirdは同じ周波数のSnapdragonに比べて1〜3割程性能が高いようだが、同プロセッサを搭載したSAMSUNGのGALAXYシリーズ(S,Tab等がそうだ)は実際ネット上でも概ねNexus oneよりも良いベンチマーク結果を出している。(但し/dataの遅延が解消されていること) しかし、これは同チップと共に採用されているGPUであるPowerVRの力も大きいだろう。(よくベンチマークに使われるQuadrantにも2Dと3Dのグラフィクス性能の項目がある) プロセッサ単体で考えるとどれだけの差があるのだろうか。

以前に日記でリフレクションが性能に与える影響を計測するために、幾つかのテストをNexus one上で実施したことがある。

[Android][SDK]Androidとリフレクションについて

これと同様のテストをHummingbirdを搭載した、それもAndroid 2.3がインストールされているNexus Sで実行したらどうなるだろう。このテストでは特段負荷の高い処理もなく、単に命令を繰り返し実行しているだけなので、実際の感覚に近いのではないだろうか。

※正確にはSoC(System-on-a-chip)であり複合LSIだが、面倒なので全てプロセッサと称している。

なのでやってみた。(テストの内容自体は以前のエントリで書いたのと全く同じなので割愛する)
参考のためAndroid 2.3 SDKエミュレータによるテスト結果も掲載する。

タスク (android:vmSafeMode="false") Emulator Nexus S Nexus one
メソッド呼出し 94 msec 20 msec 37 msec
フィールドアクセス 91 msec 19 msec 27 msec
リフレクション-メソッド(検索時間含まず) 2921 msec 636 msec 488 msec
リフレクション-メソッド(検索時間含む) 10110 msec 2319 msec 2000 msec
リフレクション-フィールド(検索時間含まず) 706 msec 152 msec 164 msec
リフレクション-フィールド(検索時間含む) 3630 msec 846 msec 703 msec

実行環境

Google Nexus S
  CPU      Cortex A8 (Hummingbird) 1GHz (SamsungElectronics S5PC110?)
  RAM/Nand 512MB/16GB
  OS       Android 2.3.1 build GRH78 

・Google   Nexus one
  CPU      Qualcomm® QSD8250™ 1GHz
  RAM/Nand 512MB/512MB
  OS       Android 2.2 build FRF91 

・Android 2.3 Emulator
  CPU      Intel® Xeon™ X5450 3.0Ghz (×2)
  MEM      4GB
  OS       Windows® Vista™ with service pack 2/Android SDK 2.3 build GRH55
  Java     Java™SE1.6 build 1.6.0_20-b02


予想はしていたが、興味深い結果がでた。
 - 単純な命令実行性能はわずかにNexus Sが上回る
 -「メソッド呼出し〜」についてはNexus oneのほうが結果が良い

同一のアーキテクチャと周波数、命令の呼出しが繰り返されるだけの処理、この辺においてはプロセッサが周波数が同じなこともあり、あまり差が出ないのだろう。また、だからといってNexus SとNexus oneが同等の性能であるとはいえないのが面白い所。実際に使ってみれば分かるが何をしても明らかにNexus Sのほうがキビキビと速く動作するのがはっきりと分かる。
Quadrantの結果を裏付けるようだが、特に通信時やActivityの切替時に顕著であり、I/Oとグラフィクスの性能にはかなりの開きがあることが分かる。

ならばNexus S + Gingerbreadにおいて却って性能が低下しているテストに関してはどう説明するのだろう。
これに関しては追試が必要だが、以下が推測される。

    • チューニング不足

 Nexus SとGingerbreadは共にリリースされてからまだ日が浅く、性能を出しきれていないかもしれない。

    • Gingerbread固有の問題

 Gingerbreadで実装された並列GC(コンカレントGC)によりベンチマークテストのような比較的長期の実行性能が劣化したかもしれない。(GC戦略として長期的な性能よりもその場の応答性能を重視しているのではないかと)

並列GCに関してはGingerbreadから実装されたフィーチャーであり、この辺も含めてNexus oneにGingerbreadのOTAが来た時にでも追試してみようと思う。また、並列GCに関しては常時GCスレッドが動いているはずであり、そうなると今後主流になるであろう複数コアのプロセッサを使用した場合には結果がまた違ってくることだろう。