FPGA開発日記

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

RISC-Vの高性能アウト・オブ・オーダCPU XiangShanについての資料を読む (6. Kuminghuのマイクロアーキテクチャ続き)

HPCA2024で開催された、RISC-Vのアウト・オブ・オーダCPU XiangShanについての資料が公開されていたので、読んでみることにした。 じっくり読みたいので、1ページずつ要点を抑えていく。

次は、マイクロアーキテクチャのトピックについて。続き。

xiangshan-doc.readthedocs.io


  • フロントエンドのアップデート
    • フェッチ・予測の幅を増強
    • ミス率の低減
    • 高周波数化
  • TAGEの予測器の性能向上
    • Branch Historyのハッシュ化
    • テーブルと履歴長の調整
  • L2 Fetch Target Buffer (FTB)のアップデート
    • FTBは要するにBTBのこと。
    • 4KBのL2 FTBを実装。
    • FTBP というのは L1 & L2 の中間バッファのこと。
  • 命令キャッシュのプリフェッチャのアップデート
    • フロントエンドが分離されたので、FDIPのプリフェッチアルゴリズムを実装。
    • PFキューからプリフェッチリクエストを選択
    • プリフェッチバッファにリフィルデータを書き込む。
    • 命令キャッシュとプリフェッチバッファの検索を並列に行う。
  • バックエンドパイプラインの改良
    • 発行後にレジスタを読み込むように変更
      • リザベーションステーションの回路量を削減するという目的がある。
      • レジスタファイルを読み込むための効率的なアービタを実装する。
      • 投機的なウェイクアップとキャンセルを実装する。
    • uopのコミットとリダイレクトを高速化
      • リネームバッファ(RAB)を実装し、レジスタファイルの変更履歴を記録する。
        • リネームバッファにレジスタファイルのマッピング情報を記録する。
        • 命令がコミット・リダイレクトすると、RABをウェイクアップする
        • RABはリネームテーブルをアップデートする責任を持つ
      • 利点
        • ROBのリリースを高速化する
        • タイミングを最適化する
        • Vector命令のuopへの分割をサポートする
        • ROBを圧縮する
    • ベクトルパイプラインを実装
      • VLEN=128のベクトル命令をサポート
      • デコード・ディスパッチ・アウトオブオーダ実行を共有
  • ロードステアユニットのアップデート
    • L1D SRAMの消費電力を削減するため、ウェイ予測を導入する
    • ロードストアのバンド幅を向上させるため、ハイブリッド・ロード・ストアユニットを導入する
    • L1Dプリフェッチを導入する
      • StreamプリフェッチャとStrideプリフェッチャを導入する
    • ロードキューのタイミングを向上させるため、ロードキューを分割する
      • ロードキューを状況に応じて分割して割り当てる
        • ライトバック後に仮想ロードキューから順番にリタイアすることができる
    • TLBのタイミング向上のため、L1/L2 TLBを再デザインする