mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Inline builtin struct aref
We don't do this for aset because it might raise a FrozenError. ``` $ benchmark-driver -v --rbenv 'before;after;before --jit;after --jit' benchmark/mjit_struct_aref.yml --repeat-count=4 before: ruby 2.8.0dev (2020-07-06T01:47:11Z masterd94ef7c6b6
) [x86_64-linux] after: ruby 2.8.0dev (2020-07-06T07:11:51Z master 85425168f4) [x86_64-linux] last_commit=Inline builtin struct aref before --jit: ruby 2.8.0dev (2020-07-06T01:47:11Z masterd94ef7c6b6
) +JIT [x86_64-linux] after --jit: ruby 2.8.0dev (2020-07-06T07:11:51Z master 85425168f4) +JIT [x86_64-linux] last_commit=Inline builtin struct aref Calculating ------------------------------------- before after before --jit after --jit mjit_struct_aref(struct) 34.783M 34.810M 48.321M 58.378M i/s - 40.000M times in 1.149996s 1.149097s 0.827794s 0.685192s Comparison: mjit_struct_aref(struct) after --jit: 58377836.7 i/s before --jit: 48321205.7 i/s - 1.21x slower after: 34809935.5 i/s - 1.68x slower before: 34782736.5 i/s - 1.68x slower ```
This commit is contained in:
parent
d94ef7c6b6
commit
167d139487
2 changed files with 11 additions and 0 deletions
10
benchmark/mjit_struct_aref.yml
Normal file
10
benchmark/mjit_struct_aref.yml
Normal file
|
@ -0,0 +1,10 @@
|
|||
type: lib/benchmark_driver/runner/mjit
|
||||
prelude: |
|
||||
def mjit_struct_aref(struct)
|
||||
struct.aa
|
||||
end
|
||||
struct = Struct.new(:a0, :a1, :a2, :a3, :a4, :a5, :a6, :a7, :a8, :a9, :aa).new
|
||||
|
||||
benchmark: mjit_struct_aref(struct)
|
||||
|
||||
loop_count: 40000000
|
1
struct.c
1
struct.c
|
@ -324,6 +324,7 @@ static void
|
|||
define_aref_method(VALUE nstr, VALUE name, VALUE off)
|
||||
{
|
||||
const rb_iseq_t *iseq = rb_method_for_self_aref(name, off, &struct_aref_builtin);
|
||||
iseq->body->builtin_inline_p = true;
|
||||
|
||||
rb_add_method_iseq(nstr, SYM2ID(name), iseq, NULL, METHOD_VISI_PUBLIC);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue