後藤弘茂のWeekly海外ニュース

16nmの3DトランジスタをターゲットとしたハイエンドGPU「Mali-T880」

ARMがMali-T880 GPUを北京で発表

 ARMのモバイルGPUコア「Mali-T」シリーズは、MediaTekなど大手メーカーに採用されてはいるのだが、ハイエンドモバイルSoC(System on a Chip)の中では、まだ影が薄い。それを払拭するために、ARMは、同社のGPUコアの最新ハイエンド版「Mali-T880」を発表した。16nmのFinFET 3Dトランジスタ世代をメインターゲットプロセスとした、2016年のハイエンドモバイルSoC向けGPUコアだ。

2016年のハイエンドSoCへの採用を目指すMali-T880
Intel&ファウンダリプロセスロードマップ
PDF版はこちら

 Mali-T880は、昨年(2014年)発表した「Mali-T800」ファミリの最上位コア。ARMのGPUコアは、2011年に発表した「Mali-T600」ファミリから、「Midgard(ミッドガルド)」と呼ばれるアーキテクチャを採用した。それ以降、Mali-T600/700/800と、Midgardアーキテクチャを発展させて来た。Mali-T880ファミリもベースアーキテクチャはMidgardだが、マイクロアーキテクチャレベルではさまざまな改良が加えられている。

 Midgardアーキテクチャのポイントは、いわゆる「Vec4」タイプの演算ユニット構成を採っており、個々のピクセルや頂点単位でフローコントロールを行なっている点と、タイリングアーキテクチャである点。PowerVR Series5までのImagination TechnologiesのGPUコアアーキテクチャとある程度似ている。NVIDIAやAMD、PowerVR Series6(Rogue)のようなSIMT(Single Instruction, Multiple Thread)型のアーキテクチャとは異なる。個別コントロールのVec4は、解像度が低い場合でも効率が落ちにくい。

GPUのフローコントロール
PDF版はこちら

 Mali-T880では、ARMは前世代のMali-T760に対して、最大構成ではパフォーマンスを1.8倍に引き上げた。また、電力効率を高めることで、同じワークロードなら40%エネルギーを減らすことができたという。

 性能と電力効率のアップの主因は、プロセス技術の進歩とマイクロアーキテクチャの改革による。プロセス技術では、TSMCの16nmプロセス「16FF+」に最適化した「POP(Process Optimized Packages)」を提供する。POPは、ファウンダリの特定プロセスに対する物理設計の最適化を行なったパッケージだ。顧客は、RTL(Register Transfer Level)から自分で物理設計を全て行なう場合よりも、短時間に、パワー、パフォーマンス、エリア(PPA)の3要素を最適化した設計を実現できる。

ARMが説明するPOPの利点

 16FF+は、TSMCの1世代目のFinFETプロセス「16FF」の改良版で、より性能効率を高めた。16FF+系列では、より低電力の16FFLL+が先に立ち上がり、より高性能の16FFGL+が続くが、両プロセスの差は小さい。ARMは、顧客の設計ニーズが16FF+で高まっていることから、16FFではなく16FF+プロセスに向けたPOPの提供を決定したという。実際には低コストな28nmプロセスも長期間残るが、Mali-T880を採用するSoCはハイエンド製品であるため、16FF+向けにPOPを開発することにした。

IntelとファウンダリのFinFET比較
PDF版はこちら

Mali-T880の内部アーキテクチャ

 Mali-T880は、最大16コアのシェーダコアで構成することが可能だ。Mali-T600シリーズでは、シェーダコアは4コアずつのクラスタに分離され、キャッシュもクラスタ毎に分離されていた。それに対して、Mali-T700以降は、メモリインターフェイスとキャッシュ階層が改良され、クラスタはソフトウェア側からは隠蔽され、全てのコアを透過的に同等に扱うことができるようになったという。ARMのDennis Laudick氏(VP Partner Marketing, Media Processing Group, ARM)によると、この構造は、Mali-T880でも変わらないという。このアーキテクチャ改良によって、従来よりデータ移動の必要とそのためのエネルギーが削減され、より省電力になった。

Mali T880の概要
PDF版はこちら

 GPUコアの内部は、複数のレベルのクロックゲーティングとコアゲーティング(パワーゲーティング)を行なっている。ジョブマネージャがアクティビティを検知して、自動的にクロックや電力の供給を制御する仕組みだ。

 ARMは、昨年(2014年)秋にMali-T800系の高性能コア「Mali-T860」を発表した。Mali-T860とMali-T880では、ターゲットプロセス以外にも違いがある。まず、シェーダコアの構成は異なり、各シェーダコアの演算ユニット数が増えた。Mali-T860では、各シェーダコアに、ALU(Arithmetic Logic Unit)群が2個、ロード/ストアユニットが1個、テクスチャユニットが1個の構成だった。それに対してMali-T880では、各シェーダコアに、ALUが3個と、ALU数が増えている。

