Actions
Feature #13374
openFix one of performance regressions in method calling
    Feature #13374:
    Fix one of performance regressions in method calling
  
Status:
Open
Assignee:
-
Target version:
-
Description
Seems that LIKELY() introduces some penalties at branching.
Ruby 2.4.1¶
$ ruby -v ~/tmp/bench.rb
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
       user     system      total        real
   1.460000   0.010000   1.470000 (  1.462540)
Ruby trunk without patch¶
$ ./miniruby -v -Ilib ~/tmp/bench.rb
ruby 2.5.0dev (2017-03-28 trunk 58156) [x86_64-darwin16]
       user     system      total        real
   1.580000   0.000000   1.580000 (  1.579428)
Ruby trunk with patch¶
$ ./miniruby -v -Ilib ~/tmp/bench.rb
ruby 2.5.0dev (2017-03-28 trunk 58156) [x86_64-darwin16]
       user     system      total        real
   1.510000   0.000000   1.510000 (  1.505948)
Test code¶
require 'benchmark'
Benchmark.bm do |x|
  ary = [1,2,3]
  x.report do
    20000000.times do
      ary.at(2)
    end
  end
end
Patch¶
        
           Updated by watson1978 (Shizuo Fujita) over 8 years ago
          Updated by watson1978 (Shizuo Fujita) over 8 years ago
          
          
        
        
      
      When I filed this ticket, I tried to run benchmark on macOS + clang only.
Then, I tried to do on 2 environments in additional.
macOS 10.12 + gcc 6.3.0¶
Ruby 2.4.1¶
$ ./miniruby -v -Ilib ~/tmp/bench.rb
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
       user     system      total        real
   1.310000   0.000000   1.310000 (  1.314179)
Ruby trunk without patch¶
$ ./miniruby -v -Ilib ~/tmp/bench.rb
ruby 2.5.0dev (2017-03-28 trunk 58192) [x86_64-darwin16]
       user     system      total        real
   1.360000   0.000000   1.360000 (  1.361560)
Ruby trunk with all patches¶
$ ./miniruby -v -Ilib ~/tmp/bench.rb
ruby 2.5.0dev (2017-03-28 trunk 58192) [x86_64-darwin16]
       user     system      total        real
   1.290000   0.000000   1.290000 (  1.297583)
Ubuntu 16.04.4 + gcc 5.4.0¶
Ruby 2.4.1¶
$ ./miniruby -v -Ilib ~/bench/bench.rb
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
       user     system      total        real
   0.810000   0.000000   0.810000 (  0.812250)
Ruby trunk without patch¶
$ ./miniruby -v -Ilib ~/bench/bench.rb
ruby 2.5.0dev (2017-03-28 trunk 58192) [x86_64-linux]
       user     system      total        real
   0.830000   0.000000   0.830000 (  0.824743)
Ruby trunk with all patches¶
$ ./miniruby -v -Ilib ~/bench/bench.rb
ruby 2.5.0dev (2017-03-28 trunk 58192) [x86_64-linux]
       user     system      total        real
   0.830000   0.000000   0.830000 (  0.826192)
        
           Updated by jeremyevans0 (Jeremy Evans) over 6 years ago
          Updated by jeremyevans0 (Jeremy Evans) over 6 years ago
          
          
        
        
      
      - Tracker changed from Bug to Feature
- Backport deleted (2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN)
Actions