メインメニューを開く

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

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(APU)、またLiverpool (PlayStation 4) およびDurango (Xbox One) でも使われている。

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

命令セット編集

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

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

GCN命令セット用のLLVMコードジェネレータ(バックエンドコンパイラ)が用意されている[3]。これは例えばMesa 3Dに使われている。

AMD Southern Islands GPGPU命令セット (Graphics Core Nextとも言う) のオープンソースRTL実装 "MIAOW"。

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

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

マイクロアーキテクチャ編集

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

コマンド処理編集

 
GCNコマンド処理:各非同期コンピュートエンジン (ACE) は入力コマンドを解析してコンピュートユニット (CU) にディスパッチする。各ACEは最大8つの非依存キューを管理することができる。ACEはグラフィックスコマンドプロセッサおよび2基のDMAエンジンと並列に演算することができる。グラフィックスコマンドプロセッサはグラフィックスキューを扱い、ACEはコンピュートキューを扱い、そしてDMAエンジンはコピーキューを扱う。各キューは他のタスクが完了するのを待つことなく処理対象をディスパッチし、GPUのシェーダーで非依存命令ストリームのインターリーブを可能にする。

グラフィックスコマンドプロセッサ編集

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

非同期コンピュートエンジン編集

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

スケジューラ編集

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

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

ジオメトリプロセッサ (Geometry Processor)編集

 
ジオメトリプロセッサ

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

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

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

コンピュートユニット (Compute Unit)編集

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

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

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

CUスケジューラ編集

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

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

全てのGCN-GPUではwavefrontは64スレッドで構成され、全てのNVIDIA GPUではwarpは32スレッドで構成される。

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

AMD CodeXL shows tables with the relationship between number of SGPRs and VGPRs to the number of wavefronts, but basically for SGPRS it is min(104, 512/numwavefronts) and VGPRS 256/numwavefronts.

Note that in conjunction with the SSE instructions this concept of most basic level of parallelism is often called a "vector width". The vector width is characterized by the total number of bits in it.

SIMDベクタユニット編集

各SIMDベクタユニットは

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

各SIMD-VUは10個のwavefront命令バッファを持ち、1つのwavefrontの実行に4サイクルを要する。

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

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

統合型仮想メモリ (Unified virtual memory)編集

AnandTechは2011年の解説で、Graphics Core Nextでサポートされる統合型仮想メモリ (unified virtual memory) について説明している[7]

ヘテロジニアスシステムアーキテクチャ (HSA)編集

 
GCN includes special purpose function blocks to be used by HSA. Support for these function blocks is available through amdkfd since Linux kernel 3.19.[9]

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

ハードウェアスケジューラ編集

They are used to perform scheduling[12] and offload the assignment of compute queues to the ACEs from the driver to hardware by buffering these queues until there is at least one empty queue in at least one ACE, causing the HWS to immediately assign buffered queues to the ACEs until all queues are full or there are no more queues to safely assign.[13] Part of the scheduling work performed includes prioritized queues which allow critical tasks to run at a higher priority than other tasks without requiring the lower priority tasks to be preempted to run the high priority task, therefore allowing the tasks to run concurrently with the high priority tasks scheduled to hog the GPU as much as possible while letting other tasks use the resources that the high priority tasks are not using.[12] These are essentially Asynchronous Compute Engines that lack dispatch controllers.[12] They were first introduced in the fourth generation GCN microarchitecture,[12] but were present in the third generation GCN microarchitecture for internal testing purposes.[14] A driver update has enabled the hardware schedulers in third generation GCN parts for production use.[12]

プリミティブ破棄アクセラレータ編集

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

イテレーション編集

Graphics Core Next編集

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

  • CPUおよびGPUの統合型アドレス空間で64ビットアドレス割り当て(x86-64アドレス空間)をサポート[7]
  • Partially Resident Texturesをサポート[17]、DirectXおよびOpenGL拡張機能によって仮想メモリのサポートが有効になる
  • AMD PowerTuneサポート、特定のTDPの範囲内で動的にパフォーマンスを調整する[18]
  • Mantle (API)をサポート

Graphics Core Nextマイクロアーキテクチャは4基のTMUと1基のROPからなる64基のシェーダープロセッサをコンピュートユニット (CU) に統合している。計算処理およびディスパッチを制御する非同期コンピュートエンジン (Asynchronous Compute Engine; ACE) がある。[19][20]

ZeroCore Power編集

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

チップ編集

GPU単体: (Southern Islands系)

  • Oland
  • Cape Verde
  • Pitcairn
  • Tahiti

GCN第2世代編集

 
AMD PowerTune "Bonaire"

GCN第2イテレーションは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 TrueAudioAMD PowerTune技術の改良版といった最初のGCNを上回るいくつかの有利な点を備えている。

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

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

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

チップ編集

GPU単体: (Sea Islands系):

  • Bonaire
  • Hawaii

APUへの統合

  • Temash
  • Kabini
  • Liverpool
  • Durango
  • Kaveri
  • Godavari
  • Mullins
  • Beema
  • Carrizo-L

GCN第3世代編集

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

チップ編集

GPU単体:

  • Tonga (Volcanic Islands family), comes with UVD 5.0
  • Fiji (Pirate Islands family), comes with UVD 6.0 and High Bandwidth Memory (HBM 1)

APUへの統合

  • Carrizo, comes with UVD 6.0
  • Bristol Ridge[26]
  • Stoney Ridge[26]

GCN第4世代編集

2016年第2四半期、Polarisアーキテクチャに基づいたAMD Radeon RX 400シリーズグラフィックスカードとともにArctic Islands系GPUが発表された。Polaris 1x のチップは全て14nm FinFETプロセスで製造される[27]。また、2017年にはクロックアップ版のRX 500シリーズが投入された。

