@@ -15,18 +15,21 @@ WGPの内部について詳しく見ていく。
1515## タスクの単位
1616AMDとNVIDIAでは、用語が異なるため整理する。
1717AMDでは仕事の最小分割単位をwork-itemと呼び、CUDAでのthreadに相当する。
18- また、単一のRDNA4プロセッサー上で並列に実行できる32個または64個のwork-itemの集まりをWaveと呼ぶ 。
18+ また、単一のRDNA4プロセッサー上で並列に実行できる32個または64個のwork-itemの集まりをWave(またはWavefront)と呼ぶ 。
1919
2020## Compute Unit(CU)
2121WGPの内部には2つのCompute Unit(CU)があり、1つのCUには2つのSIMDがある。
2222SIMDには以下のハードウェアがある:
23+
2324- 1 x Scalar ALU (SALU): wave毎に1つの値を操作し、すべての制御フロー(if/else、ループ)を管理する。
2425- 32 x Vector ALU (VALU): 各work-item上で同じ算術操作を行う
2526
2627さらに、これらの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個ある。
2928
29+ - SALU: 各wave内のwork-itemに共有される、4バイト単位のレジスター(Scalar GPR, SGPR)が128バイト x 32個ある。
30+ - VALU: wave内の各work-itemが持つ、4バイト単位のレジスター(Vector GPR, VGPR)が1536バイト x 32個ある。waveが32個なら16ブロック、64個なら8ブロック毎に確保される(つまり512 x 4バイト単位で確保される)。
31+
32+ VGPRはWaveの各work-itemに必要な分だけレジスターを確保する。
3033また、条件分岐をサポートするために、各waveは各work-itemがアクティブか眠っているかを示すEXECuteマスクを持っている。
3134アクティブなwork-itemはベクター命令をを実行し、眠っているものはNOPとして命令を実行する。
3235EXECマスクはSALUまたはVALUの比較によって、いつでも書き換えられる。
@@ -41,3 +44,7 @@ LDSは4バイトの512エントリーを持つ、64個のバンクに分割さ
4144work-group内のwaveはすべて同じWGP上で動く。
4245
4346work-groupは1つあたり最大64kBのLDSのメモリを確保できる。
47+
48+ ## 参考
49+ 1 . [ 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 )
50+ 2 . [ GPUアーキテクチャとGPUプログラミングの話が面白かった] ( https://qiita.com/Koya_/items/28446be12252edc06137 )
0 commit comments