Project

General

Profile

Actions

Feature #13507

open

Improve performance of some Complex methods where call Numeric#real? internally

Feature #13507: Improve performance of some Complex methods where call Numeric#real? internally

Added by watson1978 (Shizuo Fujita) over 8 years ago. Updated over 6 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:80857]

Description

Some Complex methods call Numeric#real? at f_real_p() using rb_funcall().
This patch will provide optimization in f_real_p() when Integer/Float is given as internal objects.

Before

Calculating ------------------------------------- Complex#+ 5.226M (± 3.9%) i/s - 26.145M in 5.011147s Complex#- 5.274M (± 4.4%) i/s - 26.321M in 5.001267s Complex#* 3.217M (± 4.7%) i/s - 16.092M in 5.013429s 

After

Calculating ------------------------------------- Complex#+ 6.925M (± 5.4%) i/s - 34.559M in 5.006583s Complex#- 7.124M (± 4.8%) i/s - 35.652M in 5.017364s Complex#* 3.880M (± 4.1%) i/s - 19.363M in 5.000170s 

Test code

require 'benchmark/ips' Benchmark.ips do |x| c1 = Complex(2, 3) c2 = Complex(2, 3) x.report "Complex#+" do |t| t.times { c1 + c2 } end x.report "Complex#-" do |t| t.times { c1 - c2 } end x.report "Complex#*" do |t| t.times { c1 * c2 } end end 

Patch

https://github.com/ruby/ruby/pull/1598

Actions

Also available in: PDF Atom