From: watson1978@... Date: 2017-04-28T05:07:53+00:00 Subject: [ruby-core:80915] [Ruby trunk Bug#13519] Improve performance of some Time methods Issue #13519 has been reported by watson1978 (Shizuo Fujita). ---------------------------------------- Bug #13519: Improve performance of some Time methods https://bugs.ruby-lang.org/issues/13519 * Author: watson1978 (Shizuo Fujita) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- This is related to https://bugs.ruby-lang.org/issues/13503 Some Time methods will call internal quov() function and quov() calls Numeric#quo -> Rational#quo -> ... This patch will add rb_numeric_quo() as internal C API to call Numeric#quo directly. And this will use rb_numeric_quo() instead of rb_funcall() for Numeric#quo to internal objects. Time#- will be faster around 15%. ### Before ~~~ Calculating ------------------------------------- Time#subsec 2.029M (�� 8.6%) i/s - 10.078M in 5.003036s Time#- 4.225M (�� 2.1%) i/s - 21.130M in 5.003600s Time#to_f 5.580M (�� 2.1%) i/s - 27.955M in 5.011881s Time#to_r 1.862M (�� 9.8%) i/s - 9.253M in 5.016749s ~~~ ### After ~~~ Calculating ------------------------------------- Time#subsec 2.196M (��10.7%) i/s - 10.879M in 5.010285s Time#- 4.991M (�� 2.2%) i/s - 24.966M in 5.005041s Time#to_f 6.809M (��13.5%) i/s - 32.204M in 5.005536s Time#to_r 1.980M (�� 9.6%) i/s - 9.854M in 5.020879s ~~~ ### Test code ~~~ require 'benchmark/ips' Benchmark.ips do |x| x.report "Time#subsec" do |t| time = Time.now t.times { time.subsec } end x.report "Time#-" do |t| time1 = Time.now time2 = Time.now t.times { time1 - time2 } end x.report "Time#to_f" do |t| time = Time.now t.times { time.to_f } end x.report "Time#to_r" do |t| time = Time.now t.times { time.to_r } end end ~~~ ### Patch https://github.com/ruby/ruby/pull/1601 -- https://bugs.ruby-lang.org/ Unsubscribe: