FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Cache Refill/Access Decoupling for Vector Machinesの論文を読む (2. マイクロ・アーキテクチャ)

面白そうな論文があったので読んでみることにした。続き

  • Cache Refill/Access Decoupling for Vector Machines

https://ieeexplore.ieee.org/document/1551005

msyksphinz.hatenablog.com


  • 5.1 "SCALE" Decoupled Vector Processor
    • VEUはクラスタ化
      • 4バンク・4クラスタ
    • 手順
      • Control Procにより、ベクトルユニットにコマンドを発行する
      • ベクトル・フェッチ・コマンド:VEUに発行
      • ベクトル・ロード / ベクトル・ストアコマンド
      • ピーク時はレーン当たり
      • 4つのクラスタ演算
      • 1つのロード・1つのストア
        • クラスタ0はIndexedロード・ストア用
        • LDQとSAQを持っている
    • VLUとVSUは1度に1つのベクトル・コマンドを処理する
      • Unit-Stride Address Generator
      • Segment Address Generator
      • 最大4エレメントのサブブロックに分割
    • Unit Stride Load
      • 最大4エレメントのサブブロックに分割
      • 各キャッシュ・アクセスに対してレーン間でVLDQを管理する
      • アクセスが戻った時に、並列にデータ要素をVLDQに書き込む
図は本論文より引用
  • Segment Load
    • VLUはセグメント・アクセス毎に 各レーンに複数のVLDQを割り当てる
    • キャッシュから読みだされた後に、キャッシュバンク毎に存在するLoad Segment Bufferに書き込まれる
図は本論文より引用
  • Unit Stride Store
    • ユニット・ストライド・ストア・データを並列にキャッシュに送る
図は本論文より引用
  • Segment Store Data
    • キャッシュバンクの隣にあるレーン毎のバッファに1サイクル当たり1要素で書き込まれる
    • その後、1回のアクセスでキャッシュに書き戻される
図は本論文より引用
  • 5.2 "SCALE" ノンブロッキング・キャッシュ
    • 容量は32kB
    • 4バンクで構成
    • MSHRにより、プライマリ・ミスおよびセカンダリ・ミスを管理する
    • MSHRからMemQにリクエストが渡され、外部メモリにリクエストが送信される
    • メモリのデータが返ってくると、直ちにキャッシュに書き込む
  • 5.3 "SCALE" Vector Refill Unit
    • VRUはリプレイ・キューを使用しないため、バンクへのアクセスをブロックしない
    • Unit-strideモード
      • キャッシュライン数を計算し、全キャッシュラインをカバーするようにリフィル・リクエストを送信
    • Stridedモード
      • ストライドを計算し、繰り返しリフィルを発行
    • VLUとVRUが干渉しない仕組み
      • VRUが十分先に実行されることが理想だが、メモリ帯域幅が制限されてVLUがVRUに追いついた場合は、VLU側がスロットルされる
      • VLUのほうがアドレスジェネレータが多いため、Segment/Stridedのアドレス生成はVRUより速い。VLUのほうがコマンドが早い場合、VRUはリフィルを中止する
      • VRUは先行してリフィルを実行するが、プライマリミスの使いつくしを防ぐために、1∼2つタグを残す
      • VLUによるキャッシュラインの追い出しを防ぐために、VRUは距離に基づいてスロットルする
      • インフライトされているメモリアクセスの数を数えるということ?