FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-Vのリトマステストツールriscv-litmus-testを試す(1. ダウンロードとインストール)

リトマステストというのは、マルチプロセッサの構成においてメモリアクセスの順序などをテストするためのツールらしい。 あまり私も良く分かっていないのだが、RISC-Vのメモリコンシステンシモデルの定義においてよく話題に上がるテストだ。

そしてRISC-Vのリトマステストを行うためのリポジトリも公開されている。

github.com

ダウンロードしてビルドしてみる。

最初にOPAMというツールが必要なようだ。

sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)

次にlitmus-tests-riscvをチェックアウトする。

git clone https://github.com/litmus-tests/litmus-tests-riscv.git
cd litmus-tests-riscv

必要なツール群をインストールする。

sudo apt-get install libcap-dev
curl -L https://github.com/containers/bubblewrap/archive/v0.4.1.tar.gz
cd bubblewrap-0.4.1
./autogen.sh
make
sudo make install

opam init
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
Processing  4/12: [ocaml-base-compiler: make world.opt]
-> installed base-bigarray.base
-> installed base-threads.base
-> installed base-unix.base
-> installed ocaml-base-compiler.4.10.0
-> installed ocaml-config.1
-> installed ocaml.4.10.0
Done.
# Run eval $(opam env) to update the current shell environment

herdtoolsというリトマステストを生成するためのツールをインストールする。

opam install herdtools7
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> installed conf-m4.1
-> installed dune.2.5.0
-> installed menhirLib.20200211
-> installed menhirSdk.20200211
-> installed menhir.20200211
-> installed ocamlfind.1.8.1
-> installed herdtools7.7.55
Done.
# Run eval $(opam env) to update the current shell environment

opam envとすると環境設定用のコマンドが大量に出力される。どうやらシェルのスタート時にopam envを実行するように設定しておけば良さそうだ。

opam env
OPAM_SWITCH_PREFIX='/home/msyksphinz/.opam/default'; export OPAM_SWITCH_PREFIX;
CAML_LD_LIBRARY_PATH='/home/msyksphinz/.opam/default/lib/stublibs:/home/msyksphinz/.opam/default/lib/ocaml/stublibs:/home/msyksphinz/.opam/default/lib/ocaml'; export CAML_LD_LIBRARY_PATH;
OCAML_TOPLEVEL_PATH='/home/msyksphinz/.opam/default/lib/toplevel'; export OCAML_TOPLEVEL_PATH;
MANPATH=':/home/msyksphinz/.opam/default/man'; export MANPATH;
PATH='/home/msyksphinz/.opam/default/bin:/home/msyksphinz/.cargo/bin/:/home/msyksphinz/.cargo/bin:/storage/eda/tools/img/cs_v131/Toolchains/mips-img-linux-elf/2015.06-05/bin:/storage/eda/tools/img/cs_v131/Toolchains/mips-img-elf/2015.06-05/bin:/home/msyksphinz/.local/opt/mips/simulators/iasim/IASim_4_1_0/bin:/home/msyksphinz/work/riscv/swimmer_riscv/build:/home/msyksphinz/software/sbt/bin/:/home/msyksphinz/others/usr/bin/:/home/msyksphinz/.cargo/bin/:/home/msyksphinz/.cargo/bin:/storage/eda/tools/img/cs_v131/Toolchains/mips-img-linux-elf/2015.06-05/bin:/storage/eda/tools/img/cs_v131/Toolchains/mips-img-elf/2015.06-05/bin:/home/msyksphinz/.local/opt/mips/simulators/iasim/IASim_4_1_0/bin:/home/msyksphinz/work/riscv/swimmer_riscv/build:/home/msyksphinz/software/sbt/bin/:/home/msyksphinz/others/usr/bin/:/home/msyksphinz/.cargo/bin:/home/msyksphinz/bin:/home/msyksphinz/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/msyksphinz/software/sbt/bin/:/home/msyksphinz/software/sbt/bin/:/home/msyksphinz/work/scripts/:/usr/local/scala/bin:/usr/local/go/bin:/home/msyksphinz/go/bin:/home/msyksphinz/others/usr/wit/0.10.1-14-ga7c9344/:/home/msyksphinz/work/riscv/wake/bin:/home/msyksphinz/riscv-gnu/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin:/home/msyksphinz/node_modules/.bin:/home/msyksphinz/work/riscv/wit/:/home/msyksphinz/software/idea-IC-192.6603.28/bin:/home/msyksphinz/others/usr/0.10.1-18-g81e5f35/:/home/msyksphinz/node_modules/.bin/:/home/msyksphinz/others/idea-IC-192.7142.36/bin:/usr/local/go/bin:/home/msyksphinz/software/sbt/bin/:/home/msyksphinz/work/scripts/:/usr/local/scala/bin:/usr/local/go/bin:/home/msyksphinz/go/bin:/home/msyksphinz/others/usr/wit/0.10.1-14-ga7c9344/:/home/msyksphinz/work/riscv/wake/bin:/home/msyksphinz/riscv-gnu/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14/bin:/home/msyksphinz/node_modules/.bin:/home/msyksphinz/work/riscv/wit/:/home/msyksphinz/software/idea-IC-192.6603.28/bin:/home/msyksphinz/others/usr/0.10.1-18-g81e5f35/:/home/msyksphinz/node_modules/.bin/:/home/msyksphinz/others/idea-IC-192.7142.36/bin:/usr/local/go/bin'; export PATH

という訳でmakeでテストを生成してみよう。

make -B hw-tests-src/run.sh CORES=2

なにかいろいろテストが生成された。このテストを今度はGCCコンパイルする。

cd hw-tests-src
make GCC=riscv64-unknown-elf-gcc

以下のように怒られてしまった。Linux版のriscv-gccが必要なのかな?昔の作業環境からコピーして使ってみよう。

riscv64-unknown-elf-gcc -D_GNU_SOURCE -DFORCE_AFFINITY -Wall -std=gnu99 -O2 -pthread -static -c -o SB+fence.tsoxps.o SB+fence.tsoxps.c
riscv64-unknown-elf-gcc: error: unrecognized command line option '-pthread'
Makefile:39: recipe for target 'SB+fence.tsoxps.o' failed

あらら、また怒られた。どうもGCCが古いのか?調査が必要だ。

riscv64-unknown-linux-gnu-gcc -D_GNU_SOURCE -DFORCE_AFFINITY -Wall -std=gnu99 -O2 -pthread -static -c -o 2+2W+porlrls.o 2+2W+porlrls.c
2+2W+porlrls.c: Assembler messages:
2+2W+porlrls.c:267: Error: unrecognized opcode `sw.rl t1,0(a5)'
2+2W+porlrls.c:269: Error: unrecognized opcode `sw.rl a1,0(a4)'
2+2W+porlrls.c:234: Error: unrecognized opcode `sw.rl t1,0(a5)'
2+2W+porlrls.c:236: Error: unrecognized opcode `sw.rl a1,0(a4)'