宇宙誕生の少し前から宇宙終焉の少し先までを数で表す論文

この宇宙を数で表すことは出来るのか。

第2-5節 GPUのメモリ構造


第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がどのように役割分担し、
協調して処理を行うのかを解説します。


→ 第2-6節 CPUとGPUの協調動作