Skip to content
  • Takashi Kokubun's avatar
    310ef9f4
    Make vm_call_cfunc_with_frame a fastpath (#3027) · 310ef9f4
    Takashi Kokubun authored
    when there's no need to call CALLER_SETUP_ARG and CALLER_REMOVE_EMPTY_KW_SPLAT
    (i.e. !rb_splat_or_kwargs_p(ci) && !calling->kw_splat).
    
    Micro benchmark:
    ```
    $ benchmark-driver -v --rbenv 'before;after' benchmark/vm_send_cfunc.yml --repeat-count=4
    before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee) [x86_64-linux]
    after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux]
    Calculating -------------------------------------
                             before       after
           vm_send_cfunc    69.585M     88.724M i/s -    100.000M times in 1.437097s 1.127096s
    
    Comparison:
                        vm_send_cfunc
                   after:  88723605.2 i/s
                  before:  69584737.1 i/s - 1.28x  slower
    ```
    
    Optcarrot:
    ```
    $ benchmark-driver -v --rbenv 'before;after' benchmark.yml --repeat-count=12 --output=all
    before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee) [x86_64-linux]
    after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux]
    Calculating -------------------------------------
                                           before                 after
    Optcarrot Lan_Master.nes    50.76119601545175     42.73858236484051 fps
                                50.76388649761503     51.04211379912850
                                50.80930672252514     51.39455790755538
                                50.90236000778749     51.75656936556145
                                51.01744746340430     51.86875277356489
                                51.06495279015112     51.88692482485558
                                51.07785337168974     51.93429603190578
                                51.20163525187862     51.95768145071314
                                51.34671771913112     52.45577266040274
                                51.35918340835583     52.53163888762858
                                51.46641337418146     52.62172484121034
                                51.50835463462257     52.85064021113239
    ```
    310ef9f4
    Make vm_call_cfunc_with_frame a fastpath (#3027)
    Takashi Kokubun authored
    when there's no need to call CALLER_SETUP_ARG and CALLER_REMOVE_EMPTY_KW_SPLAT
    (i.e. !rb_splat_or_kwargs_p(ci) && !calling->kw_splat).
    
    Micro benchmark:
    ```
    $ benchmark-driver -v --rbenv 'before;after' benchmark/vm_send_cfunc.yml --repeat-count=4
    before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee) [x86_64-linux]
    after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux]
    Calculating -------------------------------------
                             before       after
           vm_send_cfunc    69.585M     88.724M i/s -    100.000M times in 1.437097s 1.127096s
    
    Comparison:
                        vm_send_cfunc
                   after:  88723605.2 i/s
                  before:  69584737.1 i/s - 1.28x  slower
    ```
    
    Optcarrot:
    ```
    $ benchmark-driver -v --rbenv 'before;after' benchmark.yml --repeat-count=12 --output=all
    before: ruby 2.8.0dev (2020-04-13T23:45:05Z master b9d3ceee) [x86_64-linux]
    after: ruby 2.8.0dev (2020-04-14T00:48:52Z no-splat-fastpath 418d363722) [x86_64-linux]
    Calculating -------------------------------------
                                           before                 after
    Optcarrot Lan_Master.nes    50.76119601545175     42.73858236484051 fps
                                50.76388649761503     51.04211379912850
                                50.80930672252514     51.39455790755538
                                50.90236000778749     51.75656936556145
                                51.01744746340430     51.86875277356489
                                51.06495279015112     51.88692482485558
                                51.07785337168974     51.93429603190578
                                51.20163525187862     51.95768145071314
                                51.34671771913112     52.45577266040274
                                51.35918340835583     52.53163888762858
                                51.46641337418146     52.62172484121034
                                51.50835463462257     52.85064021113239
    ```
Loading