cartesi / machine-emulator

The off-chain implementation of the Cartesi Machine
GNU Lesser General Public License v3.0
58 stars 32 forks source link

Add `--cpu-bench` command line options and new benchmarks script #219

Closed edubart closed 2 months ago

edubart commented 3 months ago

Sometimes people want to measure performance of the cartesi machine in their computer, to know in advance the speed of execution for some code that might be executed inside a dapp, so that's why I introduced the --bench-cpu command line option, to assist on this.

Furthermore I added a new script in tools/benchmarks/bench-insns.lua to benchmark individually the performance every RISC-V instruction we implement (more than 150+), this script assists me optimizing the cartesi machine, and might be useful for others to consult the overhead of each instruction. Note this script is mostly to give a hint of instructions raw performance, it does not cover worst case scenarios and address translation overhead.

This is the output of the features this PR adds:

$ lscpu | grep name
Model name:                           Intel(R) Core(TM) i9-14900K

$ cartesi-machine --no-init-splash --bench-cpu -- "exec dhrystone 10000000 > /dev/null"

Halted
Cycles: 3272684577
CPU Speed: 544.257 MIPS

$ lua tools/benchmarks/bench-insns.lua 
-- Instruction speed --
sfence.vma                                      4.145 MIPS     3250 ucycles
wfi                                           486.697 MIPS      257 ucycles
lui                                           695.051 MIPS      253 ucycles
auipc                                         656.340 MIPS      256 ucycles
jal                                           295.030 MIPS      259 ucycles
jalr                                          355.777 MIPS      251 ucycles
beq                                           660.890 MIPS      249 ucycles
bne                                           846.515 MIPS      250 ucycles
blt                                           661.306 MIPS      252 ucycles
bge                                          1102.873 MIPS      247 ucycles
bltu                                          658.814 MIPS      248 ucycles
bgeu                                          740.178 MIPS      253 ucycles
beq (taken)                                   268.587 MIPS      262 ucycles
bne (taken)                                   297.457 MIPS      262 ucycles
blt (taken)                                   268.725 MIPS      264 ucycles
bge (taken)                                   341.639 MIPS      259 ucycles
bltu (taken)                                  266.946 MIPS      261 ucycles
bgeu (taken)                                  286.253 MIPS      265 ucycles
addi                                          618.780 MIPS      259 ucycles
addiw                                         778.643 MIPS      259 ucycles
slti                                          838.395 MIPS      259 ucycles
sltiu                                         593.566 MIPS      252 ucycles
xori                                          623.933 MIPS      253 ucycles
ori                                           624.305 MIPS      252 ucycles
andi                                          696.898 MIPS      253 ucycles
slli                                          587.910 MIPS      259 ucycles
slliw                                         785.642 MIPS      259 ucycles
srli                                          516.412 MIPS      265 ucycles
srliw                                         516.666 MIPS      265 ucycles
srai                                          495.199 MIPS      266 ucycles
sraiw                                         495.199 MIPS      266 ucycles
add                                           565.408 MIPS      268 ucycles
addw                                          690.930 MIPS      268 ucycles
sub                                           587.581 MIPS      268 ucycles
subw                                          740.178 MIPS      268 ucycles
sll                                           563.888 MIPS      262 ucycles
sllw                                          514.891 MIPS      265 ucycles
slt                                           539.800 MIPS      264 ucycles
sltu                                          588.570 MIPS      257 ucycles
xor                                           618.415 MIPS      258 ucycles
srl                                           503.762 MIPS      271 ucycles
srlw                                          457.606 MIPS      271 ucycles
sra                                           537.311 MIPS      271 ucycles
sraw                                          474.799 MIPS      271 ucycles
or                                            563.585 MIPS      251 ucycles
and                                           532.402 MIPS      255 ucycles
lb                                            545.982 MIPS      280 ucycles
lbu                                           578.826 MIPS      271 ucycles
lh                                            562.980 MIPS      279 ucycles
lhu                                           562.980 MIPS      273 ucycles
lw                                            561.173 MIPS      281 ucycles
lwu                                           563.585 MIPS      272 ucycles
ld                                            564.192 MIPS      274 ucycles
sb                                            513.630 MIPS      281 ucycles
sh                                            513.881 MIPS      281 ucycles
sw                                            492.409 MIPS      282 ucycles
sd                                            695.051 MIPS      274 ucycles
fence                                         866.088 MIPS      248 ucycles
ecall                                         353.976 MIPS      289 ucycles
ebreak                                        334.129 MIPS      289 ucycles
mul                                           592.560 MIPS      280 ucycles
mulw                                          705.334 MIPS      282 ucycles
mulh                                          563.585 MIPS      400 ucycles
mulhsu                                        490.796 MIPS      402 ucycles
mulhu                                         563.282 MIPS      366 ucycles
div                                           490.796 MIPS      287 ucycles
divw                                          623.933 MIPS      290 ucycles
divu                                          562.980 MIPS      293 ucycles
divuw                                         490.338 MIPS      299 ucycles
rem                                           451.499 MIPS      285 ucycles
remw                                          536.487 MIPS      297 ucycles
remu                                          470.539 MIPS      285 ucycles
remuw                                         534.845 MIPS      292 ucycles
lr.w                                          490.338 MIPS      296 ucycles
lr.d                                          452.083 MIPS      289 ucycles
sc.w                                          470.328 MIPS      277 ucycles
sc.d                                          434.839 MIPS      270 ucycles
amoswap.w                                     417.363 MIPS      311 ucycles
amoswap.d                                     387.023 MIPS      304 ucycles
amoadd.w                                      406.839 MIPS      312 ucycles
amoadd.d                                      386.880 MIPS      305 ucycles
amoxor.w                                      402.468 MIPS      313 ucycles
amoxor.d                                      374.315 MIPS      304 ucycles
amoand.w                                      417.196 MIPS      313 ucycles
amoand.d                                      387.023 MIPS      305 ucycles
amoor.w                                       468.647 MIPS      313 ucycles
amoor.d                                       447.645 MIPS      303 ucycles
amomin.w                                      388.312 MIPS      313 ucycles
amomin.d                                      362.667 MIPS      304 ucycles
amomax.w                                      432.686 MIPS      314 ucycles
amomax.d                                      400.930 MIPS      306 ucycles
amominu.w                                     388.600 MIPS      314 ucycles
amominu.d                                     362.291 MIPS      305 ucycles
amomaxu.w                                     375.387 MIPS      315 ucycles
amomaxu.d                                     362.792 MIPS      306 ucycles
flw                                           470.328 MIPS      298 ucycles
fsw                                           390.918 MIPS      312 ucycles
fmadd.s                                       138.643 MIPS      646 ucycles
fmsub.s                                       129.645 MIPS      660 ucycles
fnmsub.s                                      124.980 MIPS      660 ucycles
fnmadd.s                                      145.167 MIPS      652 ucycles
fadd.s                                        163.192 MIPS      440 ucycles
fsub.s                                        174.544 MIPS      445 ucycles
fmul.s                                        177.078 MIPS      614 ucycles
fdiv.s                                        162.989 MIPS     1024 ucycles
fsgnj.s                                       320.059 MIPS      317 ucycles
fsgnjn.s                                      320.156 MIPS      314 ucycles
fsgnjx.s                                      297.710 MIPS      309 ucycles
fmin.s                                        236.064 MIPS      327 ucycles
fmax.s                                        222.351 MIPS      330 ucycles
feq.s                                         231.377 MIPS      321 ucycles
flt.s                                         226.774 MIPS      321 ucycles
fle.s                                         231.479 MIPS      328 ucycles
fsqrt.s                                        92.351 MIPS     2094 ucycles
fclass.s                                      210.018 MIPS      317 ucycles
fcvt.w.s                                      165.718 MIPS      383 ucycles
fcvt.wu.s                                     160.298 MIPS      382 ucycles
fcvt.l.s                                      164.420 MIPS      387 ucycles
fcvt.lu.s                                     164.807 MIPS      385 ucycles
fmv.x.w                                       251.760 MIPS      300 ucycles
fcvt.s.w                                      188.877 MIPS      429 ucycles
fcvt.s.wu                                     213.829 MIPS      424 ucycles
fcvt.s.l                                      187.794 MIPS      483 ucycles
fcvt.s.lu                                     195.422 MIPS      476 ucycles
fmv.w.x                                       276.591 MIPS      301 ucycles
fld                                           514.385 MIPS      280 ucycles
fsd                                           422.916 MIPS      303 ucycles
fmadd.d                                       153.025 MIPS      838 ucycles
fmsub.d                                       136.995 MIPS      851 ucycles
fnmsub.d                                      134.156 MIPS      851 ucycles
fnmadd.d                                      152.846 MIPS      842 ucycles
fadd.d                                        167.305 MIPS      409 ucycles
fsub.d                                        175.039 MIPS      418 ucycles
fmul.d                                        177.798 MIPS      810 ucycles
fdiv.d                                        142.195 MIPS     4695 ucycles
fsgnj.d                                       304.539 MIPS      304 ucycles
fsgnjn.d                                      312.431 MIPS      301 ucycles
fsgnjx.d                                      297.204 MIPS      295 ucycles
fmin.d                                        253.341 MIPS      316 ucycles
fmax.d                                        243.010 MIPS      319 ucycles
feq.d                                         251.881 MIPS      313 ucycles
flt.d                                         243.348 MIPS      313 ucycles
fle.d                                         247.892 MIPS      321 ucycles
fsqrt.d                                        63.516 MIPS    24528 ucycles
fcvt.s.d                                      176.038 MIPS      438 ucycles
fcvt.d.s                                      216.522 MIPS      349 ucycles
fclass.d                                      223.966 MIPS      313 ucycles
fcvt.w.d                                      165.196 MIPS      380 ucycles
fcvt.wu.d                                     167.545 MIPS      377 ucycles
fcvt.l.d                                      178.010 MIPS      375 ucycles
fcvt.lu.d                                     166.296 MIPS      373 ucycles
fmv.x.d                                       258.715 MIPS      301 ucycles
fcvt.d.w                                      198.379 MIPS      422 ucycles
fcvt.d.wu                                     211.075 MIPS      402 ucycles
fcvt.d.l                                      198.304 MIPS      419 ucycles
fcvt.d.lu                                     212.659 MIPS      416 ucycles
fmv.d.x                                       270.806 MIPS      300 ucycles
csrrw                                         313.178 MIPS      331 ucycles
csrrs                                         289.573 MIPS      327 ucycles
csrrc                                         288.616 MIPS      334 ucycles
csrrwi                                        285.863 MIPS      328 ucycles
csrrsi                                        290.053 MIPS      319 ucycles
csrrci                                        283.468 MIPS      331 ucycles
rdcycle                                       328.273 MIPS      286 ucycles
rdtime                                        361.168 MIPS      280 ucycles
rdinstret                                     339.868 MIPS      287 ucycles
fence.i                                       792.169 MIPS      246 ucycles
-- Average instruction set speed --
RISC-V Privileged Memory-management             4.145 MIPS   3250.0 ucycles
RISC-V Privileged Interrupt-management        486.697 MIPS    257.0 ucycles
RV64I - Base integer instruction set          564.861 MIPS    263.8 ucycles
RV64M - Integer multiplication and division   544.383 MIPS    312.2 ucycles
RV64A - Atomic instructions                   409.848 MIPS    304.2 ucycles
RV64F - Single-precision floating-point       214.511 MIPS    489.3 ucycles
RV64D - Double-precision floating-point       219.917 MIPS   1317.9 ucycles
RV64Zicsr - Control and status registers      291.792 MIPS    328.3 ucycles
RV64Zicntr - Base counters and timers         343.103 MIPS    284.3 ucycles
RV64Zifence - Instruction fetch fence         792.169 MIPS    246.0 ucycles
vfusco commented 2 months ago

This probably should be a special program