[ruby-cvs:58730] normal:r51582 (trunk): hash.c: improve integer/fixnum hashing

normal at ruby-lang.org normal at ruby-lang.org
Sat Aug 15 04:52:06 JST 2015


normal	2015-08-15 04:52:06 +0900 (Sat, 15 Aug 2015)

  New Revision: 51582

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51582

  Log:
    hash.c: improve integer/fixnum hashing
    
    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, causing regresions with static symbols in 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
      [ruby-core:70181] [Feature #11405]
    
    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

  Modified files:
    trunk/ChangeLog
    trunk/hash.c


More information about the ruby-cvs mailing list