1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/benchmark/vm2_poly_same_method.yml
卜部昌平 d74fa8e55c reuse cc->call
I noticed that in case of cache misshit, re-calculated cc->me can
be the same method entry than the pevious one.  That is an okay
situation but can't we partially reuse the cache, because cc->call
should still be valid then?

One thing that has to be special-cased is when the method entry
gets amended by some refinements.  That happens behind-the-scene
of call cache mechanism.  We have to check if cc->me->def points to
the previously saved one.

Calculating -------------------------------------
                          trunk        ours
vm2_poly_same_method     1.534M      2.025M i/s -      6.000M times in 3.910203s 2.962752s

Comparison:
             vm2_poly_same_method
                ours:   2025143.9 i/s
               trunk:   1534447.2 i/s - 1.32x  slower
2019-09-19 15:18:10 +09:00

25 lines
457 B
YAML

prelude: |
module AR; end
class AR::Base
def create_or_update
nil
end
def save
create_or_update
end
end
class Foo < AR::Base; end
class Bar < AR::Base; end
o1 = Foo.new
o2 = Bar.new
benchmark:
vm2_poly_same_method: |
o1.save; o2.save;
o1.save; o2.save;
o1.save; o2.save;
o1.save; o2.save;
o1.save; o2.save;
o1.save; o2.save;
o1.save; o2.save;
o1.save; o2.save;
loop_count: 6000000