RISC-V の紹介文をみていると、ライセンスなど技術外の話が多い。命令セットそのものに対する言及は「負の遺産のないシンプルな RISC」という感じで、つまり何か特徴のある命令セットだとは思われていない。かくいう私もそういう認識だった。
主観も入るけれど、現在の RISC-V 命令セットには過去の遺産を取り除いた以上の特徴がある。 Compressed extension (C) と Vector extension (V) だ。といってもこれらはアイデアとして新しいわけではなく、むしろ廃れ気味だったものを modernize して復権させた感じだと思う。そしてどちらも賛否両論がある。
Qualcomm が C 拡張の削除の提案したのは記憶に新しい (202321701). ちなみに私は Qualcomm の資料をみて、逆に「C 拡張ってうまくやっているんだな」と思った (注: 素人の感想)。
V 拡張は「幅非依存の SIMD」と紹介されることが多いが、素朴な SIMD とはけっこう毛色が違う。 ARM の SVE なども含めて、こういうアプローチが本当にうまく機能するのかは以前から気になっている。ソフト側からみると、 SIMD 系命令の使われ方は大きく 3 種類あると思う。
一見すると ARM SVE や RVV は二番目の用途に偏っているように感じる。例に出てくるコードはいつも二番目のパターンだ。一番目の Packed SIMD 用途だと、場合によっては一命令ごとに vsetivli
を呼ぶことになる (たぶん)。命令数だけの問題ならともかく、
SiFive P870 RISC V HC35_Page_05 - ServeTheHome
ここをみると、素朴な SIMD に対してかなりレイテンシが大きそう。でもこれは LMUL > 1 のときだけなのかな。そうであってほしい。
マスクがあるので三番目の SIMT 的な使い方はできるはずだが、方向性は GPU ともまた少し違う。
この例で GPU に対する優位性を主張されても…というのが正直なところ。