RISC-VのVector命令を動かしてみました
最近ベクトル演算機に興味を持っていて、調べているんですが、 Vector命令の仕様がオープンなものは、RISC-V Vector命令しかないようでした。 なので、まずは仕様が明確なRISC-VのVector命令の動かし方について、調べてみました。
まずは、通常のrisc-vtoolのインストール方法を使おうとしました。
- RISC-Vの通常のインストール方法
- Can't pass brew test · Issue #15 · riscv/homebrew-riscv · GitHub
- brewで最新にインストールするには以下を実行すれば良いみたいでした。
brew install gawk gnu-sed gmp mpfr libmpc isl zlib expat brew reinstall --build-from-source riscv-gcc
ところがです、なんと↑の方法では、ベクタ命令はサポートされていないみたいでした。。。 (どうもriscv-toolsの別branchにサポート版があるようでした。)
次に以下URLを見つけました。 ベクタ演算を使用するまでの流れが非常にわかりやすかったです!
基本的には記載されているように進めます。ただ、私の環境(Mac OSX)では以下の箇所で 詰まりました。
- brewで「gawk gnu-sed」をインストールしておかないと、configureで失敗する。
- GNU Toolchainについて「--enable-mulilib」オプションがあるとコンパイル失敗する。
--> 理由不明ですが、オプションを以下のようにコメントアウトしないといけませんでした
../configure --prefix=$HOME/local/riscvv08/gnu # --enable-multilib
例の如く以下にサンプルプロジェクトを登録しました。 ただ、以下でベクタ命令は流せるのですが、性能(サイクル数)測定ができないことに気がつきました。 なので、どれだけ性能が上がったかまでは算出できないのようですね。
# 流し方 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)との差分がわからない面ありますが、追って使ってみても面白いかもと思いました。