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
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 を設定する