FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

RocketChip RISC-V実装RTLにてベンチマークを計測する(2. -O3によるCoremarkコンパイル)

前回の続き、-O3によるコンパイルISSシミュレーション実行できたため、今度は自作RISC-Vプロセッサを使って、Coremarkを計測してみよう。

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

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は以下のようになった。

{ \displaystyle
\text{CMK/MHz} = 1000000 / \left(448005 - 20838\right) = 2.34
}

ちょっとだけ速くなった。

3. IPC推移

黄色が-O3オプションで実行した場合の推移。全体的に命令数が減ったことが影響しているか?

また相変わらずシミュレーションの先頭あたりのIPCが非常に低い。これはReturn Stack Pointerを実装すればある程度改善できるだろうが、まだ手がつけれていない。。。

f:id:msyksphinz:20161222012505p:plain