GPU の 1 warp(32 スレッド)のグローバルメモリアクセスが特定の整列条件を満たすとき、複数のメモリ要求をまとめて 1 回(または少数)のトランザクションで実行できる性質。「コアレッシング」と呼ばれ、GPU 最適化の中で最も採用頻度が高い([[@2023__CSUR__Optimization Techniques for GPU Programming]] Fig. 3)。
## 定義
1 warp の 32 スレッドが、128 バイト境界に整列した連続アドレスにアクセスする場合、デバイスメモリへのトランザクションが 1 回(キャッシュミス時 4 回 × 32B トランザクション)に削減される(Fig. 15 より)。
**コアレスドアクセスの条件(アーキテクチャにより変化)**:
- Fermi 以降: アクセスはキャッシュライン単位(128B)で処理されるため、整列要件が緩和された
- コアレッシングルールはアーキテクチャとともに変化し、時代とともに厳しさが緩まる傾向
**アンコアレスドアクセスの典型**:
- ストライドアクセス(隣接スレッドが非連続アドレスにアクセス)
- 疎行列の不規則インデックスによるランダムアクセス
- Array of Structs (AoS) レイアウトでの構造体フィールドアクセス
## 達成手法
1. **スレッド-データマッピングの最適化**: スレッド ID が連続するデータに対応するよう割り当てを整理
2. **データレイアウト変換**: AoS → SoA(Struct of Arrays)変換、行優先 → 列優先変換
3. **スレッドブロックサイズの選択**: 適切なブロックサイズで整列境界に合わせる
4. **シェアードメモリを介した 2 段階アクセス**: グローバルメモリをコアレスドに共有メモリへ読み込み、そこから非整列アクセスを行う
5. **padding**: 行ストライドにダミー列を追加して整列境界に合わせる
## 横断的知見
- **最も広く採用された最適化技術**: 450 本中最多の論文が言及し、66 本がグローバルメモリ帯域幅をボトルネックと明記。コアレッシングはこのボトルネックへの直接対応策である([[@2023__CSUR__Optimization Techniques for GPU Programming]] Fig. 3, Table 7)
- **Fermi 以降は効果が相対的に低下**: Fermi(2010)の L1/L2 キャッシュ導入により、アンコアレスドアクセスの性能ペナルティが初期 GPU より小さくなった。ただし HBM の採用(Volta 以降)で帯域幅制約が復活し、依然として重要な最適化である([[@2023__CSUR__Optimization Techniques for GPU Programming]] §7.3)
- **不規則アプリケーションでは困難**: グラフ処理・疎行列演算ではランダムアクセスが本質的であり、コアレッシングを完全に達成することは難しい。このため疎行列フォーマット(CSR・ELL・HYB 等)がコアレッシングを最大化するための設計として提案され続けている
- **GPUのコアレッシングは、ベクトルアーキテクチャの明示的unit-stride命令が担っていた役割を実行時ハードウェアへ移した設計選択である**: `Computer Architecture: A Quantitative Approach`第4章は、ベクトルアーキテクチャがunit-stride/strided専用のロード・ストア命令(`vld`/`vlds`)をコンパイル時に発行するのに対し、GPUは「すべてのロード・ストアがgather/scatterであり、Address Coalescing Unitが実行時にSIMDレーン群のアドレスが連続しているかを検出して1回の32語ブロック転送へまとめる」という設計を取ると説明する。本ページが挙げる「スレッド-データマッピングの最適化」「データレイアウト変換」といった達成手法は、この実行時検出ハードウェアが正しく連続アドレスを認識できるようプログラマ側で条件を整える作業に相当し、ベクトル機なら不要だったプログラマの負担がGPUでは残っていることを示す。(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 4 Data-Level Parallelism in Vector, SIMD, and GPU Architectures]] §4.4)
- **コアレッシング欠如の実測インパクトは、ベクトル由来のgather-scatter対応の有無で最大15倍に達する**: 同章が引用するLee et al. (2010) のCore i7対GTX 280比較では、衝突検出(GJK)カーネルでGTX 280がCore i7の15.2倍という、他のどの物理パラメータの比(コア数7.5倍・メモリ帯域4.4倍等)よりも大きい速度差を記録した。要因は「マルチメディアSIMD拡張(Core i7)が当時gather-scatterアドレッシングを持たず、ベクトル由来のgather-scatter機構を持つGPUのAddress Coalescing Unitがこの差を生んだ」とされ、本ページが「不規則アプリケーションでは困難」と述べるコアレッシングの限界が、ハードウェア世代・命令セットの選択次第で大きく変わりうることを示す定量例である。(Source: [[@2019__MorganKaufmann__Computer Architecture - A Quantitative Approach - Chapter 4 Data-Level Parallelism in Vector, SIMD, and GPU Architectures]] §4.7)
## 未解決の問い
- NVLink・HBM3 等の高帯域幅メモリが普及した環境でコアレッシングの相対的重要度はどう変化するか
- 不規則アクセスが本質的なグラフ処理で、hardware prefetcher や L2 キャッシュのどの特性がコアレッシング代替として機能しているか
- ベクトルアーキテクチャの明示的unit-stride/strided命令(コンパイル時に決定)とGPUのAddress Coalescing Unit(実行時に検出)という2つの設計は、性能予測可能性(コンパイル時に決まるか否か)の観点でどちらが有利か。RISC-VがベクトルRVV拡張を採用した判断は、この設計トレードオフをどう評価した結果か。