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