|
1 | 1 | # AMD RDNA4のハードウェアの概要 |
2 | 2 |
|
3 | | -この記事は[AMD "RDNA4" Instruction Set Architecture Reference Guide](https://www.amd.com/content/dam/amd/en/documents/radeon-tech-docs/instruction-set-architectures/rdna4-instruction-set-architecture.pdf)の1章1.2節「ハードウェアの概要」の自分用のメモ書きです。 |
| 3 | +この記事は[AMD "RDNA4" Instruction Set Architecture Reference Guide](https://www.amd.com/content/dam/amd/en/documents/radeon-tech-docs/instruction-set-architectures/rdna4-instruction-set-architecture.pdf)の1章1.2節「ハードウェアの概要」に基づいて自分が理解できるように書き直した。 |
4 | 4 |
|
5 | | -## 用語 |
6 | | -| 用語 | 説明 | |
7 | | -|--|--| |
8 | | -| Work-group Processor(WGP) | スカラーまたはベクターALU、メモリ、LDS、スカラーキャッシュを含む、シェーダー計算ハードウェアの最小単位。ある文脈では、"Double Compute Unit"や"Compute Unit Pair"と呼ばれる | |
9 | | - |
10 | | -## |
| 5 | +GPGPUに必要な事柄に絞って解説する。 |
| 6 | +RDNA4ではプロセッサーはWork-Group Processor(WGP)と呼ばれる、メモリや演算装置を含んだハードウェアからなる。 |
| 7 | +各WGPは互いに独立に動作する。 |
| 8 | +WGPの内部について詳しく見ていく。 |
11 | 9 |
|
12 | 10 | <figure markdown="span"> |
13 | | - { width="auto" } |
14 | | - <figcaption>AMD RDNA4のブロック図</figcaption> |
| 11 | + { width="auto" } |
| 12 | + <figcaption>共有メモリ階層</figcaption> |
15 | 13 | </figure> |
16 | 14 |
|
17 | | -## Work-Group Processor |
| 15 | +## タスクの単位 |
| 16 | +AMDとNVIDIAでは、用語が異なるため整理する。 |
| 17 | +AMDでは仕事の最小分割単位をwork-itemと呼び、CUDAでのthreadに相当する。 |
| 18 | +また、単一のRDNA4プロセッサー上で並列に実行できる32個または64個のwork-itemの集まりをWaveと呼ぶ。 |
| 19 | + |
| 20 | +## Compute Unit(CU) |
| 21 | +WGPの内部には2つのCompute Unit(CU)があり、1つのCUには2つのSIMDがある。 |
| 22 | +SIMDには以下のハードウェアがある: |
| 23 | +- 1 x Scalar ALU (SALU): wave毎に1つの値を操作し、すべての制御フロー(if/else、ループ)を管理する。 |
| 24 | +- 32 x Vector ALU (VALU): 各work-item上で同じ算術操作を行う |
| 25 | + |
| 26 | +さらに、これらのALUにはデータとアドレスを保存できるGeneral Purpose Register(GPR)があり、機能が異なる。 |
| 27 | +- SALU: 各wave内のwork-itemに共有される、32ビットのレジスター(Scalar GPR, SGPR)が128バイト x 32個ある。 |
| 28 | +- VALU: wave内の各work-itemが持つ32ビットのレジスター(Vector GPR, VGPR)が1536バイト x 32個ある。 |
| 29 | + |
| 30 | +また、条件分岐をサポートするために、各waveは各work-itemがアクティブか眠っているかを示すEXECuteマスクを持っている。 |
| 31 | +アクティブなwork-itemはベクター命令をを実行し、眠っているものはNOPとして命令を実行する。 |
| 32 | +EXECマスクはSALUまたはVALUの比較によって、いつでも書き換えられる。 |
| 33 | + |
| 34 | +## Local Data Share(LDS) |
| 35 | +2つのCU間でデータを共有できるメモリがあり、これをLocal Data Share(LDS)という。 |
| 36 | +LDSはWGP毎に1つあり、大きさが128kBで低レイテンシーでアクセスできる。 |
| 37 | +LDSは4バイトの512エントリーを持つ、64個のバンクに分割されていて、順不同なアトミック命令を速くするために64個の整数アトミックユニットを含んでいる。 |
| 38 | + |
| 39 | +## Work-group |
| 40 | +キャッシュまたはLDSを通してデータを共有したり、バリアで同期できるwaveの集まりをWork-groupと呼ぶ。 |
| 41 | +work-group内のwaveはすべて同じWGP上で動く。 |
18 | 42 |
|
| 43 | +work-groupは1つあたり最大64kBのLDSのメモリを確保できる。 |
0 commit comments