RISC-V の V 拡張について想像すること

RISC-V ワークショップで、去年今年 の連続でベクトル拡張について発表されています。細かいことはまだ決まっていないのかな?概念的なことしか発表されてないし、よく理解できないところもあるので、想像したことを書いてみることにした。
まず、初期設定としてソフトが必要とするベクタ長(ループ回数)の AVL とハードウエアの対応できる最大のベクタ長 MVL を決める。MVL は vcmaxw/vcnpred へのCSR書き込みで決まると書いてある。レジスタが 64bit*4Way の長さを持っていて、 vcmaxw が32bit だと、MVL は 8 になるんだと思う。
さらに初期設定として、vcfgd 命令?でループ中で使うレジスタセットを定義する。去年のスライドを見ると、例えばループ中で2本しかレジスタを使わない場合は 32/2=16 倍の長さのベクタ長もサポートしそうに思える。変わったのかな。

そしてループに突入。
まず、AVL の残りと MVL を比較して今回のベクトル長 vl を決める。まぁ、AVL が大きいときは vl=MVL となる。
ループ中のベクトル命令は、この vl の長さで実行される。

最後に AVL の残りから vl を引いて、結果が0になればループを抜ける。
命令実行の流れとしてはこんな感じと思われる。

ハードの実装の話は、去年のスライドにしかないが、レジスタを SRAM で作ると書いてある。複数サイクルかけてレジスタを読むらしい。で、エレメントごとに別の SRAM を準備して、パイプライン化する仕組みだ。スライドで上がっている例では SRAM の数と演算器の数の比がいまいちな構成に感じたのでそこは変えているけど、下の図のような感じで動くのかな?幅広で浅い SRAM をたくさん積むのって、デメリット大きな気がするんだけど。エレメント数の数倍のベクトル長にすれば SRAM のメリット出てくる?
複数サイクル命令って、RISC の思想とあまり合わないような気もするんだけどね。
f0054075_21290966.png
ちなみにパイプライン長は長くても、同じエレメントにしかデータ依存関係はないはずなので、ハードの構成は単純になるはずです。

[PR]
トラックバックURL : http://tom01h.exblog.jp/tb/27352222
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
by tom01h | 2016-12-15 21:40 | PCとか | Trackback | Comments(0)