From: jzakiya@... Date: 2017-04-28T05:16:52+00:00 Subject: [ruby-core:80916] [Ruby trunk Bug#13507] Improve performance of some Complex methods where call Numeric#real? internally Issue #13507 has been updated by jzakiya (Jabari Zakiya). Could your patch ``` -fun1(real_p) + +inline static VALUE +f_real_p(VALUE x) +{ + if (RB_INTEGER_TYPE_P(x)) { + return Qtrue; + } + else if (RB_FLOAT_TYPE_P(x)) { + return Qtrue; + } + return rb_funcall(x, id_real_p, 0); +} ``` be simplified to the following? ``` -fun1(real_p) + +inline static VALUE +f_real_p(VALUE x) +{ + if (RB_INTEGER_TYPE_P(x) || RB_FLOAT_TYPE_P(x)) { + return Qtrue; + } + return rb_funcall(x, id_real_p, 0); +} ``` ---------------------------------------- Bug #13507: Improve performance of some Complex methods where call Numeric#real? internally https://bugs.ruby-lang.org/issues/13507#change-64524 * Author: watson1978 (Shizuo Fujita) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- 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 -- https://bugs.ruby-lang.org/ Unsubscribe: