FPGA開発日記

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

RISC-V ベクトルプロセッサの実装論文Vitruvius+の論文を読む

RISC-Vのベクトル実装の論文を読んでいる。

https://dl.acm.org/doi/abs/10.1145/3575861

Vitruvius+というのはバルセロナスーパーコンピューティングセンターの開発しているRISC-Vベクトル拡張の実装で、初代Vitruviusの後継となる実装である。

ポイントだけまとめていく。

  • Vitruvius+: An Area-Eficient RISC-V Decoupled Vector Coprocessor for High Performance Computing Applications

ポイントとしては、以下のインタフェースだと思われる。ベクトルユニットとスカラユニットを接続するためのインタフェースを定義しており、明確に分離している。 スカラコアは、非公開のAvispadoを使用している。

  • Issue: Avispado → Vitruvius
  • Dispatch: Avispado → Vitruvius
    • 命令をNon-speculative(next_senior)としてマークする
    • 命令をKillする
  • COMPLETED: Vitruvius → Avispado

    • 命令が完了
    • 最終的に生成される浮動小数点例外フラグfflags
    • fixed-point演算の飽和ビットvxsat
    • 最終的なスカラー結果dest_reg
    • ベクトルロードによって処理された最後の有効なベクトル要素に対応するvstart
    • 命令が不正としてデコードされていた場合は最終的に不正ビット
  • MEMOP

    • ベクトルメモリ演算を実行するためのメモリ要求を生成するのはスカラコア
    • [12]とは異なり、Vitruviusはメモリ階層へのアクセスを持っていない。
      • 要求開始
      • Vitruviusによってsync_startが設定される
      • 要求が完了
      • メモリ命令識別子 sb_id と、関連するメモリ要求がページフォルトなどの例外を引き起こした最終的なベクトル要素 vstart_vlfof と共に sync_end が設定される
  • LOAD: Avispado → Vitruvius

    • Avispado はキャッシュライン全体の形状(512-bits) のデータを送信する
    • seq_id で指定されたメタデータと共に、キャッシュライン内のベクトル要素を特定するために有効期限付きでデータを提供する
    • ベクトルマスクされたロードでは、mask_validが設定されている場合、マスクが適用される
  • STORE: Vitruvius → Avispado

    • 利用可能なクレジットがある場合にのみ、有効期限に遅れた 512 ビットのデータを送信する
    • クレジットを設定することで、Avispado は Vitruvius に新しいデータの送信を許可します。
  • MASK_IDX: Vitruvius → Avispado
    • マスクおよび/またはインデックス付きのメモリ操作に適用される
    • マスク付き
      • 64 ビットのマスクビット
    • インデックス付き
      • 64 ビットのインデックス
    • マスク付きインデックス付きメモリ操作
      • 最上位ビットに配置されたマスクビットとその他の 64 ビットのインデックス
      • 最後に送信するインデックスに対応する last_idx を設定する