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

FinFET時代のAMDのGPU「Polaris」アーキテクチャ

FinFET 3Dトランジスタの初のAMD GPU

 AMDの新GPU「Radeon RX 400」ファミリーは、新世代GPUアーキテクチャ「Polaris」をベースとしている。Polarisで、AMDはプロセス技術にFinFET 3Dトランジスタを初めて採用、電力とコストに対する性能を大幅に高めた。

 Radeon RX 480(Polaris 10)は、米国で200ドルを切る価格なのに、5.8TFLOPS(FP32単精度浮動小数点演算)の性能を誇る。AMDは、今回のPolarisでは、ハイエンドGPUから投入せずに、あえてミッドレンジGPUから投入。コストパフォーマンスで勝負を挑む。しかし、それだけではない、Polarisは、AMDにとってGPUアーキテクチャの次の大変革の序章でもある。AMD GPUの大きな特徴であるコマンドプロセッサ部分が大幅に強化されたからだ。

 AMDのPolaris系GPUは、14nm FinFETプロセスで製造される。FinFETは、一般に3Dトランジスタと呼ばれる、トランジスタ構造を立体化したプロセスだ。従来の平面上のプレーナ型トランジスタよりも、リーク(漏れ)電流が大幅に抑えられ、スイッチング性能も上がる。一定の性能での、トランジスタの動的と静的な電力の両方が抑えられるため、電力あたりの性能が大幅に向上する。

 GLOBALFOUNDRIESによると、28nmに対して14nmは、性能を55%上げるか、電力を65%に抑えることが可能になるという。実際、Radeon RX 480は5.8TFLOPSで150Wと、従来のRadeon R9 290と比べると、1.9倍の性能/電力比となっている。RX 470とR9 270Xの比較では2.8倍だ。また、アーキテクチャの拡張により、演算コアCU(Compute Unit)の性能も15%向上しているという。

 さらに、製造コストに影響するトランジスタの微細化によって、ダイサイズも小さくなっている。単精度で5.8TFLOPSの性能は、28nm世代ならRadeon R9 390クラスの性能だが、ダイサイズは、R9 390の438平方mmに対して、Radeon RX 480は232平方mmと53%程度だ。つまり、同程度の性能を半分のサイズのチップに収めることができている。

ミッドレンジのGPUのサイズに2304個の演算ユニットを搭載

 Polaris 10ダイは、36個のCUを搭載する。各CUに64個の32-bit演算ユニット(Stream Processor)を搭載するため、演算ユニット数は合計で2,304個となる。これまでの世代なら、300ドル台以上の価格帯で登場するアッパーミドルGPUの演算ユニット数だ。メモリインターフェイスは256-bitと、アッパーミドルGPUの標準的なインターフェイス幅で、対応メモリはGDDR5だ。

 Polaris 10は、当面2つの製品で投入される。Radeon RX 480はフルスペックの製品で、CUは36個、動作周波数はブーストが1.266GHz、ベースが1.12GHz。パイプラインアーキテクチャは変更せずに、プロセス技術の進歩によって動作周波数が引き上げられている。下位のRadeon RX 470は、機能を一部無効にしたバージョンで、アクティブなCUは32個、演算ユニット数は2,048個となる。

 Polaris 10の全体構成は、下の図のようになっている。大きく分けると、GPUにジョブを流すコマンドプロセッサなどのフロントエンドと、演算ユニットのバンドルであるCUとジオメトリプロセッサなどで構成される演算コア、それからメモリ回り、ハブに接続されたマルチメディアユニットやディスプレイパイプなどになる。演算コアは、複数のCUをバンドルした「Shader Engine」で構成されている。Polaris 10の場合は4個のShader Engineで構成される。

Radeon RX 480の概要
PDF版はこちら
Polaris 10の全体構成

GPUアーキテクチャ変革の次のステップとなるスケジューラ

 Polaris世代で、アーキテクチャ的に大きく変わったのは、フロントエンドの部分だ。AMDは、ここにハードウェアスケジューラ(HWS)を加えた。これは、GPUが実行するタスクをきめ細かく制御するためのスケジューラだ。HWSによってPolarisでは、複数のワークロードが混在するような利用環境で、柔軟で効率の高い処理が可能となる。グラフィックスのバックグラウンドでコンピュートタスクが走る、バーチャルリアリティ(VR)などでは大きな効果を発揮する。

