RISC-VのVector命令を動かしてみました

最近ベクトル演算機に興味を持っていて、調べているんですが、 Vector命令の仕様がオープンなものは、RISC-V Vector命令しかないようでした。 なので、まずは仕様が明確なRISC-VのVector命令の動かし方について、調べてみました。

まずは、通常のrisc-vtoolのインストール方法を使おうとしました。

brew install gawk gnu-sed gmp mpfr libmpc isl zlib expat
brew reinstall --build-from-source riscv-gcc

ところがです、なんと↑の方法では、ベクタ命令はサポートされていないみたいでした。。。 (どうもriscv-toolsの別branchにサポート版があるようでした。)

次に以下URLを見つけました。 ベクタ演算を使用するまでの流れが非常にわかりやすかったです!

基本的には記載されているように進めます。ただ、私の環境(Mac OSX)では以下の箇所で 詰まりました。

  1. brewで「gawk gnu-sed」をインストールしておかないと、configureで失敗する。
  2. GNU Toolchainについて「--enable-mulilib」オプションがあるとコンパイル失敗する。
    --> 理由不明ですが、オプションを以下のようにコメントアウトしないといけませんでした
../configure --prefix=$HOME/local/riscvv08/gnu # --enable-multilib

例の如く以下にサンプルプロジェクトを登録しました。 ただ、以下でベクタ命令は流せるのですが、性能(サイクル数)測定ができないことに気がつきました。 なので、どれだけ性能が上がったかまでは算出できないのようですね。

GitHub - moamoai/riscv-v_test

# 流し方
export PATH=~/local/riscvv08/gnu/bin/:$PATH
make
riscv64-unknown-elf-objdump -d bcd2a | less
~/local/riscvv08/spike/bin/spike --isa=RV64gcV \
        ~/local/riscvv08/pk/riscv64-unknown-elf/bin/pk bcd2a
# -d でデバック、-lで実行ログ取得可能でした

あとがき

というわけで、なんとかRISC-Vのベクタ命令を動かすことができました。 gccのインストールに思いの外苦しめられました。。コンパイル時間も2,3時間かかった気もします。

あと、RISC-Vのシミュレータには以下のようなものもあるみたいでした。 公式ツール(spike)との差分がわからない面ありますが、追って使ってみても面白いかもと思いました。

GitHub - riscv/riscv-ovpsim: OVP Simulator for RISC-V