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

Armの新世代フラグシップGPU「Mali-G76」

Arm GPUアーキテクチャは、Bifrostで3世代目のファミリとなる

 Armは、GPUのマイクロアーキテクチャを大幅に拡張した「Mali-G76」を発表した。Mali-G76は、同社のGPUコアIPのハイエンドモデルで、2019年のプレミアムモバイルなどに搭載される見込みだ。Armは、すでにメインストリーム向けGPUコア「Mali-G52」にマイクロアーキテクチャ拡張を施しているが、Mali-G76はそのプレミアム版にあたる。

 Mali-G76は「Bifrost(バイフロスト)」GPUアーキテクチャをベースとしているが、G52では大幅な改良が加えられている。

 Bifrostは、2016年に発表されたGPUコア「Mali-G71」から採用された。Armは、それまでのGPUアーキテクチャ「Midgard(ミッドガルド)」では「パックド(Packed)」、「SIMD(Single Instruction, Multiple Data)」方式のベクタプロセッシングを行なっていた。

 それに対して、Bifrostでは「スカラ(Scalar)」、「SIMT(Single Instruction, Multiple Thread)」方式へと切り替えた。ベクタの各レーンのコントロールフロー制御を行なう。GPUコンピューティングなど、グラフィックス以外のタスクに対応しやすくなった。

Bifrostの高性能GPUの3世代目がMali-G76

 第2世代のBifrostアーキテクチャであるMali-G52/76では、SIMT(Single Instruction, Multiple Thread)の演算パイプを8レーンに拡張した。そのため、単純には各実行エンジン(Execution Engines)の演算能力は2倍になった。

 また、マシンラーニング(機械学習)のインファレンス(推論)向けに、8-bit整数(Int8)の特殊な演算命令も加えられた。そのため、同じダイエリアでの性能効率が伸び、とくに機械学習性能が飛躍した。

 同程度のダイエリアで比較すると、前世代のMali-G72に対して、Mali-G76では同じプロセス技術でも25%性能が向上するという。メインターゲットとするプロセス技術も、Mali-G72の10nmに対して、Mali-G76は7nmとなり、さらに性能が向上する。

 プロセスも加味すると、Mali-G72に対してMali-G76の性能密度は30%程度高くなり、電力効率は30%改善され、機械学習の性能は2.7倍になるという。

Mali-G72@10nmと、Mali-G76@7nmの性能比較

 Armは、ゲームやVRなどのコンテンツで、Mali-G76の新アーキテクチャの強味が発揮されるとする。

 複雑なゲームコンテンツでは、性能は最大で50%程度のアップになるとArmは予想する。言い換えれば、Arm GPUは、2018年のMali-G72から、2019年のMali-G76で50%性能がアップするという。同じ性能レベルなら、それだけバッテリ駆動時間が長くなることを意味する。

複雑なゲームコンテンツにおけるMali-G72@10nmと、Mali-G76@7nmの性能比の予測
ゲームコンテンツでのパフォーマンスブーストの例
ゲームコンテンツやUIでの電力効率の例

演算レーンを8レーンに拡張

 Armは、Mali-G52とMali-G76において、SIMTの演算パイプを4レーンから8レーンへと倍増した。従来のBifrostアーキテクチャでは、演算クラスタである各実行エンジンに、それぞれ4レーンの32-bit演算レーンを備えていた。4レーン構成で、4つの32-bit演算を並列に行なうことができた。

 それに対して、Mali-G76アーキテクチャでは、32-bit演算レーンを8つ備える。8つの32-bit演算を並列に行なうことができる。各レーンはマスクレジスタによるプレディケーションフローコントロールが可能なので、SIMTとなる。

 演算レーンを倍増させたことで、Mali-G76では、各エグゼキューションエンジンのサイクルあたりの演算性能はピークで2倍となった。Mali-G76では、GPUとしての最小単位であるシェーダコアに3個の実行エンジンを搭載する。1個のシェーダコアの演算レーンは、従来の12から24になった。

演算レーンが8レーンになったMali-G76
Mali-G76の実行エンジンの構造

 実行エンジンの内部では、演算ユニットは8レーンの積和算(FMA)ユニットと、8レーン相当のスーパーファンクション&加算(ADD/SF)ユニットに分かれている。GPUとしては一般的な演算ユニット構成だ。

 Armは演算レーン当たりのレジスタ数は64本で、変わっていない。そのため、実行エンジン内のレジスタファイル容量も従来より倍増している。

 ただし、レジスタバンクは半分の数になり、バンクあたりのレジスタ量が増やされている。実行エンジンには、汎用レジスタファイルのほかに、データをフォワードするためのテンポラリレジスタがある。

 また、コンピュートでは、レジスタスピルをスレッドローカルストレージメモリエリアに格納する機能が加えられた。

上がMali-T系の演算ユニット、中央がMali-G71/72の演算ユニット、下がMali-G76の演算ユニット
PDF版はこちら
Mali-G76でのレジスタ回りの拡張

