FPGA開発日記

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

RISC-V実装 BOOM v2をコンパイルしてRTLシミュレーションを実行する

f:id:msyksphinz:20170927231702p:plain

RISC-Vのアウトオブオーダ実装であるBOOMv2は、githubで既に公開されている。

github.com

BOOMv2の実装とRocket Chipの実装は分離されており、内部コアをBOOMv2、外部のインタフェース部分をRocket Chipで実装する。

上記のBOOM v2.0.1は riscv-boom リポジトリの e71168e で実装している。この時にRocket Chipのリポジトリのリビジョンも調整し、 21cce2c とする。

git clone https://github.com/freechipsproject/rocket-chip.git
cd rocket-chip
git checkout boom  # Revision 21cce2c に移動する。
git submodule update --init --recursive chisel3 firrtl hardfloat torture boom
cd boom
git checkout v2.0.1
cd -

この状態でVerilatorでシミュレーション準備をする。

cd emulator
make CONFIG=BOOMConfig

ただし、ツールチェインのリビルドをサボっていたからか、ベンチマークプログラムのシミュレーションを実行するとアサーションフェイルしてしまった。 これはプロキシカーネルなどをリビルドして修正していきたい。

$ make CONFIG=BOOMConfig output/qsort.riscv.out
$ ln -fs /home/msyksphinz/riscv64/riscv64-unknown-elf/share/riscv-tests/benchmarks/qsort.riscv output/qsort.riscv
./emulator-rocketchip-BOOMConfig +max-cycles=100000000 +verbose output/qsort.riscv 3>&1 1>&2 2>&3 | /home/msyksphinz/riscv64/bin//spike-dasm  > output/qsort.riscv.out && [ $PIPESTATUS -eq 0 ]
$ less output/qsort.riscv.out
using random seed 1506619177
emulator-rocketchip-BOOMConfig: ../fesvr/dtm.cc:556: void dtm_t::producer_thread(): Assertion `get_field(hartinfo, DMI_HARTINFO_NSCRATCH) > 0' failed.

修正した。再度RISC-V BOOMv1とBOOMv2でDhrystoneの実行を行った。

確認に使ったリビジョンも一応書いておこう:

  • BOOMv2
  • RocketChip : 21cce2c [boom] bump with bug fixes.
  • boom : e71168e [chisel3] Add IO wrapper.
Microseconds for one run through Dhrystone: 294
Dhrystones per Second:                      3392
mcycle = 147995
minstret = 200153
  • BOOMv1
  • RocketChip : 6751f8e delete unnecessary instrumentation
  • boom : 30d8b3c delete l2 hacks
Microseconds for one run through Dhrystone: 270
Dhrystones per Second:                      3698
mcycle = 135723
minstret = 200153

BOOMv2で、約9%のサイクル数増だ。まあ周波数向上のためのv2なので、特に驚くに当たらない。 パイプラインも伸びてるし。

ついでにBOOMv1と BOOMv2で各種ベンチマークプログラムの実行サイクルを測定してみた。BOOMv2はBOOMv1よりも最大で20%程度サイクル数が増えるという結果になっている。/span>

f:id:msyksphinz:20171008213729p:plain

Instruction BOOMv1 BOOMv2 BOOMv2/BOOMv1
dhrystone.riscv 200153 137573 147995 1.08
median.riscv 4259 7805 9400 1.20
mm.riscv 25287 17295 17079 0.99
mt-matmul - 15992 16298 1.02
mt-vvadd.riscv - 9073 6870 0.76
mt-vvadd.riscv - 7438 6084 0.82
multiply.riscv 21003 18243 20110 1.10
qsort.riscv 124233 206542 252488 1.22
rsort.riscv 171284 112013 100222 0.89
spmv.riscv 32535 27714 28843 1.04
towers.riscv 6623 4605 5395 1.17
vvadd.riscv 2519 1981 2014 1.02