下位GPUコアのMali-T860のアーキテクチャ
Maliのシェーダーコア
PDF版はこちら

 GPUメーカーは通常は、コア内の演算ユニットとテクスチャとロード/ストアユニットの比率を、同一世代のGPUファミリで統一する。これは、演算とメモリアクセス命令の比率を一定にすることで、プログラムの最適化を容易にするためだ。それに対して、ARMは、下位の構成のGPUは演算に対するテクスチャ&ロード/ストアの比率が高く、上位のMali-T880は演算の比率が高くと変えている。最上位のMali-T880は、演算比率の高いより複雑なコンテンツのための構成と位置付けている。よりメモリアクセスが少なく、演算命令の比率の高いプログラムの実行に向いている。

3個の演算パイプを備えたMali-T880のシェーダコア

 Mali-T600以降のGPUのシェーダコアには複数スレッドの命令をスケジュールして発行するスレッドイシューユニットがある。この命令ユニットから、3個のALUと1個のロード/ストア、1個のテクスチャに対して、それぞれ異なるスレッドからの命令を発行できる。そのため、ALU数を増やしても、同じスレッドからの並列化できる演算命令を抽出する必要はない。最大で、各サイクル5スレッドからの命令が発行可能とみられる。コア内で実行できるインフライトのスレッド数は最大256スレッドと見られている。ただし、GPUの場合は、コンパイル段階で割り当てるスレッド当たりのレジスタ数を増やすと、立ち上げることができるスレッド数が減る。Mali-T880世代では、スレッド間のインタラクトを改良して、全体のスレッド実効効率を上げたという。

 また、NVIDIAやAMDのSIMT(Single Instruction, Multiple Thread)型アーキテクチャのように、32スレッドや64スレッドを束ねてプログラムカウンタを共有して同じ命令を実行し、分岐方向が分かれる条件分岐はプレディケーションで対応する方式は取らない。各スレッド毎にプログラムカウンタを持ち、条件分岐などを制御する。この点も、Mali-T880世代でも変わりがない。

 ARMのMidgardアーキテクチャでは、ALUは1個のベクタユニットと1個のスカラユニットで構成されている。Mali-T880でもこれは同様で、ベクタユニットは128-bit幅。32-bit演算なら4-wayのSIMD(Single Instruction, Multiple Data)となる。GPU用語ではVec4構成だ。加えて、1個の32-bitスカラ浮動小数点演算ユニットがあり、ベクタユニットとスカラユニットは並列で稼働させることができる。単純計算では32-bit換算なら5演算並列となる。

Mali T880のALU
PDF版はこちら

 128-bitのユニットを、整数演算と浮動小数点演算のそれぞれでユニット分割によってさまざまな演算精度に対応する。例えば、16-bit浮動小数点演算(FP16)なら、32-bit浮動小数点演算(FP32)の2倍のスループットとなる。これは、演算精度の低いケースが多いモバイルグラフィックスや、イメージプロセッシング、さらには将来のセンサデータのSoC側でのプロセッシングなどに効果を発揮するアーキテクチャだ。演算ユニット自体を、多用途に使いやすくすることで、SoC全体でのダイサイズ(半導体本体の面積)の縮小に効果があるという。「ベクタアーキテクチャでは、コンパイラにクアッドのパック化を要求する。しかし、現状では優れた結果が出ているので、当社はベクタアーキテクチャにフォーカスしている」とARMのMark Dickinson氏(General Mangager, Media Processing Group, ARM)は語る。

ARMのDennis Laudick氏(VP Partner Marketing, Media Processing Group, ARM、左)と、Mark Dickinson氏(General Mangager, Media Processing Group, ARM、右)

 Mali-T880は最大構成の16シェーダコアの場合、GPUコア全体でベクタユニットは48個、スカラユニットは16個となる。単純計算では、32-bit浮動小数点演算ユニットは240個となり、Tegra X1などのハイエンドモバイルGPUに近い数字となる。ただし、実際には16コアより小さな構成が、顧客の実装の中心となる可能性もある。

Mali-T880ではタイリングのアルゴリズムを改良

 PC向けGPUはイミーディエイトモードで、頂点処理からピクセル処理を連続して行ない、書き出したピクセルデータとともに、ピクセルのZ(深度)情報をセーブする。その上で、後から処理したピクセルがすでに処理を終えたピクセルよりも前に来るか後に来るかを、Z(デプス)バッファで判定してピクセルの上書きを制御する。それに対して、Mali GPUなどタイリング方式を取るアーキテクチャでは、いったん頂点処理を行ない、頂点データをセーブした後、画面を分割したタイル毎にピクセル処理を行なう。その際に、オフチップメモリの大きなZバッファを使わずに、前面に来るピクセルだけを処理するので、原理的には無駄が少なくメモリアクセスも含めて省電力となる。

 ただし、タイリングを正確に処理するためには、隠面を除去するアルゴリズムが優れている必要がある。しかし、完全には除去できないため、通常タイリングプロセッサは、小さなデプスバッファをオンチップに備えている。ARMは、Mali-T880ではこの部分を改良、どのピクセルが最終イメージに残るかをより正確に事前分析することで、これまでより正確に、不要なピクセルを処理前に除去できるようになったという。