機械学習向けのドット積演算をサポート

 Bifrostでは、もともと、32-bitの演算レーンを分割してSIMD演算が可能となっていた。上の図のようにFP32(32-bit)単精度浮動小数点演算とInt32(32-bit整数演算)が実行できるだけでなく、FP16とInt16はそれぞれ2-way、Int8は4-wayで実行できる。

 Mali-G76では、新たにInt8のドット積演算(dot product)がサポートされた。機械学習で多用される演算で、Int8は推論で多用されるデータ精度だ。32-bitのスカラレジスタを、8-bitずつに分割して4個のInt8データを格納する。

 演算としては、2つのレジスタのInt8のデータ同士を乗算する。乗算の結果を、加算してInt32フォーマットで格納する。

ArmのMali-G76のInt8ドット積の概念図
Mali-G76での機械学習の性能

 BifrostではもともとInt8をサポートしていたが、ドット積のハードウェアサポートの結果、8-bit整数での機械学習の性能は大幅に向上した。複数命令で実行しなければならない処理が、単一命令で実行できるようになった。

 Armは、CPUとGPUの両方にドット積演算を加え、さらに機械学習専用プロセッサも導入と、全方位で機械学習対応を進めている。

テクスチャ-演算比率を保つ

 Mali-G76のシェーダコアは、実行エンジンを3個備える。従来との大きな違いは、テクスチャユニットが2倍になったこと。シェーダコア内の演算ユニットが倍増したことに合わせて、テクスチャユニットも倍増された。そのため、演算とテクスチャの比率はG72世代と同様に保たれている。

 グラフィックスでは、演算とテクスチャの比率を保つことは重要となる。ちなみに、Mali-G52では、テクスチャユニットは倍増されておらず、演算とテクスチャの比率では演算に寄っている。ただし、ロード/ストアユニットは強化されていない。

テクスチャパイプは2倍に
Mali-G76のシェーダコアアーキテクチャ
PDF版はこちら
Mali-G76のシェーダコア

 シェーダコアのフロントエンドには、頂点/タイリング/コンピュートとピクセルの2系統がある。

 頂点/タイリング/コンピュートでは、キューイングされた頂点やコンピュートエレメンツから、実際に演算を行なう実行エンジンにディスパッチするスレッドバッチを生成する。ピクセルのフロントエンドでは、頂点からピクセルを生成するラスタライズと、隠面処理のアーリーZ処理が入る。

 ArmのMali-G76のチャートでやっかいなのは、スレッドバッチの制御ユニット群の名前に「クアッド(Quad)」がつけられていることだ。Mali-G76では、4エレメントのクアッドではなく、実際には8エレメントのスレッドバッチを生成する。

 そのため、Armの図中の「クアッドクリエータ(Quad Creator)」と「クアッドマネージャ(Quad Manager)」という表記はおかしい。Mali-G52の発表時には、この部分のアーキテクチャの詳細は明らかになっていなかったが、Mali-G76では詳細が明らかにされており、8スレッドで1バンドルになる。

他社のGPUのSIMT構成にやや近づいた8レーン構成

 Armの場合、物理的な並列プロセッシングのレーンと、論理的なベクタ長は一致している。Mali-G72までのGPUコアの並列演算ユニットのレーンは4レーンで、論理的なベクタ長も4レーンだった。

 それに対して、PC向けGPUでは、論理ベクタ長はもっと広い。NVIDIAの論理ベクタ長は「WARP」で32レーン、AMDは「Wavefront」で64レーン。ただし、物理的な演算ユニットは、論理ベクタ長よりせまい場合も多く、その場合は複数サイクルで論理ベクタを実行していた。

 たとえば、AMDのGCN(Graphics Core Next)の場合は、物理的な演算ユニットは16レーンで、4サイクルかけて64レーンのWavefrontを実行する。

 それに対して、Armの場合は、4レーンの演算ユニットで、1サイクルで4レーンの論理ベクタ「Quad」を実行するスタイルを取っていた。Scalar/SIMTの利点の1つは、論理ベクタ長を長く取ることによって、コントロールオーバーヘッドを小さくして、GPUの実行効率を上げることだ。しかし、Armは、4レーンとせまいレーンを採用したため、Scalar/SIMT型としては、異例に効率が悪かった。

 今回のMali-G76では、物理的な演算レーンを8レーンに拡張して、論理ベクタ長も8レーンにと拡張した。Scalar/SIMT本来の、コントロールオーバーヘッドの少ない高効率なアーキテクチャへと近づいたことになる。依然としてPC向けGPUと比べると論理ベクタ長はせまいものの、8レーンとすることで、従来と比べて効率は倍増している。

 下のチャートはArmのMali-G72とMali-G76で、電力効率を比較したものだ。両GPUを同じレーン数で比較したものとなっている。濃いブルーが演算で、G72とG76を同じレーン数で比較している。つまり、Mali-G76のシェーダコア数のほうが、Mali-G72の半分となる。

 実行レーンとレジスタ、メッセージングなどの電力は、G76とG72で変わらない。しかし、ディスパッチコントロールとキャッシング、クアッドコントロールの電力は、Mali-G76のほうがずっと小さくなっている。

 まず、クアッドとディスパッチについては、バッチの粒度がG76のほうが2倍の8スレッドなので、コントロールに必要なリソースが半減しオーバーヘッドが減る。

 キャッシュは、1個のシェーダコア内で従来の2倍のスレッドが走り、キャッシュを共有するため、キャッシュサイズを変更しなくても効率を保てているためだと見られる。たとえば、命令のキャッシングは、各スレッドバッチが、同じシェーダ命令の異なる部分をピックするため、粒度が大きなSIMTのほうが効率がよくなる。

