前回BOOMコアでRTLシミュレーションを行おうとしてRTLシミュレーションエラーになってしまっていたのだが、どうしてもエラーの理由が分からず、まさかと思いriscv-toolsをboomのブランチでリコンパイルして動作させてみた結果、動いてしまった。
つまり、現在私の環境には、
- /home/msyksphinz/riscv : RocketChipシミュレーションプログラム・コンパイル用のgcc
- /home/msyksphinz/riscv-boom : BOOMコアシミュレーションプログラム・コンパイル用のgcc
が存在していることになる。なんだこれは!
が、逆アセンブルしてみてすぐに分かった。そうか、BOOMプロセッサはCompressed ISAをサポートしていないんだ。
セクション .text.init の逆アセンブル: 0000000080000000 <_start>: 80000000: 4081 li ra,0 80000002: 4101 li sp,0 80000004: 4181 li gp,0 80000006: 4201 li tp,0 80000008: 4281 li t0,0 8000000a: 4301 li t1,0 ...
セクション .text.init の逆アセンブル: 0000000080000000 <_start>: 80000000: 00000297 auipc t0,0x0 80000004: 0d828293 addi t0,t0,216 # 800000d8 <trap_entry> 80000008: 30529073 csrw mtvec,t0 8000000c: 00000093 li ra,0 80000010: 00000113 li sp,0 80000014: 00000193 li gp,0 ...
なるほど、RocketChipはRV64のCompressedまでサポートしているが、BOOMは4bype Instructionsに固定してあるのか。
RocketChipとBOOMの性能の違い
Coremarkのコンパイルまではまだ行っていないが、標準で添付されているベンチマークを使うとこれだけの差が現れた。
BOOM : matmul(cid, nc, 16, input1_data, input2_data, results_data); barrier(nc): 19292 cycles, 4.7 cycles/iter, 0.6 CPI RocketChip matmul(cid, nc, 16, input1_data, input2_data, results_data); barrier(nc): 42136 cycles, 10.2 cycles/iter, 1.5 CPI
BOOMの性能はRocketChipの倍以上だな。