Android 5.0(ART)はDalvikより約1.5倍速い--Nexus 7 (2012)にてバブルソートでベンチマーク

更新:2014年12月1日 作成:2014年11月19日


AndroidタブレットNexus 7(2012年モデル)のOSを、Android 4.4.4 (Dalvik)からAndroid 5.0 (ART)に入れ替えたところ、バブルソートのベンチマークを約1.5倍のスループットで処理できることが分かった。OSとしての実力が大幅に向上した印象だ。

バブルソートアプリ

バブルソートアプリは、タブレットやスマホの中で、整数配列のバブルソートによる並べ替えという、重い処理を実行し、その所要時間を表示するプログラムだ。

Android 5.0と、それ以前のバージョンの、処理速度を比較するために用意したものだ。

バブルソートの処理はJava言語で書かれているので、AndroidのOSが持っている「Dalvik」や「ART」と呼ばれる実行環境により実行される。

Android 5.0では「ART」、Android 4.4.4では「Dalvik」が実行環境なので、OSを変えてバブルソートアプリを実行すれば、それぞれの実行環境の性能を比較できる。

バブルソートアプリについて、ソースコードをはじめとした、Eclipseのプロジェクト(Test007.tar.bz2)(ライセンスはGNU CPL2)を用意したので、持ち帰って確認してみるのもよいだろう。なお、アプリケーションはAndroid 4.0以上で実行することを前提としている。

ちなみに、重い処理を行うアプリなので、スマホやタブレットが発火炎上して、家が全焼するなどのリスクがあるかもしれないが、作者は何の保証もしない。その旨了解いただける場合に限り、ダウンロードされたい。(普段使っているスマホやタブレットで実行するのはやめましょう。実験専用の端末が必要です。)

Android 4.4.4とAndroid 5.0で実行した結果

まず、Dalvikの実行環境を持つAndroid 4.4.4で、20万個の整数を並べ替えた結果がこちらだ。約656秒を要した。

Dalvikでの実行結果
図:Android 4.4.4(Dalvik)での実行結果

次に、ARTの実行環境を持つAndroid 5.0で、同じく20万個の整数を並べ替えた結果がこちらだ。約425秒を要した。

ARTでの実行結果
図:Android 5.0(ART)での実行結果

かかった時間を比較すれば、Android 5.0のほうが35%短い。

見方を変えて、単位時間あたりに処理できる量として見れば、Android 5.0のほうが54%スループットが大きい。

速度は、スループットとして表現するのが自然なので、処理速度が約50%向上したと理解してよさそうだ。

Nexus 7 (2012)は、発売から2年経過した端末だが、今になって大幅な性能向上をゲットできたことになる。

なぜこんなに速くなったのか

Androidで、OSを変えるだけで処理速度が大きく向上する理由としては、アプリがJavaで作られていることがある。

Javaで書かれた処理は、CPUが直接実行できない。タブレットのCPUで実行するためには、インタプリタを用意するか、あらかじめプログラムをコンパイルしてCPUで解釈できるように変換する必要がある。

Android 4.4.4までのDalvikでは、必要に応じてインタプリタのように実行したり、CPUが直接実行できるコードに変換したりして、アプリを処理していた。単純に実行するだけではないので、何かと遅かったらしい。

これが、Android 5.0になると、最初にアプリをCPUが直接実行できるコードに変換してから、実際の処理を開始するように変わった。CPUは、アプリの実行中は、本来の処理だけに集中でき、インタプリタやコンパイラの処理を行わずにすむので、速いようだ。

Android 5.0とそれ以前の比較
図:Android 5.0(ART)とAndroid 4.4(Dalvik)の違い(模式図:実際はARTもDalvikで図示したような動作ができる)

絵に書くと、Android 5.0は、アプリを実行する前に、あらかじめフライングのように、プログラムをCPUが直接実行できるように変換している。

そのおかげで、アプリを実行するときに、難しい処理をする必要がなくなっている。

意外なことに、Android 5.0のほうが、考え方がシンプルになっている。実行する前にプログラムをコンパイルして準備し、いざ実行するときは実行だけに集中するという、自然な考え方になっているからだ。

そもそも、Javaの処理系が実行とコンパイルを並行して行うように発展してきたのは、インターネットに置かれたJavaのプログラムを、その場で入手しつつ実行するような使い方を意図していたので、実行前のコンパイルにあまり時間をかけたくなかったから、という面がある。

Androidのアプリは、いったんインストールが終われば、同じアプリを何度も繰り返し使うので、例えばインストール時などに、最初に1回だけコンパイルを行えば、あとは常に高速に実行できるようになる。

実に、シンプルな考え方だが、きちんと実行に移して、結果を出せる人やグループは、限られているようである。

ちなみに、Android 5.0で導入されたARTは、事前にコンパイルして実行する以外に、これまで通りの「ジャストインタイム」「インタプリタ」としての動作もできるようになっているそうだ。

Android 5.0にアップデートしてからも、アプリを起動した最初の一回はひどくひっかかりを感じるが、使うにつれてラグを感じにくくなるような現象を多く見ているので、実行しながらコンパイルしている様子が、あるようだ。この点では、Dalvikと共通する面もあるのかもしれない。


トップページなにげなく自由研究(もくじ) → Android 5.0(ART)はDalvikより約1.5倍速い--Nexus 7 (2012)にてバブルソートでベンチマーク
著者のメールアドレス・Twitterアカウントは、トップページからご覧ください。

製作・著作:杉原 俊雄(すぎはら としお)
(c)2014 Sugihara Toshio. All rights reserved.