Mali-G76とMali-G72を同じ実行レーン数で比較した電力効率の図

【お詫びと訂正】記事初出時、一部プロセッサの表記が誤っておりました。お詫びして訂正させていただきます。

 Armがせまい論理ベクタ長にこだわるのは、解像度の低い画面のサポートも考慮しているからだ。

 Scalar/SIMTでは、基本的にマスクレジスタを使って、プレディケーションによって分岐を制御する。解像度の高い画面では、多くのピクセルの分岐方向がそろうため、プレディケーションによって効率的に制御できる。そのため、論理ベクタ長を広くしても効率がいい。

 解像度が低く、かつ画面がせまいスクリーンでは、ピクセルの条件分岐がそろわないケースが多くなる。そのため、解像度が低いスクリーンでは、論理ベクタ長が長いと、そのなかで分岐方向がそろわない条件分岐が頻発し、プレディケーションの制御の効率が悪くなる。そのため、論理ベクタ長が短いほうが有利となる。

タイリングアーキテクチャ

 Arm GPUは、モバイルGPUによくあるタイリングアーキテクチャを取る。いったん、画面内のジオメトリプロセッシングをすべて行なって、メモリに頂点(ポリゴン)をストア、そののち、画面を分割したタイル毎に頂点を読み込んでラスタライズし、ピクセルプロセッシングを行なう。

 Mali-G76では、ポリゴンリストのライトバックのアウトオブオーダ制御をサポート、複数のシェーダコアによるポリゴンリストの書き込み時の、ポリゴンリストの整列のためのストールを軽減した。

 Armアーキテクチャでは、シェーダコアのなかにタイルメモリも含めてタイリング制御のユニットをすべて備える。Bifrostアーキテクチャでは、タイルメモリはセパレーションが可能になっており、4枚までのマルチレンダターゲットに対応する。また、タイルのデプスデータのプリロードに、スペアタイルスペースを使うことができる。

Mali-G76世代でのマイクロアーキテクチャ拡張

 タイリングアーキテクチャを取るArmのMali GPUは、VRでは利点を持つ。ジオメトリ演算は1回でメモリにストアし、2つのビューポイントそれぞれのタイルごとに頂点を読み出してラスタイラズすることで、ジオメトリ処理の重複を避けることができる。

 ただし、Mali-G76でも、ラスタライザ自体のVR向け拡張は行なわれていない。しかし、GPU性能の向上とシェーダコア自体の拡張によってVR性能も36%向上している。

Mali-G76のVR性能

480演算ユニットまでの構成が可能

 Mali-G76は、ほかのArm GPUと同様に、シェーダコア数をチップベンダーが選択できる。Mali-G76の場合は、4シェーダコアから20コアまでのコンフィギュレーションが可能だ。

 また、ホストインターフェイスACEは最大4ポートまで拡張可能となっている。L2キャッシュは2から4スライスの構成が可能で、512KBから最大4MBをサポートする。

Mali-G76の全体像
Mali-G76のオーバービュー
PDF版はこちら

 従来のMali-G72では、Armは最大32シェーダコア構成をサポートしていた。しかし、Mali-G76では20コアまでに最大数を減らした。これは、演算レーンが8レーンとなり、シェーダコア自体の構成が大きくなったためだ。

 Mali-G72の場合、各実行エンジンに4レーンの実行レーン、各シェーダコアに3個の実行エンジンで、32コア合計で、実行レーンは計384ユニットが最大だった。

 それに対して、Mali-G76では、各実行エンジンに8レーンの実行レーン、各シェーダコアに3個の実行エンジンで、20コア合計で、実行レーンは計480ユニットが最大となる。同じプロセスで製造しても、最大構成での性能はMali-G76のほうが25%ほど高くなる。

Mali-G76とMali-G72最大構成の比較

 Mali-G76のシェーダコアのサイズは、実行レーンを2倍にしても、1.28倍の増加にとどまるという。そのため、同じダイエリアで、Cortex-A76のほうが演算ユニット数を増やすことが可能で、電力効率も高くなる。

 ちなみに、480演算ユニットまでの構成では、7nm世代のモバイルSoC (System on a Chip)でトップクラスのコアを構成できる。

 Armは、Mali-G76のライセンスを開始している。モバイルGPUは、ArmのMali GPUのパートナーだったMediatekが、Imagination TechnologiesのPowerVRの採用に転じるなど、変化が激しい。

 GPUアーキテクチャの拡張で、効率性を引き上げたMali-G76で、7nmプロセス世代にチャレンジする。もっとも、Mali-G76自体はRTL(Register Transfer Level)で提供されているため、どのプロセス技術にも載せることができる。