Polarisアーキテクチャで拡張されたフロントエンド

 AMDは、GPUアーキテクチャにおいて、このフロントエンドの部分の拡張に継続的に力を注いできた。比較的粒度の小さなタスクを、効率よくGPUで走らせることができるようにするためだ。

 従来型のGPUは、GPUのタスクを制御するコマンドプロセッサを1個搭載している。NVIDIAの現在のGPUも、1個のコマンドプロセッサを持つ。それに対して、AMDはコマンドプロセッサとは別に、コンピュートタスクを制御する「ACE(Asynchronous Compute Engine)」を搭載した。これによって、グラフィックスタスクと複数のコンピュートタスクを平行して走らせることが容易になった。

 AMDはこの路線をさらに推し進め、第2段階として、GPU上で走るタスクをリアルタイムにきめ細かく制御するためのHWSを加えた。従来型のGPUアーキテクチャの場合、GPUのタスクの制御は、CPU上で走るカーネルドライバの中のソフトウェアスケジューラが担ってきた。そのため、GPU上で走るタスクを、リアルタイムでスケジュール最適化することができなかった。

 Polarisのハードウェアスケジューラでは、CPU側のソフトウェア処理の一部をGPU上のプログラマブルプロセッサ上で実行する。複数のタスクやプロセスをリアルタイムに最適化スケジューリングし、効率的に実行できるようにする。また、プライオリティが必要なタスクは、優先的に実行するようにCU群をリザーブすることもできる。タスクに対するリソースのアロケーションも、リアルタイムに柔軟に変更することができる。

 もともとAMD GCNアーキテクチャは、GPUの中でグラフィックスとコンピュートを混在させて実行できる。また、現在のGCNは、コンピュートとグラフィックスのどちらのタスクも、命令単位でコンテクストをスイッチできる。そうしたGCNアーキテクチャの特質とハードウェアスケジューラを組み合わせることで、タスクのきめ細かな制御が可能となる。

Polarisでのタスクの制御

 Polarisのハードウェアスケジューラは、GPUの進化の次のステップだ。これまでのGPUは、CPUに制御されるコプロセッサで、タスクスケジューリング1つ取っても自立性がなかった。それに対して、AMDアーキテクチャでは、Polaris世代でグラフィックスもコンピュートも、並列に柔軟にスケジュールできるようになっている。CPUでは当たり前だが、GPUでは不可能だったことが、また1つできるようになった。

 この先には、フルに自立制御できるGPUというゴールがあり、AMDは着実にその方向へと向かっている。Polarisでのハードウェアスケジューラの拡張は、GPUというプロセッサの進化の次の段階を示す重要なステップだ。これについては、アーキテクトのインタビューを後で紹介したい。また、スケジューラの拡張は、CPUとGPUが密に連携し、GPUがより粒度の小さなタスクも柔軟にこなすHSA(Heterogeneous System Architecture)のビジョンに沿っている。

ジオメトリエンジンとCUコアのアーキテクチャも拡張

 Polaris 10の4個のShader Engineは、それぞれが12個のCUと1個のジオメトリプロセッサ+ラスタライザで構成される。頂点処理やテッセレーション、スキャンコンバージョン、ラスタライズ、階層Zなどの処理が、ジオメトリプロセッサ&ラスタライザで行なわれる。CUは3ユニットずつバインドされ、L1命令キャッシュなどを共有する。

 ジオメトリエンジンにも拡張が加えられた。プリミティブディスカードアクセラレータによって、ラスタライズする際に消えてしまう不要な頂点を前もって削除できるようになった。これは隠面の頂点の除去だけでなく、テッセレーションにより増えた頂点のうち、不要部分の除去などを行なう拡張だ。そのため、テッセレーション時の性能が向上した。また、インデックスキャッシュが搭載され、同じインデックスデータを使い回しするインスタンスの処理が高速になった。

ジオメトリエンジンの拡張

 GCNアーキテクチャの中核となるCUの内部構造は、初代のGCN1の時から大きくは変わっていない。NVIDIAはCUにあたるSM(Streaming Multiprocessor)の構造やレジスタ量を世代毎に変えているが、AMDは変更しない。これは、AMDのCUが当初から余裕を持って設計されているためだ。

Polaris CUのアーキテクチャ
PDF版はこちら

 ただし、ベースアーキテクチャは同一でも、改良は多数行なわれており、今回は命令プリフェッチの導入や、インストラクションバッファの増大、L2アクセスへのリクエストのグループ化によるL2アクセス効率化が行なわれている。命令を先読みしてバッファに取りこむことが可能になり、バッファも強化されたため、命令読み込み待ちのストールが減り、CUの実効効率が上がった。

Polaris CUの拡張

 GPUはストリームプロセッサだが、複数のスレッドバッチを並列に走らせている。16-wayのベクタプロセッサに対して、Wavefrontと呼ばれるバッチがプールされ、プールされた多数のWavefrontから実行できる命令が演算ユニットにディスパッチされる。1つのCUで走っているWavefrontは同一カーネルの場合が多いが、Wavefront毎に、カーネルのうちの異なる部分の命令を実行する。そのため、カーネルが複雑になったりすると、命令のプリフェッチが重要となる。

