3DSエミュレーターAzahar、Android版にゲーム別設定を追加 Mali GPU端末で最大15%の性能向上
出典: developer.android.com

ニンテンドー3DSのゲームを別の端末で動かすエミュレーター「Azahar」のv2127.0プレリリース版が、GitHubで公開されました。Android版にはゲーム別の設定やSnapdragon以外の端末でのカスタムGPUドライバー対応が加わり、開発チームはMali GPU搭載端末で最大15%の性能向上をうたっています。

更新はAndroidを含む全プラットフォームが対象です。iOS・tvOS向けにも、JITを利用できない環境での実行性能を改善する変更が入りました。

Android版でゲームごとに設定を調整可能に

Android版では、ゲームごとに設定を変更できるようになりました。特定の作品に合わせて調整しても、ほかのゲームの設定には影響しません。

カスタムGPUドライバーは、描画処理を担うソフトウェアをアプリ側で選んで使う仕組みです。今回の更新で、Snapdragon以外の端末でもカスタムGPUドライバーを利用できるようになりました。

Android向けのカスタムGPUドライバーの一つであるTurnipは、QualcommのAdreno GPUを対象としています。対応アプリが独自のドライバーを読み込む方式では、端末のシステムドライバーを置き換えずに描画処理に使えます。利用条件はGPUの型番やAndroidのバージョン、アプリ、ドライバーのビルドによって異なります。

ゲームの起動と終了の動作も変更されました。ホーム画面のショートカットから起動したゲームを閉じると、Azahar自体も終了するようになります。

ADPF対応で端末の温度・処理管理と連携

Android版は、端末の温度や処理性能の管理を支援するAPI群「Android Dynamic Performance Framework(ADPF)」に対応しました。開発チームは、この対応によって大半のAndroid端末で性能が向上し、Mali GPU搭載端末では向上幅が最大15%になるとしています。

ADPFには、端末の温度状態を監視するThermal APIが含まれます。アプリはその情報を使い、処理負荷を維持できなくなる前に処理量を調整できます。CPUの動作周波数や使用するコアなどが動的に変わるモバイル環境で、過熱を避けながら性能を維持するための仕組みです。

また、アプリの重要な処理についてOSに性能上のヒントを渡し、実行の割り当てを最適化するためにも使えます。AndroidのADPFサンプルでは、温度状態に応じて目標フレームレートを下げる処理や、主要スレッドの処理量についてヒントを渡す処理が実装されています。

全機種でROM Bundleと遅延低減に対応

全プラットフォーム共通の変更として、ゲームのROMデータとダウンロードコンテンツなどを一つのファイルにまとめる「ROM Bundle」形式に対応しました。

音声・フレーム・入力の遅延も、全プラットフォームでわずかに低減されています。さらに、画像表面の模様などを表すテクスチャの処理が改善され、全プラットフォームで全般的な性能向上につながっています。

iOS・tvOSはJITなしの実行処理を高速化

iOSでは、AzaharのようなエミュレーターがJITコンパイルを容易に利用できず、性能が大きく低下する要因になっています。今回の更新では、JITを使えない端末向けに高速なインタープリターが導入されました。

JITコンパイルは、実行時にコードを変換する方式です。一方、インタープリターは命令を解釈して実行します。JITによる高速化の実装例には、繰り返し呼ばれる処理を命令列へ変換して保存し、その後CPUが直接実行できるコードへ変換する方法があります。

開発チームはiOS・tvOSで性能が大幅に向上し、iPhone XSでもアプリを動かせるようになったとしています。