レンダリング方法の比較
PDF版はこちら

 「パイプラインにジョブを発行する前に、事前計算によってどのピクセルがフロントイメージになるかをより正確に判定する。それによって、これまでより不要な計算をストップできるようになった。性能が上がり、電力効率も上がる」とDennis Laudick氏(VP Partner Marketing, Media Processing Group, ARM)はアーキテクチャの改良点を説明する。

 こうしたアルゴリズムのため、タイリングは原理的にはピクセル書き込みはイミーディエイトモードGPUより複雑になる(実際にはイミーディエイトモードGPUも似たような処理を行なっているがタイリングほど完全である必要がない)。「イミーディエイトモードのデプスバッファはシンプルだがメモリと電力を食う。タイリングは制御が複雑だが、省電力なのでバッテリ駆動機器に向いている。複雑さに見合う利点があると考えている」とARMのDickinson氏は言う。

 こうした改良の結果、Mali-T880の電力効率の向上の半分以上は、マイクロアーキテクチャの改良によって実現できたとDickinson氏はいう。残りの半分がプロセス技術によるものだ。

TSMC 16FF+にPOPを提供

 ARMはMali-T880をRTL(Register Transfer Level)ソフトマクロでライセンスするほか、POPで提供する。CPUコアで行なっているようなハードマクロでの提供はない。これは、カスタマイズできるPOPでなければ、SoCのGPU用エリアにフィットするようにコアの物理レイアウトを調整できないためだ。GPUの場合は、POPで充分な性能と電力の最適化ができるとARMは判断したという。ARMは、以前に、16FF+世代のGPUコア向けのライブラリは7.5Tのスタンダードセルで提供すると説明しており、Mali-T880に同様なコンパクトな超高密度セルである可能性が高い。

昨年のARM Tech Symposiaでの16FF+のライブラリの提供形態
スタンダードセルトラック
PDF版はこちら

 また、現在のMaliを含むARMのメディアプロセッシングユニットは共通のロスレスフレームバッファ圧縮技術「ARM Frame Buffer Compression(AFBC)」を採用している。AFBCの圧縮伸張ユニットは、GPU「Mali-T800」、ディスプレイプロセッサ「Mali-DP550」、ビデオプロセッサ「Mali-V550」それぞれに搭載されている。そのため、共通でカラーデータのメモリ圧縮が可能で、メモリアクセスの電力効率をアップさせる。

Mali-T860発表時のAFBCの説明

 なお、AFBCの圧縮ブロックサイズは、実装段階でコンフィギュラブルとなっている。シリコンベンダーが、ハードウェア設計の際に、自社に最適なブロックサイズを選ぶことができる。これは、ブロックサイズと圧縮効率にトレードオフがあり、アプリケーションによって最適解が変わるためだとみられる。

I/Oコヒーレンシとページテーブル同期は今後の状況次第

 ARMのCPUコアとMali GPUコアの間は、I/Oコヒーレンシによってコヒーレンシが保たれている。GPUコアはCPUコアのキャッシュをスヌープできるが、その逆にCPUコアがGPUコアのキャッシュをスヌープすることはできない。そのため、CPUコアがGPUメモリリージョンのデータにアクセスする場合は、いったんGPUコアのキャッシュをフラッシュする必要がある。これは、GPUコンピューティング上での足かせとなっている。CPUコア同士のように、互いのキャッシュを双方向にスヌープできるようにはなっていない。

 また、Mali-T600以降のARM GPUは、専用のMMU(Memory Management Unit)を備え、ARM CPUのARMv8メモリアドレッシングもサポートしている。しかし、現状ではCPU側のMMUとGPU側のMMUの間では、ページテーブルの同期は行なっていない。「システムレベルMMUは技術的には可能だ。それによって、よりよい同期が実現できることは確かだ。しかし、トレードオフがあり、実装は非常に高価につくだろう」とARMのLaudick氏は言う。

 「それ(キャッシュコヒーレンシやページテーブル同期)が全体の市場の向かう方向だと理解している。しかし、そうした機能が要求する追加の技術と投資を考えると、我々は、いつが正しいタイミングかを測る必要がある。早く実装し過ぎるとシリコンエリアをムダにしてしまう。これは、ソフトウェア側の問題でもある。ソフトウェアコミュニティの声に注意深く耳を傾ける必要がある」とDickinson氏は語る。

AMDのインターコネクトアーキテクチャ。I/Oコヒーレンシで同期を取りやすくしている
PDF版はこちら

 AMDは、GPU MMUとCPU MMUでページテーブルは同期させたが、I/OコヒーレンシでGPUキャッシュフラッシュを避けるために、GPUキャッシュをバイパスするバスを設けた。一方、IntelはBroadwellではGPUコアとCPUコアの間で双方向のキャッシュコヒーレンシを可能にした。ARMもこうした技術は見ており、さまざまな手段を検討しているという。

(後藤 弘茂 (Hiroshige Goto)E-mail