ベクトル・メモリ・アクセスの関係で、以下の論文が気になったので読んでみることにした:
https://ieeexplore.ieee.org/document/10818118
前回の投稿はこちら:msyksphinz.hatenablog.com
4. 評価環境
(1) シミュレーション環境
- gem5のアウトオブオーダープロセッサモデルを使用し、スーパースカラコアとベクトルエンジンが分離されたRISC-Vベクトルアーキテクチャを使用
- キャッシュサブシステム: Arm AMBA 5 CHIを基盤とし、最新のキャッシュコヒーレンシプロトコルを再現。
- オンチップネットワーク: gem5のシンプルネットワークモデルを利用。
- メモリアクセスのモデル
- L1キャッシュ: 64KB (スカラ用) / ベクトル側はL2キャッシュにダイレクトに接続されている
- L2キャッシュ: 512KB(ベクトルエンジンとスーパースカラコアで共有)
- LLC: 2MB
- メインメモリ: DDR4-2400

5.評価
評価対象
- ベースライン (Baseline):
- 通常のSIMDアーキテクチャ(スーパースカラコア+デカップルドベクトルエンジン)。
- プリフェッチ技術なし。
- 従来のデータプリフェッチ技術:
- Stride: 一定のストライドパターンを持つメモリアクセスに対して、次のメモリアクセスを予測。
- Berti: ローカルデルタ型のデータプリフェッチ技術。過去のメモリアクセスから規則性を見つけ、次のアドレスを推測。
- IPCP: 命令ポインタを分類し、空間的なプリフェッチを行う技術。
- 提案手法 (ChameSC):
- スーパースカラコアのアイドルメモリユニットを仮想化し、正確なデータプリフェッチとプロアクティブキャッシュを活用する。
ベンチマーク
- 14種類のデータ並列アプリケーション
- ストライドメモリアクセスを持つアプリケーション:
mmult,vvadd,axpy,pathfinder,streamcluster,backprop,kmeans
- インデックスメモリアクセスを持つアプリケーション:
indMM,aes,des,spmv,sddmm,cc,sssp
- ストライドメモリアクセスを持つアプリケーション:
性能比較 (Overall Performance Comparison)
ChameSCの全体的な性能向上
- ベースラインと比較して34.3%の性能向上
- 特にインデックスメモリアクセスを多用するアプリケーションで41.3%の改善。
backpropやindMMでは 最大80%の性能向上。- 要因としては、スーパースカラコアのアイドルメモリユニットを活用することで、ベクトルメモリアクセスのボトルネックを大幅に軽減したこと。

既存のプリフェッチ技術との比較
- Stride
- 規則的なメモリアクセス(ストライドパターン)には効果的だが、不規則なアクセスには対応できず、ChameSCに対して18.2%劣る。
- Berti
- ローカルデルタ型プリフェッチャだが、予測精度が低く、キャッシュ汚染を引き起こす。ChameSCの約半分の性能改善(+16.8%)にとどまる。
- IPCP
- 命令ポインタ分類ベースのプリフェッチ手法で、短い距離のアクセスには有効だが、大規模なベクトルメモリアクセスには対応困難。ChameSCと比較して12.7%劣る。
メモリアクセス遅延の削減 (Memory Access Latency Reduction)
- Berti: 9.2%の遅延削減
- IPCP: 8.8%の遅延削減
ChameSC: 36.5%の遅延削減
理由としては、既存のプリフェッチ手法はヒューリスティックに基づいた予測だが、ChameSCは実際に必要なデータだけをプリフェッチするため、無駄なメモリアクセスが発生しない。

キャッシュヒット率とL2アクセスの削減 (Cache Hit Rate and L2 Access Reduction)**
- ベースライン: 35.1%のデータがL2からフェッチ
- ChameSC: L2アクセスが12.6%削減
- プロアクティブキャッシュの効果
- プリフェッチしたデータをスーパースカラコアのL1キャッシュに保存。
- ベクトルエンジンがデータを要求すると、L2ではなくL1から取得できる確率が向上。

キャッシュ汚染の抑制
- 従来のプリフェッチ手法は不要なデータをプリフェッチし、L1キャッシュを汚染する可能性がある。
- ChameSCはスーパースカラコアのL1を別途プロアクティブキャッシュとして利用し、L1の本来の機能を維持。
追加評価: ハードウェアコスト (Hardware Cost Analysis)
- 新規ハードウェアの追加は最小限
- プリフェッチコントローラ: 640ビットのレジスタ追加(64ビット×2のスカラレジスタ+512ビットのベクトルレジスタ)。
- ロード/ストアキュー: 1ビットのプリフェッチフラグ追加。
- 制御回路: 既存のメモリユニットを再利用するため、追加コストは低い。