Dalvikアクセラレータ:Android端末におけるJavaアプリケーションの高速実行機構

 
太田 淳
(株)日立情報通信エンジニアリング

[背景]多様な用途でのAndroidの拡大
[問題]実行基盤であるDalvik VMの実行性能
[貢献]プロセッサで中間コードを高効率に直接実行


 Androidはその用途を広め,スマートフォン,タブレットに限らないさまざまな用途に用いられている.アプリケーションは中間コードであるDalvikバイトコードで構成し,独自のレジスタベースな仮想機械Dalvik VMの上で実行される.プロセッサアーキテクチャの依存を吸収する一方で,Dalvik VMの実行性能には課題があり,これまでAndroid 2.2にてJIT(Just in Time)コンパイル,2.3にてコンカレントGCと実行性能,応答性を向上する手法が組み込まれてきた.一方で,ゲーム等高い性能,応答性を求めるアプリケーションにおいては,ネイティブコードを呼び実行する方法に頼る状況にある.

 中間コードをプロセッサで直接実行し性能を高める例として,過去にJavaバイトコードを主に取り組まれてきた.その中でも組込み,モバイル向けプロセッサにおける高速化手法として,プロセッサ・パイプライン内のデコードステージにバイトコードからネイティブコードを生成する機構を設置する方法が挙げられる.プロセッサ内の資源増加がデコードステージへのバイトコード対応部分で抑えられるからである.しかし,仮想機械の翻訳した動作と同様のデコード内容を出力するだけでは,性能の向上を見込むことは難しい.より高効率なネイティブコードの生成が求められる.

 本研究は,Dalvikバイトコードを対象に直接実行する,アクセラレータを提案した.併せて,Dalvikバイトコードからデコードステージでネイティブコードを生成する際,効率的に生成する手法としてDRMT(Dalvik Register Map Table)を提案した.一般に仮想機械は主記憶だけでなくレジスタやオペランドスタックも主記憶上にあり,演算に際してはプロセッサのレジスタと主記憶との間でロード・ストアが発生する.DRMTは最近用いたDalvik レジスタについて,物理レジスタへの保持状況と主記憶上のDalvikレジスタと対応付けするテーブルである.

 バイトコードから命令を生成する際DRMTを参照して,対象のDalvikレジスタが物理レジスタにロード済みならば,削減し効率を高めたネイティブコード出力を実現する.ストアは基本削減し,新しいDalvikレジスタをロードの際,既存のDRMTのエントリをリプレースする必要がある場合,実行モードをプロセッサネイティブなモードに戻す際に,主記憶上のDalvikレジスタ実体へのストア命令を発行する.

 現在モバイル向けプロセッサの性能向上は著しく,スマートデバイス全般の性能の底上げの背景となっている.一方で性能の限定された環境は今も多く,安価スマートデバイスの普及や多岐に渡る応用には,廉価ながらも高効率で実行できるプロセッサが求められる.これらに対して,ハードウェアの増加を抑えつつ中間コードを高速化ができる環境が有利とみられる.
 


 (2014年5月31日受付)
取得年月日:2013年9月
学位種別:博士(工学)
大学:東京農工大学



推薦文
:(組込みシステム研究会)


Androidアプリで用いられるDalvikバイトコードを直接プロセッサが読み,機械語変換する際の生成命令の効率化をはかるDRMT法によるハードウェアを考案し,評価した.本研究会主催ESS2010優秀論文賞,2011年度コンピュータサイエンス領域奨励賞等高く評価されており,ここに推薦する.


著者からの一言


途中3年次での単位認定退学後,就業し一時期は研究に取り組めない状況もありました.その中長きに渡りご指導,ご助言をいただきました先生方,本テーマに協力くださりました研究室の皆様に感謝を申し上げます.ハード,ソフト双方から著しい向上がある現状,本研究の意義は期間が限られており,その中推薦していただいた研究会の皆様にも感謝を申し上げます.