Graphics Core Next








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シリーズグラフィックスカードの28nmおよび14nmグラフィックスチップで使用されている。また、コードネーム"Temash"、"Kabini"、"Kaveri"、"Carrizo"、"Beema"および"Mullins"などのAMD Accelerated Processing Unit、またLiverpool (PlayStation 4) およびDurango (Xbox One) でも使われている。


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





目次






  • 1 命令セット


  • 2 マイクロアーキテクチャ


    • 2.1 コマンド処理


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


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


      • 2.1.3 スケジューラ




    • 2.2 ジオメトリプロセッサ (Geometry Processor)


    • 2.3 コンピュートユニット (Compute Unit)


      • 2.3.1 CUスケジューラ


      • 2.3.2 SIMDベクタユニット




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


    • 2.5 統合型仮想メモリ (Unified virtual memory)


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


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


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




  • 3 イテレーション


    • 3.1 Graphics Core Next


      • 3.1.1 ZeroCore Power


      • 3.1.2 チップ




    • 3.2 GCN第2世代


      • 3.2.1 チップ




    • 3.3 GCN第3世代


      • 3.3.1 チップ




    • 3.4 GCN第4世代


      • 3.4.1 チップ






  • 4 脚注





命令セット


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


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



  • Southern Islands Series Instruction Set Architecture (PDF)”. AMD (2012年12月). 2016年11月18日閲覧。

  • Sea Islands Series Instruction Set Architecture (PDF)”. AMD (2013年2月). 2016年11月18日閲覧。

  • Graphics Core Next Architecture, Generation 3 (PDF)”. AMD (2016年8月). 2016年11月18日閲覧。


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


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


  • MIAOWWhitepaper : Hardware Description and Four Research Case Studies (PDF)”. GitHub. 2016年11月18日閲覧。

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 Shaders White Paper (PDF)”. AMD (2015年). 2016年11月18日閲覧。

  • Ryan Smith (2015年3月31日). “AMD Dives Deep On Asynchronous Shading”. AnandTech. 2016年11月18日閲覧。



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


非同期コンピュートエンジン (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]


    • PCI-E 3.0をサポート[16]

    • GPUはページフォールトといった様々なイベントでCPUに対して割り込み要求を送る



  • 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 TrueAudioやAMD 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 400シリーズグラフィックスカードとともにArctic Islands系GPUが発表された。すべてのPolarisベースのチップは14nm FinFETプロセスで製造される[27]。2017年初めにGCN第4世代に基づいたVega 10および11がリリースされる予定である[28]



チップ


GPU単体[29]



  • Polaris 10

    • Ellesmere (XT and Pro)

    • 2 discrete GPUs released



  • Polaris 11

    • Baffin

    • 6 discrete GPUs planned for release, one of which has been released to date.



  • Vega 10 & 11
    • Will be using HBM2 memory modules



APUへの統合


  • Future Zen Powered APUs (launching in H1 2017)


脚注





  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. ^ ab“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. ^ abcdeAngelini, 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. ^ abSmith, 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. ^ abCutress, 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. ^ https://www.custompcreview.com/news/amd-vega-gpu-confirmed-1h2017-summit-ridge-cpu-1q2017/32055/


  29. ^ WhyCry (2016年3月24日). “AMD confirms Polaris 10 is Ellesmere and Polaris 11 is Baffin”. VideoCardz. 2016年4月8日閲覧。






Popular posts from this blog

'app-layout' is not a known element: how to share Component with different Modules

android studio warns about leanback feature tag usage required on manifest while using Unity exported app?

WPF add header to Image with URL pettitions [duplicate]