インテル® GPA システム・アナライザーによる Android* アプリケーションの改善

同カテゴリーの次の記事

インテル® INDE 2015 Build Edition for OS X*

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Using the Intel GPA System Analyzer to Improve Android* Apps」の日本語参考訳です。


Art Browser サンプルコードのダウンロード (ZIP)

モバイル・アプリケーションの動作はエミュレーターとデバイスでは異なることがあり、アプリケーションが複雑になるにしたがって、パフォーマンス・ボトルネックのデバッグは困難になります。インテル® INDE に含まれるインテル® GPA システム・アナライザーを使用すると、さまざまなパフォーマンス問題を診断することができます。

インテル® Integrated Native Developer Experience (インテル® INDE) ベータ版のインストール

インテル® INDE は、インテル® アーキテクチャー・ベースのデバイス向けに、環境のセットアップ、コード作成、コンパイル、デバッグ、解析に必要な C++/Java* ツール、ライブラリー、サンプルの完全かつ一貫したセットを提供します。ARM* ベースの Android* デバイスでも、一部の機能を利用できます。

インテル® INDE に関する情報と入手については、こちらをご覧ください。

リモートデバッグ向けのアプリケーションのビルド

インテル® GPA システム・アナライザーをアプリケーションに接続するには、INTERNET 権限が付与され、debuggable が “true” に設定されている必要があります。

アプリケーションを理解する

Art Browser サンプル・アプリケーションは、メディアプレーヤーやブラウザー・アプリケーションなど、実際のアプリケーションで用いられているイメージカルーセル機能を単純化したものです。実際のアプリケーションにはない 2 つのボタンがあり、これらは一般的なパフォーマンス問題を再現するのに利用します。

  1. 「高等数学の計算」をオン/オフにするボタン: CPU 負荷の高い高度な物理エンジン、詳細なロギング、高負荷なイメージ効果、あるいはアプリケーションにとって重要ではないさまざまなは CPU 負荷の高い機能など、実際に起こりうるケースをシミュレーションします。このボタンをオンにすると、CPU 負荷が高くなることでアプリケーションが遅くなり、CPU 依存のアプリケーションをデバッグする方法を検証できます。デフォルトでは、アプリケーションをスムーズに起動できるように、このボタンはオフになっています。
  2. 幾何学計算の複雑さを選択するドロップダウン: 通常、大きな平面は小さなタイルのグリッドに分割することで、デプスソートの問題を回避できます。デフォルト値は 128×128 グリッドです。実際には、ここまで小さく分割する必要はありませんが、このほうが要点を理解しやすいでしょう。このような複雑な幾何学計算では GPU 負荷が高くなり、GPA で GPU 依存のアプリケーション動作を検証するのに最適です。値を小さくすることで、アプリケーションはよりスムーズに実行されます。

アプリケーションへの接続

Art Browser サンプル・アプリケーションをビルドして、デバイスまたはエミュレーターにインストールします。次に、アプリケーションへの接続の妨げとなる Android* 開発ツール (Eclipse* など) が実行されていないことを確認したら、インテル® GPA システム・アナライザーを起動します。ローカルマシン、実行中のエミュレーター、接続されているデバイスのリストが表示されます。

デバイスやエミュレーターがアンロックされ、USB デバッグが有効になっていることを確認してください。[Connect] ボタンをクリックしてアプリケーションに接続します。インテル® GPA により、すべてのデバッグ可能なアプリケーションのリストが表示されます。

インテル® GPA は、さまざまなデータをモニターできますが、ここではフレームレートと CPU 負荷に注目します。左側のサイドバーにある [CPU] > [Aggregated CPU Load] を上のグラフにドラッグし、[OpenGL] > [FPS] を下のグラフにドラッグします。

コードの最適化

CPU 依存の状況をシミュレーションするため、アプリケーションのボタンを使って「高等数学の計算」をオンにします。すると、直ぐに CPU Load が 100% になり、フレームレートがほぼ 0 FPS になります。ボタンを再度クリックして「高等数学の計算」をオフにすると、CPU Load は 30% に下がり、FPS は辛うじて許容可能な値と言える 10 になります。

OpenGL* の最適化

CPU 負荷の高いコード領域を無効にしただけでは、十分なパフォーマンスの向上は得られません。そこで、パフォーマンスを向上する唯一の選択肢である、OpenGL* レンダリングの最適化を行います。OpenGL* グラフィックス・パイプラインは複雑なプロセスであり、必ずしも 1 つの評価基準によって問題が明らかになるとは限らないため、グラフィックス・ボトルネックは CPU ボトルネックよりも見つけるのが困難です。幸いにも、GPA は豊富な OpenGL* 最適化ツールを提供しており、チェックボックスで OpenGL* レンダリング・パイプラインのさまざまな部分をオン/オフにすることができます。

アプリケーションが OpenGL* ボトルネックによる GPU 依存かどうかは、Disable Draw Calls ステート・オーバーライドを使って簡単に判断できます。Disable Draw Calls は、GPU に送られるすべての操作をオフにします。このオーバーライドを使用してもパフォーマンスが向上しない場合は、CPU 関連の問題であることが分かります。一方、FPS が大幅に向上する場合は、OpenGL* がボトルネックであると言えます。

上記のスクリーンショットでは、FPS グラフで大幅な上昇が見られることから、サンプル・アプリケーションは GPU 依存であることが明らかです。サンプル・アプリケーションの高画質のテクスチャーが原因かどうかを確認するため、すべてのステート・オーバーライドを無効にしてから、Texture 2×2 オーバーライドを使用します。

すると、上記のスクリーンショットのように、やや異なる結果になります。次に、Simple Fragment Shader オーバーライドを使って、シェーダーコードが複雑すぎるかどうかを検証します。

このテストも想定した結果にはなりませんでした。TA Load メトリックと USSE Vertex Load メトリックを比較することで、複雑な幾何学計算のテストを行えます。[GPU] > [TA Load] を上のグラフにドラッグし、CTRL キーを押したまま [GPU] > [USSE Vertex Load] も上のグラフにドラッグして、TA Load と一緒に表示されるようにします。予想に反して、TA Load が高く、Vertex Load が低いことから、処理されるバーテックスが多すぎることが分かります。

TA Load のほうが桁違いに大きいため、これは問題です。ただし、このメトリックも 50% 以下にとどまっています。前述のように、重大なグラフィックス・ボトルネックであっても、必ずしもメトリックが 100% になるとは限りません。

サンプル・アプリケーションの幾何学計算の複雑さを選択するドロップダウンから、[2×2 Grid] を選択します。

すると、FPS が大幅に向上し、TA Load と USSE Vertex Load のバランスが良くなります。さらに、[8×8 Grid] と [32×32 Grid] を使用することで、パフォーマンスとデプスソートにとって最適な設定を見つけられます。これでアプリケーションが最適化されました。

注: サンプル・アプリケーションのテストと結果の測定には、インテル® Atom™ プロセッサー Z2760 タブレットを使用しました。

結論

商用アプリケーションでパフォーマンス問題をデバッグすることは困難ですが、インテル® GPA システム・アナライザーは複雑なパフォーマンス問題の調査に役立ちます。インテル® GPA に関する詳細は、こちらを参照してください。

Art Browser サンプルコードのダウンロード (2.76 MB)

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事