1
0
Fork 0
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 master d94ef7c6b6) [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 master d94ef7c6b6) +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:
Takashi Kokubun 2020-07-06 00:11:51 -07:00
parent d94ef7c6b6
commit 167d139487
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD
2 changed files with 11 additions and 0 deletions

View 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

View file

@ -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);
}