イベント
[COMPUTEX]西川善司の3DGE:ARMの最新GPU「Mali-G72」はどこがどう変わったのか
Mali-G72のターゲットプロセスは20〜10nmあたり
ARMはIP企業だが,具体的に設計を行ったハードマクロも提供している。ARM側によると,ターゲットとなる製造プロセス技術は20〜10nmあたりだそうだ。もっともARMとしてはGPUにとっての現行世代である16〜14nmがメインのようである。
OpenGLはES 3.2対応で,ここはMali-G71と同じ。DirectXは,Mali-G71だと12に非対応だったが,Mali-G72は対応しているという。ただし「Feature Level 11_1対応」とされているので,Mali-G71から機能はそのまま,DirectX 12に対応したのだと思われる。
発表会でARMは,Mali-G72で「Machine Learning Efficiency」(機械学習の実行効率)が向上したこと,「Advancing mobile VR」(先進のモバイルVR)技術に対応したこと,そして「High Fidelity Mobile Gaming」(高品位モバイルゲーム)体験の提供が可能になったことなどを訴求していた。
台湾では発表会のあとで,GPUプロダクト担当であるIan Hutchinson氏とJem Davies氏,Espen Oybo氏の3名に話を聞くことができたので,発表会で出てきた3つのキーワードについて,1つずつ解説していくことにしよう。
機械学習の実行効率向上
機械学習の実行効率向上は,主に「Mali-G71に対して行った『GPU内のデータの伝送効率の最適化』と『キャッシュ制御命令の新設』によって実現している」と,Mali-G72のプロダクトマネージャを務めるOybo氏は話し,その根拠として,M
それが下の写真だ。各要素がFP32の場合とFP16の場合とで,Mali-G71とMali-G72からGEMMを実行したときの相対性能値で,Mali-G72のほうが約17%速いというグラフなのだが,オフセットを利かせたかなり乱暴な棒グラフであり,しかも行列計算における約17%の高速化を直接「機械学習の実行効率向上」と結びつけてあるという2点において,少々強引であると言わざるを得ない。CaffeやTensorFlowなど,実際の機械学習AIにおける性能テスト結果を見ないと,どの程度の高速化を実現しているかの判断はしにくい。
また,GPU内のデータの伝送効率最適化はハードウェアの機能として進化した部分なので自動的に恩恵が受けられる一方,キャッシュ制御命令の新設は,動かす機械学習AI自体がその命令セットに対応しないと恩恵が得られない。
「機械学習の実行効率向上」は事実上,「マーケティングトーク」なのではないかというのが,率直な感想だ。
先進のモバイルVR技術に対応
Mali-G72の発表会においてARMは,「先進のモバイルVR技術に対応」における「対応先」として,「Mobile Multiview」「ASTC」「Multisampling Aliasing」「Foveated Rendering」を挙げていた。
Mobile Multiview(モバイルマルチビュー)は,いわゆる「Instanced Stereo Rendering」(インスタンストステレオレンダリング,以下 ISR)のことを指している。
ISRは,DirectX 9.0c世代のGPUが初めて搭載した,ジオメトリインスタンシング(Geometry Instancing)を活用する方法である。
ジオメトリインスタンシングとは,GPUに転送した3Dモデル(=ジオメトリ)を,座標位置や指定テクスチャなどといった各種パラメータ違いのバリエーションで複数個,同時にレンダリングできる機能である。たとえば,「宇宙空間に,同一3Dモデルの隕石を,テクスチャ違いでいっぱい描画したい」といったケースで有効な機能だ。GPU内部で3Dモデルを仮想的に複製して描画する機能と言ってもいい。
現在主流のVR対応ヘッドマウントディスプレイ(以下,HMD)で表示される映像は,1枚の映像フレームを半分に区切って,左側を左目用,右側を右目用に割り当てて,それぞれ左右の目用の映像を表示する「サイドバイサイド」(side-by-side)形式で描画されることになる。
喩え話だが,VR対応HMDの映像フレームにおいて戦闘機を描画するとして,ジオメトリインスタンシング機能を用いれば,1回のレンダリングパイプライン実行で左目用の戦闘機を映像フレームの左側に描きつつ,右目用の戦闘機も映像フレームの右側に描くことができる。CPU経由で仕掛ける描画コマンドは戦闘機1機分でも,ジオメトリインスタンシングによって左右の目に対応する形で複製され,それぞれの機体は,左右の目からの視点で透視投影を行ったうえで,ピクセルへとラスタライズされることになる。このとき,左側の目で見えるものが右側の目では見えないように,それぞれの目に対してオブジェクトのクリッピングをしてやるのがミソである。
ISRで「お得」になるのは,描画コマンドの発行――いわゆるDrawcall――の分だけで,GPU負荷の軽減は基本的に図れない。ここは,Pascal世代のNVIDIA製GPUコアがサポートし,ジオメトリ負荷まで軽減できる「Simultaneous Multi-Projection」とは異なる部分である。
このISRのことを,“ARM語”ではMobile Multiviewと言うようだ。要するに,Mali-G72はISRをMobile Multiviewという名前でサポートしています,ということである。
ちなみに,このISR,実はMali-G71でも実行自体はできるとのこと。気になるのは,Mali-G71に対してMali-G72が具体的にどの程度高い性能でMobile Multiviewを実行できるのかなのだが,ARMは明解な数値を出していない。
2つめのASTCは「Adaptive Scalable Texture Compression」(アダプティブスケーラブルテクスチャコンプレッション)の略で,要はテクスチャ圧縮技術の名前である。
ASTCは,ARMが開発したハイダイナミックレンジ(HDR)テクスチャの圧縮にも対応したテクスチャ圧縮技術で,OpenGL ES 3.0からは標準機能(※正確には標準拡張仕様)に組み込まれている(関連記事)。Mali-G71どころか,MaliシリーズのほぼすべてがASTCをサポートしているので「Mali-G72の新機能」としてここに出てくるのは不思議な印象だ。私見だが,前出のMobile Multiviewと同様,「ARMが開発した技術」ということで,Mali-G72のスライドに半ば強引に滑り込ませた感を受ける。
3つめのMultisampling Aliasing(マルチサンプリングエイリアシング)は,「MSAA」として知られる,近代リアルタイムグラフィックス定番のアンチエイリアシング技術だ。こちらも,頭数稼ぎに滑り込まされたのか……というと,そんなこともない。結論だけ言えば,「サンプル数の多いMSAAにおける性能が,Mali-G71よりも向上する」ということで,ちゃんと理由があって4要素入りを果たしているのである。性能向上の理由は,Mali-G72に施された「ある改善」(※詳細は後述)との関係が深い。ただここも,性能がどの程度向上するかについての数値公開はなかった。
4つめのFoveated Rendering(フォヴィエイテッドレンダリング)は,VRに詳しい人は聞いたことがあるキーワードかもしれない。
「Fovea」とは目の「中心窩」のこと。眼球内の内壁には視覚細胞が敷き詰められている部分があり,これ網膜と呼ぶことは多くの人が知っていると思うが,その網膜の中でも,視覚解像度の最も高い領域が「中心窩」だ。
Foveated Renderingとは,この中心窩に向けて高品位の映像を描画しようとする技法で,VRにおいては「眼球が注視している領域を高品位に描き,それ以外をそれなりの品質で描画する」技術として説明されることが多い。
もっとも,これもMali-G72の進化とは関係が薄く,理論上は,Mali-G71でも対応ができる技術である。
Oybo氏は「このスライドは,今注目されているVR向け新技術に対応していることを示したかった」と語っていたが,結局,4つあるキーワードのうち3つは,Mali-G72特有の改善とは無関係なのであった。
高品位なモバイルゲーム体験の提供
携帯電話向けのゲームのグラフィックスも,年々,高度なレンダリングメソッドを使うようになってきており,最新タイトルでは,ほとんどゲーム機と同じ技術を採用することもままある。
発表会では,Digital Legends Entertainmentの「Afterpulse」が「スマートフォン向けの,最も高度なゲームグラフィックス」の例として名前が挙がっていたが,SIGGRAPH 2016の「Realtime Live!」イベントでも,「スマートフォンのゲームグラフィックスはここまで到達した」という事例として登場していたので(関連記事),その名前を憶えている人もいるのではなかろうか。
Mali-G72の発表会でJem Davies氏は「このような最新のスマートフォン向けゲームグラフィックスを高性能で処理できるような改善をMali-G72に施した」と語っていたが,これについて,さらに深い説明を要求すると,Oybo氏は,「簡単に言えばTile Bufferを2倍に増やしたんだ」と明瞭な回答をくれたのだった。
ここは説明が必要だろう。
Maliシリーズも,Imagination TechnologiesのPowerVRと同様に,タイルベースレンダリングを行っている。
タイルベースレンダリングについて詳しく知りたい人は「GeForce GTX 1080 Ti」の発表に合わせた技術解説記事を参照してほしいが,ここでも簡単に解説しよう。
携帯電話などの組み込み機器向けGPUでは,グラフィックスメモリ(※UMAではメインメモリになる)へのアクセスを極力回避したいという思惑がある。これは「組み込み機器ではグラフィックスメモリのバス幅が狭く,あまり速くない」という理由,そして,グラフィックスメモリへ大量にアクセスすると消費電力が増大してしまうという理由による。
そこでタイルベースレンダリングでは,画面を16×16ピクセルくらいの塊(=タイル)で区切り,タイルごとにレンダリングすることにする。具体的には,タイルごとに専用かつ超高速な内蔵メモリを用意して,その中でZバッファ処理を行ったり,ピクセルシェーダから出力されたピクセルカラーデータを書き込んだりするようなアーキテクチャにして,グラフィックスメモリへのアクセスを極力行わないようにするのだ。昔はフレームバッファとZバッファくらい分しか容量がなかったのだが,時代とともにタイル内の高速メモリ容量は増大傾向にある。
さて,リアルタイム3Dグラフィックスでは,すでに描画済みの領域に対して新たに上書きされたりして最終的に表示されないオブジェクトがあったりする。このときタイルベースレンダリングでは,いま挙げたような重複描画自体をその「タイル専用の超高速な内蔵メモリ」内で完結させるようにして,GPUの外にあるグラフィックスメモリに描き出すのは「そのタイルの描画が完了してからの1回だけ」に留めるのである。
前出のAfterpulseもそうなのだが,最新のゲームグラフィックスでは,ディファードレンダリング(Deferred Rendering)が多用されるようになっており,これが実はMaliやPowerVRといったタイルベースレンダリングアーキテクチャのGPUと相性がよくないとされてきた経緯がある。
ディファードレンダリングでは,ピクセルの色を決定するテクスチャの適用やらライティングやらシェーディングやらを後回しにして,先に,各ピクセルに対応したライティングやシェーディングの計算に必要な中間パラメータをレンダリング(出力)する。
中間パラメータを出力する先のバッファには,ジオメトリ(Geometry)の頭文字を取って「G-Buffer」という名前が付いているのだが,このG-Bufferは,最終的に表示する映像と同等解像度で出力される場合も,縦横半分の解像度,あるいはもっと低解像度で出力される場合もある。
いずれにせよこの工程は,複数のバッファに対して同時に行うことになる。たとえば法線ベクトルや鏡面反射強度,拡散反射要素といった3つの中間パラメータを出力しようとしたら,3つのバッファに対して同時にレンダリングを行うのだ。
複数バッファへの同時G-Bufferレンダリングは,GPUの「マルチレンダーターゲット」(Multi Render Target,以下 MRT)と呼ばれる機能を活用して行うことになるが,最新のDirectXやOpenGLだと,仕様上は,同時に最大8バッファに対して実行できる(=8MRT出力を行える)わけである。
そんなG-Bufferレンダリングをタイルベースレンダリングで行おうとすると,前述した「タイル専用の超高速メモリ」の容量が足りなくなってくる。足りなくなれば,足りない分はグラフィックスメモリを使うことになって,G-Buffer出力は当然遅くなる。
Mali-G72では,この問題を解決するため,「タイル専用の超高速メモリ」を2倍に増量したというわけである。そしてあらためて言う必要もないかもしれないが,「タイル専用の超高速メモリ」こそがTile Bufferなのだ。
もう少し細かな話をすると,Maliシリーズのアーキテクチャでは「MRTを使ってG-Bufferレンダリングを行う」とき,「Pixel Local Storage」(ピクセルローカルストレージ,以下 PLS)という機能を活用して,複数あるバッファのそれぞれに中間パラメータを出力することにより,性能向上を図ることができるが,実のところこのPLS機能こそが,Tile Bufferの消費に相当するのである。
ちなみにPLS機能は,OpenGL ES 3.0対応以降のMaliシリーズで対応。OpenGL ES 3.0の機能としては「拡張機能」扱いとなっている(関連リンク)。
ここで,前段からの「ネタ振りの回収」もすると,前段で触れた「サンプル数の多いMSAAで性能が向上する」というのは,Tile Bufferの増量により,高い解像度のZバッファやピクセルバッファをTile Buffer内で賄えるようになったからなのである。
Mali-G72は,Tile Buffer増強版Mali-G71!?
筆者が「Mali-G72における最大の改善ポイントは,Mali-G71に対して2倍のTile Bufferを搭載したところという理解でよいか」とOybo氏やDavies氏に問うたところ,両氏からは「基本的にはそうだ。ただ,それ以外にも数百個に及ぶ細かな改善ポイントがある」という回答があった。
さすがに,限られた時間内に数百個も語れないため,代表的な「細かい改善ポイント」を教えてくれたが,そこには「L1キャッシュの増量」(※サイズや増量具合は非公表)や,平方根や三角関数などといった超越関数の高速化などが挙がっていた。
繰り返しになるが,Mali-G72は基本的にはMali-G71のマイナーチェンジ版である。派手な新機能やアーキテクチャ革新はないものの,Mali-G71が抱えていた弱点は確実に改善しているため,「Mali-G71の置き換え」として,今後,採用が進むと見られる。
今回はとくに大きくは触れられなかったが,同一シリコン面積のチップで20%の性能向上が見込め,消費電力効率は25%も向上しているそうなので,回路設計部分においても相当な最適化が進んでいるはずだ。きっとこれこそがOybo氏やDavies氏らの言う「数百の細かな改善ポイント」の賜物に違いない。
COMPUTEX TAIPEI 2017取材記事一覧
- 関連タイトル:
Mali,Immortalis
- この記事のURL: