From: watson1978@... Date: 2017-04-14T07:39:21+00:00 Subject: [ruby-core:80686] [Ruby trunk Bug#13374] Fix one of performance regressions in method calling Issue #13374 has been updated by watson1978 (Shizuo Fujita). 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) ~~~ ---------------------------------------- Bug #13374: Fix one of performance regressions in method calling https://bugs.ruby-lang.org/issues/13374#change-64228 * Author: watson1978 (Shizuo Fujita) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- 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 https://github.com/ruby/ruby/pull/1556 -- https://bugs.ruby-lang.org/ Unsubscribe: