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 等)がコアレッシングを最大化するための設計として提案され続けている
## 未解決の問い
- NVLink・HBM3 等の高帯域幅メモリが普及した環境でコアレッシングの相対的重要度はどう変化するか
- 不規則アクセスが本質的なグラフ処理で、hardware prefetcher や L2 キャッシュのどの特性がコアレッシング代替として機能しているか