Benchmarks on RV64GC RISC-V Out-of-Order Simulator
RISC-V Out-of-Order CoreのNaxRiscvがRV[32|64]GCに対応したので、RV64GCシミュレータを作成し、ベンチマークのCoreMark、Dhrystone及びWhetstoneを実行しました。
NaxRiscvの関連記事は、こちら。
NaxRiscv
NaxRiscvは、RV[32|64]IMAFDCSUに対応したアウトオブオーダ実行スーパースカラのRISC-V Coreです。
NaxRiscvの概要は以前の記事、詳細はNaxRiscv documentationをご覧ください。
デフォルトのRV32IMAとRV64IMAの性能は、以下のようになっています。
RV32IMA
- CoreMark: 5.00 CoreMark/MHz (-O3 and so many more random flags)
- Dhrystone: 2.94 DMIPS/MHz (-O3 -fno-common -fno-inline)
RV64IMA
- CoreMark: 4.91 CoreMark/MHz (-O3, u32 as s32 and so many more random flags)
- Dhrystone: 2.97 DMIPS/MHz (-O3 -fno-common -fno-inline)
Benchmarks on NaxRiscv RV64GC Simulator
今回は、Verilatorを用いてNaxRiscvのRV64GC(RV64IMAFDC)シミュレータを作成し、ベンチマークのCoreMark、Dhrystone及びNaxRiscvに移植したWhetstoneを実行しました。
CoreMark
以下は、CoreMarkを実行したときのコンソール出力を示しています。
$ ./sim/VNaxRiscv64gc --name coremark \ --load-elf $NAXSOFTWARE/baremetal/coremark/build/rv64imafdc/coremark.elf \ --pass-symbol pass 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 2178284 Total time (secs): 2178284.000000 Iterations/Sec : 0.000005 Iterations : 10 Compiler version : GCC11.1.0 Compiler flags : -DPERFORMANCE_RUN=1 -march=rv64imafdc -mabi=lp64d -mcmodel=medany -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -I../driver -O3 -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -DCORE_DEBUG=0 -lgcc -lc -nostartfiles -ffreestanding -Wl,-Bstatic,-T,../common/app.ld,-Map,coremark.map,--print-memory-usage Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0xfcaf Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 0.000005 / GCC11.1.0 -DPERFORMANCE_RUN=1 -march=rv64imafdc -mabi=lp64d -mcmodel=medany -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -I../driver -O3 -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -DCORE_DEBUG=0 -lgcc -lc -nostartfiles -ffreestanding -Wl,-Bstatic,-T,../common/app.ld,-Map,coremark.map,--print-memory-usage / STACK 4.59 CoreMark/MHz SUCCESS coremark
RV64GCシミュレータのCoreMark/MHzは、4.59です。上記のようにRV64IMAは、4.91 CoreMark/MHzなので、7%位スコアが低下しています。
Dhrystone
以下は、Dhrystoneを実行したときのコンソール出力を示しています。
$ ./sim/VNaxRiscv64gc --name dhrystone \ --load-elf $NAXSOFTWARE/baremetal/dhrystone/build/rv64imafdc/dhrystone.elf \ --pass-symbol pass Dhrystone Benchmark, Version C, Version 2.2 Program compiled without 'register' attribute Using time(), HZ=12000000 ... Microseconds for one run through Dhrystone: 16 Dhrystones per Second: 62168 User_Time : 965124 Number_Of_Runs : 5000 HZ : 12000000 DMIPS per MHz: 2.94 SUCCESS dhrystone
RV64GCシミュレータのDMIPS/MHzは、2.94です。上記のようにRV64IMAは、2.97 DMIPS/MHzなので、スコアはほとんど変わりません。
Whetstone
以下は、新規に移植したWhetstoneを実行したときのコンソール出力を示しています。
$ ./sim/VNaxRiscv64gc --name whetstone \ --load-elf $NAXSOFTWARE/baremetal/whetstone/build/rv64imafdc/whetstone.elf \ --pass-symbol pass Loops: 10, Iterations: 1, Duration: 1023732 cycles. C Converted Double Precision Whetstones: 976 KIPS/MHz SUCCESS whetstone
RV64GCシミュレータのWMIPS/MHzは、0.976です。
まとめ
Verilatorを用いてNaxRiscvのRV64GCシミュレータを作成し、ベンチマークのCoreMark、Dhrystone及びWhetstoneを実行しました。
RV64GCの性能は、以下のようになっています。
RV64GC
- CoreMark: 4.59 CoreMark/MHz (-O3, u32 as s32 and so many more random flags)
- Dhrystone: 2.94 DMIPS/MHz (-O3 -fno-common -fno-inline)
- Whetstone: 0.976 WMIPS/MHz (-O3 -fno-common -fno-inline)