チップ編集

GPU単体[28]

  • Polaris 10 (Ellesmere)
    • Radeon RX 470, 480
  • Polaris 11 (Baffin)
    • Radeon RX 460, 560
  • Polaris 12 (Lexa)
    • Radeon RX 540, 550
  • Polaris 20 (14nm LPPで製造し、Polaris 10のクロックを上げたもの)
    • Radeon RX 570, 580
  • Polaris 21 (14nm LPPで製造し、Polaris 11のクロックを上げたもの)
    • Radeon RX 560
  • Polaris 22
    • Radeon RX Vega M GH, M GL
  • Polaris 30 (12nm LPPで製造し、Polaris 20のクロックを上げたもの)
    • Radeon RX 590

精度による性能減少編集

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

脚注編集

  1. ^ “AMD Launches World’s Fastest Single-GPU Graphics Card – the AMD Radeon HD 7970” (プレスリリース), AMD, (2011年12月22日), http://www.amd.com/en-us/press-releases/Pages/amd-launches-worlds-fastest-2011dec22.aspx 2015年1月20日閲覧。 
  2. ^ Feature matrix of the free and open-source "Radeon" graphics device driver”. 2014年7月9日閲覧。
  3. ^ LLVM back-end amdgpu”. 2015年9月7日閲覧。
  4. ^ AMD Boltzmann Initiative – Heterogeneous-compute Interface for Portability (HIP)” (2015年11月16日). 2016年1月15日閲覧。
  5. ^ DirectX 12 Async Shaders An Advantage For AMD And An Achilles Heel For Nvidia Explains Oxide Games Dev
  6. ^ AMD Simplified: Asynchronous Shaders - YouTube
  7. ^ a b Not Just A New Architecture, But New Features Too”. AnandTech (2011年12月21日). 2014年7月11日閲覧。
  8. ^ Kaveri microarchitecture”. SemiAccurate (2014年1月15日). 2014年7月11日閲覧。
  9. ^ Dave Airlie (2014年11月26日). “Merge AMDKFD”. freedesktop.org. 2015年1月21日閲覧。
  10. ^ /drivers/gpu/drm”. kernel.org. 2014年7月11日閲覧。
  11. ^ [PATCH 00/83 AMD HSA kernel driver]”. LKML (2014年7月10日). 2014年7月11日閲覧。
  12. ^ a b c d e Angelini, Chris (2016年6月29日). “AMD Radeon RX 480 8GB Review”. Tom's Hardware: p. 1. http://www.tomshardware.com/reviews/amd-radeon-rx-480-polaris-10,4616.html 2016年8月11日閲覧。 
  13. ^ Dissecting the Polaris Architecture” (2016年). 2016年8月12日閲覧。
  14. ^ Shrout, Ryan (2016年6月29日). “The AMD Radeon RX 480 Review - The Polaris Promise”. PC Perspective: p. 2. http://www.pcper.com/reviews/Graphics-Cards/AMD-Radeon-RX-480-Review-Polaris-Promise/Polaris-Architecture-4th-Generation- 2016年8月12日閲覧。 
  15. ^ a b Smith, Ryan (2016年6月29日). “The AMD Radeon RX 480 Preview: Polaris Makes Its Mainstream Mark”. AnandTech: p. 3. http://www.anandtech.com/show/10446/the-amd-radeon-rx-480-preview/3 2016年8月11日閲覧。 
  16. ^ AMD Radeon HD 7000 Series to be PCI-Express 3.0 Compliant”. TechPowerUp. 2011年7月21日閲覧。
  17. ^ AMD Details Next Gen. GPU Architecture”. 2011年8月3日閲覧。
  18. ^ Tony Chen, Jason Greaves, “AMD's Graphics Core Next (GCN) Architecture”, AMD, http://meseec.ce.rit.edu/551-projects/fall2014/3-4.pdf 2016年8月13日閲覧。 
  19. ^ AMD Graphics Core Next (pdf)”. AMD. p. 40 (2011年6月15日). 2014年7月15日閲覧。 “Asynchronous Compute Engine (ACE)”
  20. ^ AMD's Graphics Core Next Preview: AMD's New GPU, Architected For Compute”. AnandTech (2011年12月21日). 2014年7月15日閲覧。 “AMD's new Asynchronous Compute Engines serve as the command processors for compute operations on GCN. The principal purpose of ACEs will be to accept work and to dispatch it off to the CUs for processing.”
  21. ^ Managing Idle Power: Introducing ZeroCore Power”. AnandTech (2011年12月22日). 2015年4月29日閲覧。
  22. ^ AMD's Kaveri A10-7850K tested”. AnandTech (2014年1月14日). 2014年7月7日閲覧。
  23. ^ AMD Radeon R9-290X” (2013年11月21日). 2014年7月18日閲覧。
  24. ^ http://images.anandtech.com/doci/9319/Slide%2019%20-%20GCN%20Overview.png
  25. ^ Add DCC Support”. Freedesktop.org (2015年10月11日). 2015年10月14日閲覧。
  26. ^ a b Cutress, Ian (2016年6月1日). “AMD Announces 7th Generation APU”. Anandtech.com. http://www.anandtech.com/show/10362/amd-7th-generation-apu-bristol-ridge-stoney-ridge-for-notebooks 2016年6月1日閲覧。 
  27. ^ http://www.guru3d.com/articles-pages/radeon-technologies-group-january-2016-amd-polaris-architecture,1.html
  28. ^ WhyCry (2016年3月24日). “AMD confirms Polaris 10 is Ellesmere and Polaris 11 is Baffin”. VideoCardz. 2016年4月8日閲覧。