「A Pluggable Vector Unit for RISC-V Vector Extension」という論文を読んでみたのでそのメモ。 本当はRISC-Vベクトル実装の一例として内容を知っておきたかったのだが、あんまり詳細に説明がないうえに、いろいろと問題になるところを説明していないぞ?
マイクロアーキテクチャの構成を見ていく。
https://ieeexplore.ieee.org/document/9774501
https://dl.acm.org/doi/abs/10.5555/3539845.3540113
- シーケンスステージ
シーケンスステージではベクトル命令の完全なデコードを行う。EMULの大きさによってマイクロ命令に分割される。それらは単一でベクトル命令として動作する。
この場合、ベクトルレジスタのリネームはどこでやるのだろう?
- ベクトルレジスタのロッキング・プロトコル
ベクトルレジスタのハザード解決はシンプルなロック機構によって構成されている。ベクトルレジスタグループでロックを取得してしまうと、レジスタチェイニングができなくなってしまうので、各マイクロオペレーションでベクトルレジスタ毎にロックを取得するようにしている。
これはスコアボードのような方式で、あるマイクロオペレーションが実行時に書き込みレジスタに対して読み出しロックを取得し、それを使用するマイクロオペレーションは読み出しロックが解放されるまで待つ。当該ベクトルレジスタへの書き込みが完了すると、読み出しロックを解放することで後続のマイクロオペレーションが動作するようになる。
- 投機実行のサポート
レジスタリネームとチェックポイントによって投機実行をサポートしている。
実行ユニット
ベクトル整数演算ユニット:すべての整数演算と固定小数点演算、整数演算を実行する。
- ベクトル並べ替えユニット:すべての並べ替えとマスク命令を担当する。
ベクトル・ロード/ストア・ユニット:ベクトル・メモリ・アクセス命令を実行し、仮想メモリをサポートする。1つの外部MMUを必要とし、各命令の変換要求数は最小化されている。メモリ要求は内部パイプラインに沿って構成され、メモリ・インターフェースにシーケンスされる。単純なユニットストライド命令であっても、ベクタアドレスの重複が複雑になるため、ベクタストアからベクタロードへの内部転送はない。
ベクトル・ライトバック