-
Notifications
You must be signed in to change notification settings - Fork 5
Build options for performance tuning
Soichiro Isshiki edited this page Feb 1, 2025
·
2 revisions
Here is examples of output for build options that is useful for performance measurement and tuning.
This is a sample code used in this section. Everyone loves Fibonacci.
def fib n
if n < 3
1
else
fib(n-1) + fib(n-2)
end
end
puts fib(34)Print bytecode instructions for methods and blocks.
BBx means basic block ID.
<fib> /home/monochrome/monoruby/benchmark/app_fib.rb:1
FuncId(1749) SIMPLE stack reg_num:5 local_vars:1 temp:3
ParamsInfo { required_num: 1, reqopt_num: 1, pos_num: 1, args_names: [Some(n)], kw_names: [], kw_rest: None, block_param: None }
[]
BB0
:00000 [02] init_method reg:4 arg:1 stack_offset:8
:00001 [03] _%2 = %1 < 3: i16
:00002 [02] condnotbr _%2 => BB2
BB1
:00003 [03] %2 = 1: i32
:00004 [02] ret %2
BB2
:00005 [03] %2 = %1 - 1: i16
:00006 [03] %2 = %0.fib(%2)
:00008 [04] %3 = %1 - 2: i16
:00009 [04] %3 = %0.fib(%3)
:00011 [03] %2 = %2 + %3
:00012 [02] ret %2
Print JIT-compiled assembly with corresponding bytecode instructions and time required for compilation.
BBx means basic block ID.
==> start whole compile: FuncId(1749) <Object#fib> self_class: #<Class:main> /home/monochrome/monoruby/benchmark/app_fib.rb:1
>>>Method[0] FuncId(1749) <Object#fib> self_class: #<Class:main>
offset:Pos(165222) code: 423 bytes data: 0 bytes
000000: push rbp
000001: mov rbp,rsp
000004: sub rsp,0x80
00000b: test BYTE PTR [r14-0x1],0x80
000010: jne 0x2c
000016: movabs rax,0x4
000020: mov QWORD PTR [r14-0x28],rax
000024: mov QWORD PTR [r14-0x30],rax
000028: mov QWORD PTR [r14-0x38],rax
BB0
:00000 init_method reg:4 arg:1 stack_offset:8
:00001 _%2 = %1 < 3: i16 [Integer][Integer]
00002c: mov rdi,QWORD PTR [r14-0x20]
000030: test rdi,0x1
000037: je 0xffddbcf
00003d: cmp rdi,0x7
000041: jge 0x53
:00002 condnotbr _%2 => BB2
BB1
:00003 %2 = 1: i32
:00004 ret %2
000047: movabs rax,0x3
000051: leave
000052: ret
BB2
:00005 %2 = %1 - 1: i16 [Integer][Integer]
000053: mov rdi,QWORD PTR [r14-0x20]
000057: sub rdi,0x2
00005b: jo 0xffddc7d
000061: mov r15,rdi
:00006 %2 = %0.fib(%2) [#<Class:main>] FuncId(1749)
000064: mov eax,DWORD PTR [rip+0x1ffd9d3c] # 0x1ffd9da6
00006a: cmp DWORD PTR [rip+0x1ffd7a2a],eax # 0x1ffd7a9a
000070: jne 0xffddc8c
000076: mov rdi,QWORD PTR [r14-0x18]
00007a: mov r13,rdi
00007d: cmp DWORD PTR [rip+0x1ffd7a2e],0x0 # 0x1ffd7ab2
000084: jne 0xffddc9b
00008a: mov QWORD PTR [rsp-0x48],r15
00008f: sub rsp,0x20
000093: xor rax,rax
000096: push rax
000097: movabs rax,0x10000005000006d5
0000a1: push rax
0000a2: xor rax,rax
0000a5: push rax
0000a6: push r13
0000a8: add rsp,0x40
0000ac: lea r14,[rsp-0x28]
0000b1: mov QWORD PTR [rsp-0x20],r14
0000b6: mov rdi,QWORD PTR [rbx]
0000b9: lea rsi,[rsp-0x18]
0000be: mov QWORD PTR [rsi],rdi
0000c1: mov QWORD PTR [rbx],rsi
0000c4: call 0xfffffef9
0000c9: lea r14,[rbp-0x8]
0000cd: mov QWORD PTR [rbx],r14
0000d0: mov r14,QWORD PTR [rbp-0x10]
0000d4: test rax,rax
0000d7: je 0xffddc13
0000dd: mov r15,rax
:00007
:00008 %3 = %1 - 2: i16 [Integer][Integer]
0000e0: mov rdi,QWORD PTR [r14-0x20]
0000e4: sub rdi,0x4
0000e8: jo 0xffddca9
0000ee: mov QWORD PTR [r14-0x28],r15
0000f2: mov r15,rdi
:00009 %3 = %0.fib(%3) [#<Class:main>] FuncId(1749)
0000f5: mov eax,DWORD PTR [rip+0x1ffd9caf] # 0x1ffd9daa
0000fb: cmp DWORD PTR [rip+0x1ffd7999],eax # 0x1ffd7a9a
000101: jne 0xffddcb8
000107: mov rdi,QWORD PTR [r14-0x18]
00010b: mov r13,rdi
00010e: cmp DWORD PTR [rip+0x1ffd799d],0x0 # 0x1ffd7ab2
000115: jne 0xffddcc7
00011b: mov QWORD PTR [rsp-0x48],r15
000120: sub rsp,0x20
000124: xor rax,rax
000127: push rax
000128: movabs rax,0x10000005000006d5
000132: push rax
000133: xor rax,rax
000136: push rax
000137: push r13
000139: add rsp,0x40
00013d: lea r14,[rsp-0x28]
000142: mov QWORD PTR [rsp-0x20],r14
000147: mov rdi,QWORD PTR [rbx]
00014a: lea rsi,[rsp-0x18]
00014f: mov QWORD PTR [rsi],rdi
000152: mov QWORD PTR [rbx],rsi
000155: call 0xfffffef9
00015a: lea r14,[rbp-0x8]
00015e: mov QWORD PTR [rbx],r14
000161: mov r14,QWORD PTR [rbp-0x10]
000165: test rax,rax
000168: je 0xffddc5b
00016e: mov r15,rax
:00010
:00011 %2 = %2 + %3 [Integer][Integer]
000171: mov rdi,QWORD PTR [r14-0x28]
000175: mov rsi,r15
000178: test rdi,0x1
00017f: je 0xffddc6a
000185: test rsi,0x1
00018c: je 0xffddcd5
000192: sub rdi,0x1
000196: add rdi,rsi
000199: jo 0xffddcdd
00019f: mov r15,rdi
:00012 ret %2
0001a2: mov rax,r15
0001a5: leave
0001a6: ret
<<<
<== finished compile.