Graphics Core Next

Graphics Core Next  とはAMDによって開発されたマイクロアーキテクチャのシリーズおよび命令セットの両方を指すコードネーム。GCNはAMDによって同社のGPU向けにTeraScaleマイクロアーキテクチャ命令セットの後継として開発された。最初のGCN搭載製品は2011年に発表された。

GCNはAMD Radeon HD 7700-7900、HD 8000、RX 240-290、RX 300、RX 400、RX 500、Vegaシリーズに加えてRadeon VIIグラフィックスカードの28nm、14nm、7nmグラフィックスチップで使用されている。また、コードネーム"Temash"、"Kabini"、"Kaveri"、"Carrizo"、"Beema"および"Mullins"などのAMD Accelerated Processing Unit、またLiverpool  およびDurango  でも使われている。

GCNはTeraScaleのVLIW SIMDアーキテクチャとは対照的なRISC SIMDマイクロアーキテクチャである。GCNはTeraScaleよりもかなり多くのトランジスタを必要とするが、GPGPU演算において優位となる。GCNはHyperZを実装する。

1. 命令セット
--------

GCN命令セットはx86-64命令セットと同様にAMDによって策定されている。GCN命令セットはGPUに特化して開発されており、除算などのマイクロ演算は持たない。

次の文書が公開されている。

GCN命令セット用のLLVMコードジェネレータが用意されている。これは例えばMesa 3Dに使われている。

AMD Southern Islands GPGPU命令セット  のオープンソースRTL実装 "MIAOW"。

2015年11月、AMDは "Boltzmann" 構想を発表した。AMD Boltzmann構想により、CUDAベースのアプリケーションを共通C++プログラミングモデルへ移植することが可能になるとされている。

Super Computing 15にて、AMDはHeterogeneous Compute Compiler 、クラスタークラス用のヘッドレスLinuxドライバーおよびHSAランタイム基盤、High Performance Computing 、およびCUDAベースのアプリケーションを共通C++プログラミングモデルに移植するHeterogeneous-compute Interface for Portability  ツールを発表した。

2. マイクロアーキテクチャ
--------------

2016年1月時点で、命令セット "Graphics Core Next" と一貫して呼ばれるマイクロアーキテクチャのファミリーは3つのイテレーションがあると見られる。命令セットの面においてはその違いはかなり小さく、マイクロアーキテクチャはお互いにあまり違いはない。

2.1. コマンド処理
-----------

2.1.1. グラフィックスコマンドプロセッサ
-----------------------

グラフィックスコマンドプロセッサ  はGCNマイクロアーキテクチャの機能ユニットであり、いくつかあるタスクの中で特に、非同期シェーダーの役割を担っている。ショートビデオ「AMD Simplified: Asynchronous Shaders」では、「マルチスレッド」「プリエンプション」「非同期シェーダー」の違いが視覚化されている。

2.1.2. 非同期コンピュートエンジン
--------------------

非同期コンピュートエンジン  は、演算目的に従事する明確な機能ブロックである。目的としては、グラフィックスコマンドプロセッサと似ている。

2.1.3. スケジューラ
-------------

GCNの第3世代より、ハードウェアは2基のスケジューラを搭載している。ひとつはシェーダー実行  中のウェーブフロントのスケジュールを行ない、もうひとつの新しいスケジューラは描画キューとコンピュートキューの実行のスケジュールを行なう。後者は、固定機能パイプライン速度によって制限されるグラフィックスコマンドもしくは帯域幅のせいでCUの利用率が低いときにコンピュート演算を実行することで、パフォーマンスを向上する。この機能は非同期コンピュートとしても知られる。

与えられたシェーダーに対して、GPUドライバーは遅延を最小限にするため命令の実行順を適切に選択する必要がある。これはCPUによって行われ、またときおり「スケジューリング」と呼ばれることもある。

2.2. ジオメトリプロセッサ 
------------------------------------

ジオメトリプロセッサはジオメトリアセンブラ、テッセレータおよびバーテックスアセンブラを含んでいる。

ジオメトリプロセッサのGCNテッセレータはDirect3D 11およびOpenGL 4で定義されるようなハードウェアでのテッセレーションを実現する。

GCNテッセレータはAMDの最新のSIPブロックで、かつてのATI TruFormおよびTeraScaleのハードウェアテッセレーションにあたる。

2.3. コンピュートユニット 
------------------------------

