前回の続き、-O3によるコンパイルでISSシミュレーション実行できたため、今度は自作RISC-Vプロセッサを使って、Coremarkを計測してみよう。
1. 32ビットモードGCCの準備
これまで、コンパイルおよびシミュレーションでは全て64ビットモードでコンパイル&シミュレーションしていた。しかしこれでは32ビットマシンでは動作しないし、無理矢理コンパイルしようとしてもバイナリが作れない。 そこで、RISC-Vのツールチェインとして32ビットモード用のGCCおよびライブラリを作る手段が用意されているため、こちらを利用して32ビットマシン用Coremarkバイナリを用意しておこう。
riscv-toolchainにはbuild-rv32ima.sh
という、32ビットモード用コンパイラを生成するスクリプトが付属している。
念の為、64ビットのコンパイラとはディレクトリを変えて、ビルドしておこう。
cd riscv-tools export RISCV=/home/vagrant/riscv32 # riscvは64ビットモードコンパイラ用 ./build-rv32ima.sh
これで、/home/vagrant/riscv32/
以下に32ビットモード用コンパイラが格納された。
これを使って自作RISC-VプロセッサのRTLシミュレーションを実行する。
2. シミュレーション結果
grep -e 000028b4 -e 000028c4 sim_inst.log 208385000000 13524 20 [000028b4] 00000033 : ADD r 0,r 0,r 0 : 4480055000000 315710 62 [000028c4] 00000033 : ADD r 0,r 0,r 0 :
CMK/MHzは以下のようになった。
ちょっとだけ速くなった。
3. IPC推移
黄色が-O3オプションで実行した場合の推移。全体的に命令数が減ったことが影響しているか?
また相変わらずシミュレーションの先頭あたりのIPCが非常に低い。これはReturn Stack Pointerを実装すればある程度改善できるだろうが、まだ手がつけれていない。。。