AMDのCUのベクタユニットの命令実行とスケジューリング
PDF版はこちら

 PolarisのCUの演算ユニットでは、「ネイティブFP16/int16」実行がサポートされた。従来のAMDアーキテクチャでは、FP16半精度浮動小数点やint16整数などの16-bitデータの処理は、32-bitの演算ユニットで実行されていた。そのため、演算ユニットは32-bitの浮動小数点演算や整数演算パイプがフルに使われ、レジスタも32-bit幅のうち半分だけを使う形で32-bitずつ読み書きされていた。

 しかし、Polarisからは、16-bitの演算はネイティブの16-bit実行パスで実行されるようになり、レジスタも16-bit分だけを読み書きするようになった。これによって、16-bit処理の電力消費が抑えられるようになった。これは、16-bitを多用するディープラーニングやコンピュータビジョンで省電力効果を発揮するほか、一部のグラフィックスでも有効だ。

HDRディスプレイに本格対応

 AMDは、NVIDIAがGeForce GTX 1080(GP104)で採用した、Micron TechnologyのGDDR5Xは採用しなかった。これはGDDR5Xが1社だけで製造するメモリであり、次世代グラフィックスメモリの本命は来年(2017年)に登場するGDDR6になるとAMDが考えているからだという。また、GDDR5Xにはメモリのフェッチグラニュラリティなど、扱いにくい問題があるため見送ったという。次世代のGDDR6は、GDDR5と同様のメモリフェッチグラニュラリティの仕様になるという。ちなみに、HBM2もAMDは現状ではまだ量産GPUに採用するのは早すぎると考えているため見送った。

 Polaris 10は、GDDR5の最高スペックをサポートする。メモリ転送レートは、AMDのボードで8Gbps、リファレンスコンフィギュレーションで7Gbps以上となっている。実際の製品では、ベンダーによって7Gbps以上でバリエーションがある。メモリ帯域は8Gbpsで256GB/s、7Gbpsでは224GB/sとなる。また、実効メモリ帯域を高めるために、カラー圧縮機能が強化されている。L2キャッシュは2MBとなり、メモリアクセス頻度を下げて性能と電力効率を上げている。

カラー圧縮によってメモリの実効帯域を引き上げる
キャッシュの増量と改良によりメモリアクセスの電力を減らす

 ディスプレイ出力では、PolarisはDisplayPort 1.3 HBR3と、1.4 HDRに対応。実効データレートは最大32.4Gbpsとなり、最大で5K60pのディスプレイ表示までワンケーブルで可能となった。AMDは「HDR(High Dynamic Range: ハイダイナミックレンジ)」対応を重視しており、Polaris世代から本格的にHDRディスプレイへの対応を行なう。

 AMDは、GPUでオーディオプロセッシング機能を実現する「TrueAudio」を実装している。従来のTrueAudioは、Tensilica社のDSPコアをハードウェアで搭載していた。それに対して、Polaris世代では、専用DSPは搭載せず、GPUのシェーダプロセッサでオーディオを処理する実装へと変わった。APIレベルでは互換性を保つという。

 TrueAudioのシェーダプロセッサ実装も、Polarisアーキテクチャでハードウェアスケジューラを搭載したことで実現が容易になった。リアルタイム性が重要なオーディオタスクを、柔軟な優先度でプロセッサに割り当てることが可能になったためだ。

第2世代の14nmプロセスを使うPolaris 10

 Polarisファミリーのプロセス技術は、GLOBALFOUNDRIESの14nmプロセス「14LPP」だ。GLOBALFOUNDRIESの14LPPは、Samsungからライセンスを受けたもので、Samsungの2世代目のプロセス技術にあたる。14LPPは、GPUやCPUなど高性能チップのためのバリエーションを備えるプロセスだ。AMDは、非常に慎重なプロセス最適化を行ない、特に配線(メタル)レイヤーについては、GPUが必要とする配線密度とコストのバランスを取った構成としている。

右がAMDがPolarisで採用したと見られる配線構造
PDF版はこちら
プロセスロードマップ
PDF版はこちら
第2世代の14nmプロセスである14LPP

 回路設計では、セルライブラリは性能と密度のバランスを取った、9トラック(9T)ライブラリを採用。部分的にカスタム回路も作り、Polarisファミリーに最適なプロセス&回路としている。また、AMDのCPU/APU(Accelerated Processing Unit)から、最先端の省電力技術もPolarisに導入している。Polarisのプロセスや回路、省電力技術は、GPUとしては非常に優れたものとなっている。これは別記事で説明したい。

 AMDでは、Polaris 10と平行して、廉価版のPolaris 11ベースの「Radeon RX 460」も投入する。Polaris 11ダイは、16個のCUで1,024個の演算ユニットを備える。製品では歩留まりのために一部の機能が無効されており、RX 460のCUは14個、演算ユニットは896個の構成となる。TDPは75Wだ。

 Polaris 11のダイサイズは、124平方mmと低コストGPUらしい低コストなサイズとなっている。Polaris 10は232平方mmで、ミッドレンジGPUのサイズだ。これは、GeForce GTX 1080(GP104)の314平方mmというダイサイズと比べると、1ランク小さい。AMDは、小さなダイによる低製造コストを武器に、低価格競争を仕掛けている。

GPUダイサイズの遷移