各コンピュートユニット  はCUスケジューラ、分岐およびメッセージユニット、4基のSIMDベクタユニット、4つの64KiB VGPRファイル、1基のスカラユニット、4KiBのGPRファイル、64KiBのローカルデータ共有、4基のテクスチャフィルタユニット、16基のテクスチャフェッチロード・ストアユニットおよび16KiBのL1キャッシュで構成される。4基のコンピュートユニットは16KiB単位の命令キャッシュと32KiBのスカラデータキャッシュを共有する。これらはL2キャッシュによってバックアップされている。SUは一度に1個演算するが、SIMD-VUは一度に16要素を演算する。さらに、SUはいくつかの他の演算を分岐のように扱うことができる。

いずれのSIMD-VUも各々でそのレジスタを記憶するメモリを持っている。それらには2種類のレジスタがある。4バイトの数字を保持するスカラレジスタ  と、4バイト数値を64セット保持するベクタレジスタ  である。ベクタレジスタ上で演算するとき、どの演算も64個の数値で並列に行われる。つまり、それらで何かを処理をさせる度に64個を入力することができる。例えば、64個の異なるピクセルを一度に処理させることができる。

いずれのSIMD-VUも512個のスカラレジスタと256個のベクタレジスタを抱えている。

2.3.1. CUスケジューラ
---------------

CUスケジューラはSIMD-VUでどのウェーブフロントを実行させるかを選択するハードウェア機能的ブロックである。これはスケジューリングサイクル毎に1基のSIMD-VUを取り上げる。これはハードウェアまたはソフトウェアにおいて他のスケジューラと混同されることはない。

ウェーブフロント  「シェーダー」はグラフィックス処理を行なう小さなプログラムであり、また「カーネル」はGPGPU処理を行なう小さなプログラムである。前者は通例GLSL/HLSLで記述されるが、後者はOpenCL C言語もしくはGLSL/HLSLで記述できる。これらのプロセスはレジスタをあまり必要とせず、システムまたはグラフィックスメモリからのデータの読み込みを必要とする。この操作は大きく遅延が生じる。AMDとNVIDIAは複数のスレッドをグループ化するという方法でこの不可避な遅延を隠蔽するという、よく似たアプローチを選択している。AMDはこのグループをウェーブフロント、NVIDIAはワープと呼んでいる。スレッドのグループは遅延を隠蔽する仕組みを実装するGPUスケジューリングの最も基本的なユニットであり、SIMDスタイルで処理されるデータの最小サイズ、コードの最小実行可能ユニット、同時に全てのスレッドを単一の命令で処理する手段である。全てのGCN-GPUではウェーブフロントは64スレッドで構成され、全てのNVIDIA GPUではwarpは32スレッドで構成される。

AMDの解決策は、複数のウェーブフロントを各SIMD-VUに割り振ることである。ハードウェアはレジスタを異なるウェーブフロントに振り分けて、メモリにある一つのウェーブフロントが何らかの結果を待機している時、CUスケジューラはSIMD-VUに他のウェーブフロントを実行させる。ウェーブフロントはSIMD-VU毎に割り振られており、SIMD-VUはウェーブフロントを入れ替えない。最大10個のウェーブフロントが1基のSIMD-VUに割り振られる。

CodeXLでは、SGPRおよびVGPRの数と波紋の数の関係を表にしているが、基本的にSGPRSの場合はmin、VGPRSの場合は256/numwavefrontsとなる。

ストリーミングSIMD拡張命令に関連して、この最も基本的な並列度の概念は、しばしば「ベクトル幅」と呼ばれることに注意されたい。ベクトル幅は、その中の総ビット数によって特徴付けられる。

2.3.2. SIMDベクタユニット
------------------

各SIMDベクタユニットは

16レーンの整数型および浮動小数点ベクタのALU
64KiBベクタ汎用レジスタ
48ビットプログラムカウンタ
10個のウェーブフロント用命令バッファ
ウェーブフロントは64スレッドのグループで、一つの論理VGPRのサイズである。
64スレッドウェーブフロントは4サイクルで16レーンSIMDユニットに渡される。各SIMD-VUは10個のウェーブフロント命令バッファを持ち、1つのウェーブフロントの実行に4サイクルを要する。

2.4. オーディオおよびビデオアクセラレーションSIPブロック
--------------------------------

追加のASICブロックにおける最も大きな違いは このようなASICブロックはGCNマイクロアーキテクチャまたはGCN命令セットのいずれとも働きかけない。これらはGCNのイテレーションを実装しているすべての、またはほとんどのチップにある単純なASICブロックである。この項目はGCN命令セットおよびマイクロアーキテクチャを文書化しているものと思われるが、ASICブロックについての情報を見つけるのはやや困難である。

2.5. 統合型仮想メモリ 
--------------------------------------

AnandTechは2011年の解説で、Graphics Core Nextでサポートされる統合型仮想メモリ  について説明している。

2.6. ヘテロジニアスシステムアーキテクチャ 
-----------------------------

ハードウェアに実装されているいくつかのHSA固有機能はオペレーティングシステムのカーネルおよび特定のデバイスドライバのサポートを必要とする。例えば、2014年7月にAMDは安定版Linuxカーネル 3.17用にGraphics Core NextベースのRadeonグラフィックスカードをサポートする83個のパッチを公開した。このドライバは "HSAカーネルドライバ" と名付けられ、DRMグラフィックスデバイスドライバが/drivers/gpu/drmに配置されたように/driver/gpu/hsaに配置され、Radeonカード用のDRMドライバを改良したものであった。この初期の実装は "Kaveri" APUまたは "Berlin" APU への対応に重点を置き、すでにあるRadeonカーネルグラフィックスドライバ  との組み合わせで動作した。

2.7. ハードウェアスケジューラ
-----------------

これらはスケジューリングを行うために使用され、 少なくとも1つのACEにおいて少なくとも1つの空のキューが存在するまでバッファリングすることによって、ドライバからハードウェアへのACEへのコンピュートキューの割り当てをオフロードし、HWSは、すべてのキューが満杯になるか、安全に割り当てられるキューがなくなるまで、バッファリングされたキューを直ちにACEに割り当てる。スケジューリング作業の一部には、優先順位の高いキューが含まれている。これは、重要なタスクを他のタスクよりも高い優先順位で実行できるようにするもので、優先順位の低いタスクが優先順位の高いタスクを実行するためにプリエンプションされる必要はない。したがって、優先順位の高いタスクが使用していないリソースを他のタスクに使用させながら、GPUをできるだけ占有するようにスケジュールされた優先順位の高いタスクとタスクを同時に実行することができる。 これらは本質的にディスパッチ・コントローラーを持たない非同期型コンピュート・エンジンである。第4世代GCNマイクロアーキテクチャーで初めて導入されたが、第3世代GCNマイクロアーキテクチャーにも内部テストのために存在していた。ドライバーのアップデートにより、第3世代GCNパーツのハードウェア・スケジューラーが製品として使用できるようになった。

2.8. プリミティブ破棄アクセラレータ
--------------------

このユニットは縮退トライアングルがバーテックスシェーダーを通過し、さらにどのフラグメントもカバーしないトライアングルがフラグメントシェーダーを通過する前に、それを破棄する。このユニットは第4世代GCNマイクロアーキテクチャで追加された。

3. 世代
-----

3.1. 初代GCN
----------

Southern Islands系GPU、Radeon HD 7000/HD 8000/Rx 200/Rx 300/Rx 400シリーズでサポート。

CPUおよびGPUの統合型アドレス空間で64ビットアドレス割り当てをサポート
PCI-E 3.0をサポート
GPUはページフォールトといった様々なイベントでCPUに対して割り込み要求を送る
Partially Resident Texturesをサポート、DirectXおよびOpenGL拡張機能によって仮想メモリのサポートが有効になる
AMD PowerTuneサポート、特定のTDPの範囲内で動的にパフォーマンスを調整する
Mantle をサポートGraphics Core Nextマイクロアーキテクチャは4基のTMUと1基のROPからなる64基のシェーダープロセッサをコンピュートユニット  に統合している。計算処理およびディスパッチを制御する非同期コンピュートエンジン  がある。

3.1.1. ZeroCore Power
---------------------

ZeroCore Powerは長期無負荷省電力技術である。AMD ZeroCore Power技術はAMD PowerTuneに付随する。

3.1.2. チップ
----------

単体GPU: 

Oland
Cape Verde
Pitcairn
Tahiti

3.2. 第2世代GCN
------------

第2世代GCNはRadeon HD 7790とともに追加され、Radeon HD 8770, Rx 260/260X, Rx 290/290X, R9 295X2, Rx 360, Rx 390/390X, Rx 455、またSteamrollerベースのデスクトップ向けKaveri APU、モバイル向けKaveri APU、PumaベースのBeemaおよびMullins APUにも適用されている。これはAMD TrueAudioやAMD PowerTune技術の改良版といった最初のGCNを上回るいくつかの有利な点を備えている。

第2世代GCNではシェーダーエンジン  と呼ばれる機構を追加している。シェーダーエンジンは1基のジオメトリプロセッサ、最大11基のCU 、ラスタライザ、ROPおよびL1キャッシュから構成される。シェーダーエンジンに含まれないのものにGraphics Command Processor、8基のACE、L2キャッシュおよびメモリコントローラ、またオーディオおよびビデオアクセラレータ、ディスプレイコントローラ、2基のDMAコントローラとPCIeインターフェースがある。

A10-7850K "Kaveri"は8基のCU、および非依存スケジュールとアイテムのディスパッチ用に8基のACEを搭載している。

