# メモリコアレッシング ## 定義 メモリコアレッシング(memory coalescing)とは、GPUのウォープ(warp、32スレッドの実行単位)内の各スレッドが連続したグローバルメモリアドレスにアクセスするとき、ハードウェアがそれらの個別アクセスを少数の大きなメモリトランザクション(現代のGPUでは128バイトキャッシュライン、4×32バイトセクタ単位)にまとめる実行時のハードウェア最適化である。ストライドアクセス(strided access)や不整列アクセス(misaligned access)、散在アクセス(scattered access)はコアレッシングを妨げ、無駄なセクタフェッチを生じさせ、DRAM帯域を浪費する。これと対をなすベクトル化メモリアクセス(vectorized memory access)は、各スレッドが`float4`(16バイト、Hopper)や32バイト型(Blackwell、CUDA 13以降)といった広いチャンクを1命令で読み書きするコンパイル時の戦略であり、コアレッシングされたウォープが発行する命令数自体を削減する。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 7 Profiling and Tuning GPU Memory Access Patterns]]) ## 横断的知見 - コアレッシング(実行時のスレッド間アクセスパターン最適化)とベクトル化(コンパイル時のスレッド内チャンクサイズ最適化)は独立した2つの軸であり、両方を組み合わせて初めてウォープあたりのDRAMトランザクションを最小化できる(コアレッシングだけでは各スレッドが依然32回の4バイトロードを発行するのに対し、ベクトル化を加えると4回の`float4`ロードに減る)。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 7 Profiling and Tuning GPU Memory Access Patterns]]) - Nsight Computeの「平均セクタ数/リクエスト」は両者の効果を統一的に観測できる指標で、理想値4.0(128バイトラインが4×32バイトセクタで完全利用)からの乖離が、コアレッシング不足かベクトル化不足かの診断に使える。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 7 Profiling and Tuning GPU Memory Access Patterns]]) ## 未解決の問い - 他の書籍章(第8章オキュパンシチューニング、第9章算術強度向上、第13〜14章PyTorchコンパイラ)でコアレッシング/ベクトル化がどう再利用・自動化されるか(TorchInductorがどの程度自動でベクトル化ロードを生成するか)。 - 実際のBlackwell実機ベンチマーク(章内の数値は例示であり、著者のGitHubリポジトリ`cfregly/ai-performance-engineering`に実測値がある旨が明記されている)との突き合わせ。 - AIOps/障害検知系のconceptとの接点(メモリバウンドなカーネルの検知はどのオブザーバビリティ指標に現れるか)は本vaultの他ドメインとまだ接続されていない。 ## 関連 - [[@2025__OReilly__AI Systems Performance Engineering - Chapter 7 Profiling and Tuning GPU Memory Access Patterns]] — 本概念の一次出典 - [[wiki/entities/AI Systems Performance Engineering|AI Systems Performance Engineering]] — 書籍本体 - [[共有メモリバンクコンフリクト]] — 同章で扱う関連最適化技法 - [[Tensor Memory Accelerator]] — コアレッシングされた転送を非同期化するハードウェア ## 出典 - Chris Fregly, *AI Systems Performance Engineering*, O'Reilly Media, 2025, Chapter 7 (§Coalesced Versus Uncoalesced Global Memory Access, §Vectorized Memory Access).