Android* 開発者向けラーニングシリーズ 10: インテル® Atom™ プロセッサーを搭載した Android* 端末の GPU について
この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel for Android* Developers Learning Series #10:Understanding GPUs on Android* for the Intel® Atom™ Processor」の日本語参考訳です。
1. はじめに
この記事では、モバイル GPU について取り上げ、インテル® Atom™ プロセッサーに内蔵されている GPU 向けにアプリケーションを最適化する最良の方法を検証します。
2. GPU の進化
モバイル GPU がどのように進化しているかを理解することは重要です。当初、モバイルデバイスは、ソフトウェアによるラスタライズを使用して最終イメージを画面に描画していました。しかし、ラスタライズや最近の OS に関連するその他のタスクは CPU を酷使します。Android* では、CPU は多数のバックグラウンド・タスク、I/O 処理、アプリケーションを実行しています。これらの処理に加えて、直感的な UI 操作に対応するため、多くのグラフィック・アニメーションやグラフィック効果が使われています。このことから、GPU の必要性は明らかです。
インテル® Atom™ プロセッサーは、モバイルデバイスのパフォーマンスとバッテリー寿命を最大化するように設計されています。同様に、インテル® Atom™ プロセッサーの GPU もモバイルデバイス向けに設計されています。初期の GPU デザインは OpenGL* ES から多大な影響を受けています。次のセクションでは、OpenGL* ES について説明し、その API により Android* 上でグラフィカルなアプリケーションを作成する方法を紹介します。
OpenGL* は元々デスクトップ環境で実行されることを前提に設計されました。正確な科学計算や高精度など、モバイルデバイスでは必要ない機能も数多くサポートしています。デバイスで完全に OpenGL* をサポートするには、別途ハードウェアが必要になります。ハードウェアを追加するには、貴重なスペースと電力が必要です。そこで登場したのが OpenGL* ES です。OpenGL* ES はモバイルデバイス向けに設計されました。OpenGL* の機能のうち、モバイルデバイスでは不要な多数の機能が排除されています。
OpenGL* ES 1.1 は、固定機能パイプラインのみをサポートします。そのため、OpenGL* ES 1.1 向けの GPU を設計する場合、単純な構造にすることができます。しかし、モバイルデバイスが進化するとともに、この制限は最新のグラフィック技術の障害となりました。そこで、OpenGL* ES 2.0 では、プログラム可能なパイプライン (つまり、シェーダー) をサポートするように拡張されました。これにより、最新の 3D ゲームを含む、より複雑な映像に対応できるようになりました。ただし、同時に GPU はより複雑にならざるを得なくなりました。
OpenGL* ES 2.0 はグラフィックス用 API として広く使用されています。さらに、より複雑で魅力的な映像技術を可能にする OpenGL* ES 3.0 が発表されました。
3. 2 つの主要なモバイル GPU デザイン
現在、モバイル GPU では、遅延 (deferred) と即時 (immediate) の 2 つの主要なデザインが採用されています。遅延モードの GPU は、個々のフレームのすべてのコマンドが送信されるまで処理を待機します。即時モードの GPU はコマンドが送信されるとすぐに処理を開始します。表 1 に GPU の主要ベンダーと採用されているデザインタイプを示します。
GPU | タイプ |
インテル® HD グラフィックス | 即時 |
AMD Radeon* | 即時 |
NVIDIA* GeForce* | 即時 |
NVIDIA* Tegra* | 即時 |
Qualcomm* Adreno* | 即時/遅延 |
Imagination Technologies PowerVR* | 遅延 |
ARM Mali* | 遅延 |
表 1: GPU の主要ベンダーと採用されているデザインタイプ (注: インテル® HD グラフィックスはインテル® Core™ プロセッサーに内蔵されています。現在のインテル® Atom™ プロセッサーは PowerVR* ベースの GPU を採用しています。)
出典: インテル コーポレーション (2012 年)
3.1. 遅延モードの GPU の利点
遅延モードの GPU にはいくつかの重要な利点があります。第一に、GPU に送られたデータを効率良く整理して、メモリー帯域幅を減らすことができます。メモリー使用量は電力消費に大きく影響するため、メモリー帯域幅を減らすことで電力効率が大幅に向上します。
また、フレームのレンダリングに使用するすべてのデータが明確であるため、簡単に処理を小さなチャンクに分割することができます。実際、PowerVR* はタイルベースの遅延レンダリングとも呼ばれます。 これは、この GPU がフレームの生成に必要なすべてのコマンド/データを収集してから、処理を小さなタイルに分割するためです。 タイルとは、正方形のピクセルの集合です。このピクセルの集合は、非常に高速なキャッシュに収まるように設計されています。PowerVR* デザインの利点に関する詳細は、PowerVR* のドキュメントを参照してください:
http://www.imgtec.com/powervr/insider/docs/POWERVR%20Series5%20Graphics.SGX%20architecture%20guide%20for%20developers.1.0.8.External.pdf (英語)
しかし、遅延レンダリングにはいくつかの制限があります。GPU 上の内部メモリーとキャッシュには限りがあるため、フレームに多量のデータをレンダリングする場合、処理を複数のパスに分割する必要があります。これは、オーバーヘッドの増加と余分な操作につながります。遅延モードの GPU の最適化手法の多くは、これらの “制限” を回避することです。
3.2. “遅延” の定義に関する注意事項
コンピューター・グラフィックスでは遅延という用語が多用されています。 遅延モードの GPU、遅延レンダリング、遅延シェーディング、遅延ライティング、遅延ラスタライズなど、数多くの用語があります。”遅延” の定義は一貫しておらず、コンテキストに依存します。遅延モードの GPU と遅延レンダリング手法を混同しないでください。一般に、遅延レンダリングとは、シーンデータを G バッファーに蓄積し、画面領域にライティング/シェーディングを適用する手法です。
3.3. 即時モードの GPU の利点
ここ数十年間、即時モードの GPU はデスクトップ向けのデザインとして広く採用されてきました。多数のレンダリングの手法、コツ、最適化が即時モードのレンダリングのために考案され、即時モードの GPU は非常に複雑で高性能になりました。
即時モードのレンダリングはコマンドを受け取るとすぐに処理を開始するため、単純なタスクの場合、即時モードの GPU のほうがより速く効率的に処理を完了できます。さらに、GPU に渡されるデータ量により “制限” を受けることが少ないことも利点です。
しかし、即時モードの GPU は長年にわたって電力供給が豊富なデスクトップ向けに設計されてきたため、電力消費を犠牲にしてパフォーマンスを最大限に引き出す設計になっています。これが、モバイル市場で遅延モードのレンダリングが広く採用されている理由です。ただし、研究開発により、即時モードの GPU の電力消費は急激に減りつつあります。この傾向は、インテル® Core™ プロセッサーに内蔵されているインテル® HD グラフィックスにも見られます。
4. インテルの GPU 向けの最適化
表 2 のように、Android* 向けのインテル® Atom™ プロセッサーは PowerVR* GPU を採用しています。
インテル® Atom™ プロセッサー・シリーズ | GPU コア |
Z24XX | PowerVR* SGX 540 |
Z2580 | PowerVR* SGX 544MP2 |
表 2: Android* 向けインテル® Atom™ プロセッサーと内蔵されている GPU (個々のプロセッサーに関する詳細は、ark.intel.com を参照してください。)
出典: インテル コーポレーション (2012 年)
Imagination Technologies の PowerVR* に関するドキュメントに目を通しておくと良いでしょう。Imagination Technologies により提供される一般的な最適化のヒントやコツは、PowerVR* を搭載したほかのプラットフォームと同様に、インテルのプラットフォームでも重要です。
PowerVR* ハードウェアを良く理解するには、Imaginations Technologies のアーキテクチャー・ガイドを参照してください:
http://www.imgtec.com/powervr/insider/docs/POWERVR%20Series5%20Graphics.SGX%20architecture%20guide%20for%20developers.1.0.8.External.pdf (英語)
PowerVR* ハードウェアの最適化方法については、Imaginations Technologies の開発者への推奨事項を参照してください:
http://www.imgtec.com/powervr/insider/docs/POWERVR%20SGX.OpenGL%20ES%202.0%20Application%20Development%20Recommendations.1.8f.External.pdf
特に “golden rules” は重要です。
モバイルデバイスでは、適切なテクスチャー圧縮フォーマットを使用することが重要です。適切なテクスチャー圧縮フォーマットは、ダウンロード・サイズを減らし、画質とパフォーマンスを向上させ、メモリー帯域幅の負荷を軽減します。これは、Android* アプリケーション開発における最大の課題の 1 つと言えるでしょう。Android* はさまざまなハードウェアをサポートしているため、すべてのデバイスに最適なテクスチャー・フォーマットはありません。OpenGL* ES では、ハードウェアが ETC テクスチャー圧縮をサポートしていることだけが求められます。しかし、残念ながら、このフォーマットはアルファチャンネルをサポートしていないため、開発者は複数のテクスチャー・フォーマットをサポートしなければなりません。PowerVR* では、すべてのテクスチャーの圧縮に PVRTC を使用すべきです。
5. まとめ
ここでは、モバイル GPU の概要を示し、インテル® Atom™ プロセッサーに内蔵されている GPU 向けにアプリケーションを最適化する最良の方法について述べました。次の記事では、GPU を利用するための API、OpenGL ES について取り上げます。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。