2013年11月にAMD Developer Summitでマイケル・メンターはRadeon R9 290Xのプレゼンテーションを行った。

3.2.1. チップ
----------

単体GPU:

Bonaire
HawaiiAPU:

Temash
Kabini
Liverpool
Durango
Kaveri
Godavari
Mullins
Beema
Carrizo-L

3.3. 第3世代GCN
------------

第3世代GCNは2014年にTonga GPUを搭載するRadeon R9 285およびR9 M295Xとともに紹介された。注目点はテッセレーションパフォーマンスの改善、メモリ帯域幅の使用を抑制するためのデルタ色可逆圧縮、改良されてより効率的になった命令セット、新しい高品質ビデオスケーラ、および新しいマルチメディアエンジンである。デルタ色圧縮はMesaでサポートされた。

3.3.1. チップ
----------

単体GPU:

Tonga , comes with UVD 5.0
Fiji , comes with UVD 6.0 and High Bandwidth Memory APU:

Carrizo, comes with UVD 6.0
Bristol Ridge
Stoney Ridge

3.4. 第4世代GCN
------------

Arctic Islands系GPUは、2016年の第2四半期にAMD Radeon 400シリーズとして登場した。3DエンジンはTongaチップに搭載されているものと同じであるが、Polarisはより新しいDisplay Controllerエンジン、UVDバージョン6.3などを搭載している。

Polaris 30以外のすべてのPolarisベースのチップは、サムスン電子が開発し、GlobalFoundriesにライセンスされた14nm FinFETプロセスで製造されている。Polaris 30は、サムスンとGlobalFoundriesが開発した12nm LP FinFETプロセスノードで製造されている。第4世代GCN命令セットアーキテクチャは、第3世代GCNと互換性があり、14nm FinFETプロセスへの最適化により、第3世代GCNよりも高いGPUクロックを実現している。アーキテクチャの改善には、新しいハードウェアスケジューラ、新しいプリミティブディスカードアクセラレータ、新しいディスプレイコントローラ、4K解像度のHEVCを毎秒60フレームかつ、各カラーチャンネル10ビットでデコード可能な最新のUVDなどが含まれる。

3.4.1. チップ
----------

単体GPU:

Polaris 10 
Radeon RX 470, 480
Polaris 11 
Radeon RX 460, 560
Polaris 12 
Radeon RX 540, 550
Polaris 20 
Radeon RX 570, 580
Polaris 21 
Radeon RX 560
Polaris 22
Radeon RX Vega M GH, M GL
Polaris 30 
Radeon RX 590

3.4.2. 演算性能
-----------

全てのGCN第4世代GPUのFP64性能は、FP32性能の1/16である。

3.5. 第5世代GCN
------------

2017年1月、AMDは「Next-Generation Compute Unit」と呼ばれる次世代GCNアーキテクチャーの詳細を明らかにした。新しい設計により、クロックあたりの命令数の増加、クロック速度の向上、HBM2のサポート、より大きなメモリアドレス空間が期待されていた。ディスクリート・グラフィックス・チップセットには「HBCC」が搭載されているが、APUには搭載されていない。さらに、新しいチップには、ラスタライズとレンダーの出力ユニットの改良が期待されていた。ストリームプロセッサーは前世代から大幅に変更され、8ビット、16ビット、32ビットの数値に対するRapid Packed Mathテクノロジーをサポートしている。これにより、低い精度が許容される場合には、性能面で大きなアドバンテージが得られる。

NvidiaはMaxwellでタイルベースのラスタライズとビニングを導入し、これがMaxwellの効率向上の大きな要因となった。AnandTechは、Vegaで導入される新しい「DSBR」により、エネルギー効率の最適化に関してVegaがようやくNvidiaに追いつくと想定した。

また、新しいシェーダーステージである「プリミティブシェーダー」のサポートも追加された。プリミティブシェーダーは、より柔軟なジオメトリ処理を実現し、レンダリングパイプラインのバーテックスシェーダーとジオメトリシェーダーを置き換える。

3.5.1. チップ
----------

単体GPU:

Vega 10
Radeon RX Vega 64, 56
Vega 12
Vega 20
Radeon VIIAPU: Raven Ridgeには、VCEおよびUVDに代わるVCN 1が搭載され、VP9のハードウェアデコードが可能になった。

3.5.2. 演算性能
-----------

Vega 20を除くすべてのGCN第5世代GPUの倍精度浮動小数点性能は、FP32性能の1/16である。Vega 20ではFP32の1/2となっている。すべてのGCN第5世代GPUは、FP32の2倍の性能を持つ半精度浮動小数点計算をサポートしている。

4. 脚注
-----

5. 外部リンク
--------

[1]