- 第2章 GPUと専用計算機の仕組み
章トップ(目次)
2-1 GPUとは何か
2-2 並列計算モデル(SIMD / SIMT)
2-3 GPUのメモリ階層と帯域
2-4 スレッド管理とスケジューリング
2-5 GPUが得意な処理・不得意な処理
2-6 GRAPE計算機の誕生
2-7 GRAPE-1の構造と思想
2-8 GRAPE-DRとASIC化
2-9 CPUとGPUの違い
2-10 専用計算機の思想とFPGAへの継承
▶ 第3章 FPGAの仕組みへ
第2章 GPUの仕組み
第2-5節 GPUのメモリ構造
GPUが高い演算性能を発揮できる理由の一つが、
階層化されたメモリ構造にあります。
GPUでは、
すべてのメモリを同じ速度・同じ役割で扱うのではなく、
用途に応じて使い分ける設計がされています。
GPUメモリ階層の全体像
GPUのメモリは、
概ね次のような階層構造になっています。
- レジスタ
- 共有メモリ(Shared Memory)
- L1 / L2 キャッシュ
- グローバルメモリ
上にあるほど高速・小容量、
下にあるほど低速・大容量です。
レジスタ
レジスタは、
各スレッド専用に割り当てられる
最も高速な記憶領域です。
- スレッドごとに独立
- アクセス遅延が最小
- 容量は非常に小さい
レジスタの使用量が多すぎると、
同時に実行できるスレッド数が減少し、
性能低下につながります。
共有メモリ(Shared Memory)
共有メモリは、
同じスレッドブロック内のスレッドが
共同で利用できる高速メモリです。
- レイテンシが非常に低い
- 明示的に使用する
- ブロック内でデータ共有が可能
行列演算や畳み込み処理では、
共有メモリを使うかどうかで
性能が大きく変わります。
L1 / L2 キャッシュ
GPUにもキャッシュは存在しますが、
CPUのキャッシュとは設計思想が異なります。
- 命中率より帯域重視
- 自動管理される
- アクセスの規則性が重要
特に、
連続したメモリアクセスを行うと、
キャッシュ効率が向上します。
グローバルメモリ
グローバルメモリは、
GPU全体で共有される
最も大容量のメモリです。
- 容量は数GB以上
- アクセス遅延は大きい
- CPUからもアクセス可能
GPUプログラムでは、
グローバルメモリアクセスを
最小限に抑える設計が重要になります。
メモリ合体(Coalescing)
同じワープ内のスレッドが
連続したアドレスにアクセスすると、
GPUはそれらをまとめて処理します。
これを
メモリ合体(Memory Coalescing)
と呼びます。
逆に、
バラバラのアドレスにアクセスすると、
帯域が無駄になり、
性能が大きく低下します。
CPUメモリとの違い
- CPU:キャッシュ命中率重視
- GPU:帯域と並列性重視
GPUは、
「遅いメモリを大量のスレッドで隠す」
という思想で設計されています。
設計上のまとめ
GPUのメモリ構造は、
- 高速な計算を止めない
- 大量のスレッドを支える
- 電力効率を高める
ために最適化されています。
次節では、
CPUとGPUがどのように役割分担し、
協調して処理を行うのかを解説します。