Actions
Bug #13519
closedImprove performance of some Time methods
Description
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¶
Actions
Like0
Like0Like0