Project

General

Profile

Feature #18344

Updated by S_H_ (Shun Hiraoka) over 2 years ago

Recently, introduce `Primitive.mandatory_only?` method(to improve performance Time.at methods). 
 And, I tried to if can improve `Kernel#Float` method perfomance    with using `Primitive.mandatory_only?` method. 

 benchmark: 
 ```yml 
 benchmark: 
   float: "Float(42)" 
   float_true: "Float(42, exception: true)" 
   float_false: "Float(42, exception: false)" 
 loop_count: 10000 

 ``` 

 result: 
 ``` 
 sh@DESKTOP-L0NI312:~/rubydev/build$ make benchmark/kernel_float.yml -e COMPARE_RUBY=~/.rbenv/shims/ruby -e BENCH_RUBY=../install/bin/ruby -e BENCH_OPTS=--repeat-count=4 
 generating vm_call_iseq_optimized.inc 
 vm_call_iseq_optimized.inc unchanged 
 Calculating ------------------------------------- 
                      compare-ruby    built-ruby 
                float        41.000M       47.416M i/s -       10.000k times in 0.000244s 0.000211s 
           float_true        10.875M       21.317M i/s -       10.000k times in 0.000920s 0.000469s 
          float_false        13.910M       22.847M i/s -       10.000k times in 0.000719s 0.000438s 

 Comparison: 
                             float 
           built-ruby:    47415837.0 i/s 
         compare-ruby:    41000410.0 i/s - 1.16x    slower 

                        float_true 
           built-ruby:    21317416.4 i/s 
         compare-ruby:    10875475.8 i/s - 1.96x    slower 

                       float_false 
           built-ruby:    22846698.6 i/s 
         compare-ruby:    13910140.5 i/s - 1.64x    slower 
 ``` 

 `COMPARE_RUBY` is `ruby 3.1.0dev (2021-11-17T13:21:42Z master b95d7d2099) [x86_64-linux]`. BENCH_RUBY is ahead of `ruby 3.1.0dev (2021-11-17T13:21:42Z master b95d7d2099) [x86_64-linux]`. 

 pull request: https://github.com/ruby/ruby/pull/5133

Back