Project

General

Profile

Feature #11405

Updated by nobu (Nobuyoshi Nakada) almost 9 years ago

Noticed with [ruby-core:70159] [Bug #11396] 

 
 ~~~ 
 The low bits of Ruby object IDs are rarely populated in the current 
 implementation, so ensure the get used. 

 Early versions of this patch redundantly shifted static symbols in 
 `any_hash`, any_hash, causing regressions regresions with static symbols in `hash_aref_sym` hash_aref_sym 

 * hash.c (any_hash): skip rb_objid_hash for static syms 
   (rb_num_hash_start): extract from rb_ident_hash 
   (rb_objid_hash): call rb_num_hash_start 
   (rb_ident_hash): ditto 

 ~~~ 
 target 0: a (ruby 2.3.0dev (2015-07-30 trunk 51437) [x86_64-linux] 
 target 1: b (ruby 2.3.0dev (2015-07-30 patch 51437) [x86_64-linux] 

 benchmark results from Xeon E3-1230 v3 @ 3.30GHz (turbo disabled): 
 minimum results in each 10 measurements. 
 Execution time (sec) 
 name                  a         b 
 hash_aref_dsym          0.316     0.300 
 hash_aref_dsym_long     5.106     5.063 
 hash_aref_fix           0.304     0.297 
 hash_aref_flo           0.061     0.060 
 hash_aref_miss          0.433     0.430 
 hash_aref_str           0.408     0.396 
 hash_aref_sym           0.312     0.306 
 hash_aref_sym_long      0.482     0.469 
 hash_flatten            0.385     0.273 
 hash_ident_flo          0.036     0.037 
 hash_ident_num          0.277     0.276 
 hash_ident_obj          0.291     0.284 
 hash_ident_str          0.289     0.286 
 hash_ident_sym          0.285     0.281 
 hash_keys               0.269     0.271 
 hash_shift              0.020     0.016 
 hash_values             0.264     0.264 
 loop_whileloop2         0.101     0.099 
 vm2_bighash*            3.066     2.972 

 Speedup ratio: compare with the result of `a' (greater is better) 
 name                  b 
 hash_aref_dsym          1.052 
 hash_aref_dsym_long     1.008 
 hash_aref_fix           1.024 
 hash_aref_flo           1.015 
 hash_aref_miss          1.007 
 hash_aref_str           1.031 
 hash_aref_sym           1.018 
 hash_aref_sym_long      1.027 
 hash_flatten            1.410 
 hash_ident_flo          0.994 
 hash_ident_num          1.001 
 hash_ident_obj          1.022 
 hash_ident_str          1.012 
 hash_ident_sym          1.016 
 hash_keys               0.992 
 hash_shift              1.237 
 hash_values             1.001 
 loop_whileloop2         1.013 
 vm2_bighash*            1.032 
 ~~~ 

 I will commit in a few weeks if everyone is OK with this. 

Back