Skip to content
  • Alan Wu's avatar
    5ada23ac
    compile.c: Emit send for === calls in when statements · 5ada23ac
    Alan Wu authored
    The checkmatch instruction with VM_CHECKMATCH_TYPE_CASE calls
    === without a call cache. Emit a send instruction to make the call
    instead. It includes a call cache.
    
    The call cache improves throughput of using when statements to check the
    class of a given object. This is useful for say, JSON serialization.
    
    Use of a regular send instead of checkmatch also avoids taking the VM
    lock every time, which is good for multi-ractor workloads.
    
        Calculating -------------------------------------
                                 master        post
             vm_case_classes    11.013M     16.172M i/s -      6.000M times in 0.544795s 0.371009s
                 vm_case_lit      2.296       2.263 i/s -       1.000 times in 0.435606s 0.441826s
                     vm_case    74.098M     64.338M i/s -      6.000M times in 0.080974s 0.093257s
    
        Comparison:
                          vm_case_classes
                        post:  16172114.4 i/s
                      master:  11013316.9 i/s - 1.47x  slower
    
                              vm_case_lit
                      master:         2.3 i/s
                        post:         2.3 i/s - 1.01x  slower
    
                                  vm_case
                      master:  74097858.6 i/s
                        post:  64338333.9 i/s - 1.15x  slower
    
    The vm_case benchmark is a bit slower post patch, possibily due to the
    larger instruction sequence. The benchmark dispatches using
    opt_case_dispatch so was not running checkmatch and does not make the
    === call post patch.
    5ada23ac
    compile.c: Emit send for === calls in when statements
    Alan Wu authored
    The checkmatch instruction with VM_CHECKMATCH_TYPE_CASE calls
    === without a call cache. Emit a send instruction to make the call
    instead. It includes a call cache.
    
    The call cache improves throughput of using when statements to check the
    class of a given object. This is useful for say, JSON serialization.
    
    Use of a regular send instead of checkmatch also avoids taking the VM
    lock every time, which is good for multi-ractor workloads.
    
        Calculating -------------------------------------
                                 master        post
             vm_case_classes    11.013M     16.172M i/s -      6.000M times in 0.544795s 0.371009s
                 vm_case_lit      2.296       2.263 i/s -       1.000 times in 0.435606s 0.441826s
                     vm_case    74.098M     64.338M i/s -      6.000M times in 0.080974s 0.093257s
    
        Comparison:
                          vm_case_classes
                        post:  16172114.4 i/s
                      master:  11013316.9 i/s - 1.47x  slower
    
                              vm_case_lit
                      master:         2.3 i/s
                        post:         2.3 i/s - 1.01x  slower
    
                                  vm_case
                      master:  74097858.6 i/s
                        post:  64338333.9 i/s - 1.15x  slower
    
    The vm_case benchmark is a bit slower post patch, possibily due to the
    larger instruction sequence. The benchmark dispatches using
    opt_case_dispatch so was not running checkmatch and does not make the
    === call post patch.
Loading