mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
e52b3a0e2c
The OR-ing itself is bad for a hash function, and shifting 3 bits left was not enough to undo the damage done by shifting (RUBY_SPECIAL_SHIFT+3) bits right. Experimentally, shifting 16-17 bits seemed to work well in preparing the number for murmur hash. Add a few more benchmarks to based on bm_hash_shift to ensure we don't hurt performance too much with tweaks. I'm pretty confident about this change and commiting it now; especially since we're still using Murmur behind it (but perhaps we can update to a newer hash from Murmur...) [ruby-core:72028] [Feature #11405] target 0: a (ruby 2.3.0dev (2015-12-11 trunk 53027) [x86_64-linux]) at "/home/ew/rrrr/b/ruby" target 1: b (ruby 2.3.0dev (2015-12-11 master 53027) [x86_64-linux]) at "/home/ew/ruby/b/ruby" benchmark results: minimum results in each 5 measurements. Execution time (sec) name a b hash_aref_dsym 0.279 0.276 hash_aref_dsym_long 4.951 4.936 hash_aref_fix 0.281 0.283 hash_aref_flo 0.060 0.060 hash_aref_miss 0.409 0.410 hash_aref_str 0.387 0.385 hash_aref_sym 0.275 0.270 hash_aref_sym_long 0.410 0.411 hash_flatten 0.252 0.237 hash_ident_flo 0.035 0.032 hash_ident_num 0.254 0.251 hash_ident_obj 0.252 0.256 hash_ident_str 0.250 0.252 hash_ident_sym 0.259 0.270 hash_keys 0.267 0.267 hash_shift 0.016 0.015 hash_shift_u16 0.074 0.072 hash_shift_u24 0.071 0.071 hash_shift_u32 0.073 0.072 hash_to_proc 0.008 0.008 hash_values 0.263 0.264 Speedup ratio: compare with the result of `a' (greater is better) name b hash_aref_dsym 1.009 hash_aref_dsym_long 1.003 hash_aref_fix 0.993 hash_aref_flo 1.001 hash_aref_miss 0.996 hash_aref_str 1.006 hash_aref_sym 1.017 hash_aref_sym_long 0.998 hash_flatten 1.061 hash_ident_flo 1.072 hash_ident_num 1.012 hash_ident_obj 0.987 hash_ident_str 0.993 hash_ident_sym 0.959 hash_keys 0.997 hash_shift 1.036 hash_shift_u16 1.039 hash_shift_u24 1.001 hash_shift_u32 1.017 hash_to_proc 1.001 hash_values 0.995 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53037 b2dd03c8-39d4-4d8f-98ff-823fe69b080e |
||
---|---|---|
.. | ||
gc | ||
other-lang | ||
bm_app_answer.rb | ||
bm_app_aobench.rb | ||
bm_app_erb.rb | ||
bm_app_factorial.rb | ||
bm_app_fib.rb | ||
bm_app_lc_fizzbuzz.rb | ||
bm_app_mandelbrot.rb | ||
bm_app_pentomino.rb | ||
bm_app_raise.rb | ||
bm_app_strconcat.rb | ||
bm_app_tak.rb | ||
bm_app_tarai.rb | ||
bm_app_uri.rb | ||
bm_array_shift.rb | ||
bm_hash_aref_dsym.rb | ||
bm_hash_aref_dsym_long.rb | ||
bm_hash_aref_fix.rb | ||
bm_hash_aref_flo.rb | ||
bm_hash_aref_miss.rb | ||
bm_hash_aref_str.rb | ||
bm_hash_aref_sym.rb | ||
bm_hash_aref_sym_long.rb | ||
bm_hash_flatten.rb | ||
bm_hash_ident_flo.rb | ||
bm_hash_ident_num.rb | ||
bm_hash_ident_obj.rb | ||
bm_hash_ident_str.rb | ||
bm_hash_ident_sym.rb | ||
bm_hash_keys.rb | ||
bm_hash_shift.rb | ||
bm_hash_shift_u16.rb | ||
bm_hash_shift_u24.rb | ||
bm_hash_shift_u32.rb | ||
bm_hash_to_proc.rb | ||
bm_hash_values.rb | ||
bm_io_file_create.rb | ||
bm_io_file_read.rb | ||
bm_io_file_write.rb | ||
bm_io_nonblock_noex.rb | ||
bm_io_nonblock_noex2.rb | ||
bm_io_select.rb | ||
bm_io_select2.rb | ||
bm_io_select3.rb | ||
bm_loop_for.rb | ||
bm_loop_generator.rb | ||
bm_loop_times.rb | ||
bm_loop_whileloop.rb | ||
bm_loop_whileloop2.rb | ||
bm_marshal_dump_flo.rb | ||
bm_marshal_dump_load_geniv.rb | ||
bm_marshal_dump_load_time.rb | ||
bm_require.rb | ||
bm_require_thread.rb | ||
bm_securerandom.rb | ||
bm_so_ackermann.rb | ||
bm_so_array.rb | ||
bm_so_binary_trees.rb | ||
bm_so_concatenate.rb | ||
bm_so_count_words.rb | ||
bm_so_exception.rb | ||
bm_so_fannkuch.rb | ||
bm_so_fasta.rb | ||
bm_so_k_nucleotide.rb | ||
bm_so_lists.rb | ||
bm_so_mandelbrot.rb | ||
bm_so_matrix.rb | ||
bm_so_meteor_contest.rb | ||
bm_so_nbody.rb | ||
bm_so_nested_loop.rb | ||
bm_so_nsieve.rb | ||
bm_so_nsieve_bits.rb | ||
bm_so_object.rb | ||
bm_so_partial_sums.rb | ||
bm_so_pidigits.rb | ||
bm_so_random.rb | ||
bm_so_reverse_complement.rb | ||
bm_so_sieve.rb | ||
bm_so_spectralnorm.rb | ||
bm_vm1_attr_ivar.rb | ||
bm_vm1_attr_ivar_set.rb | ||
bm_vm1_block.rb | ||
bm_vm1_const.rb | ||
bm_vm1_ensure.rb | ||
bm_vm1_float_simple.rb | ||
bm_vm1_gc_short_lived.rb | ||
bm_vm1_gc_short_with_complex_long.rb | ||
bm_vm1_gc_short_with_long.rb | ||
bm_vm1_gc_short_with_symbol.rb | ||
bm_vm1_gc_wb_ary.rb | ||
bm_vm1_gc_wb_ary_promoted.rb | ||
bm_vm1_gc_wb_obj.rb | ||
bm_vm1_gc_wb_obj_promoted.rb | ||
bm_vm1_ivar.rb | ||
bm_vm1_ivar_set.rb | ||
bm_vm1_length.rb | ||
bm_vm1_lvar_init.rb | ||
bm_vm1_lvar_set.rb | ||
bm_vm1_neq.rb | ||
bm_vm1_not.rb | ||
bm_vm1_rescue.rb | ||
bm_vm1_simplereturn.rb | ||
bm_vm1_swap.rb | ||
bm_vm1_yield.rb | ||
bm_vm2_array.rb | ||
bm_vm2_bigarray.rb | ||
bm_vm2_bighash.rb | ||
bm_vm2_case.rb | ||
bm_vm2_case_lit.rb | ||
bm_vm2_defined_method.rb | ||
bm_vm2_dstr.rb | ||
bm_vm2_eval.rb | ||
bm_vm2_method.rb | ||
bm_vm2_method_missing.rb | ||
bm_vm2_method_with_block.rb | ||
bm_vm2_mutex.rb | ||
bm_vm2_newlambda.rb | ||
bm_vm2_poly_method.rb | ||
bm_vm2_poly_method_ov.rb | ||
bm_vm2_proc.rb | ||
bm_vm2_raise1.rb | ||
bm_vm2_raise2.rb | ||
bm_vm2_regexp.rb | ||
bm_vm2_send.rb | ||
bm_vm2_string_literal.rb | ||
bm_vm2_struct_big_aref_hi.rb | ||
bm_vm2_struct_big_aref_lo.rb | ||
bm_vm2_struct_big_aset.rb | ||
bm_vm2_struct_big_href_hi.rb | ||
bm_vm2_struct_big_href_lo.rb | ||
bm_vm2_struct_big_hset.rb | ||
bm_vm2_struct_small_aref.rb | ||
bm_vm2_struct_small_aset.rb | ||
bm_vm2_struct_small_href.rb | ||
bm_vm2_struct_small_hset.rb | ||
bm_vm2_super.rb | ||
bm_vm2_unif1.rb | ||
bm_vm2_zsuper.rb | ||
bm_vm3_backtrace.rb | ||
bm_vm3_clearmethodcache.rb | ||
bm_vm3_gc.rb | ||
bm_vm_symbol_block_pass.rb | ||
bm_vm_thread_alive_check1.rb | ||
bm_vm_thread_close.rb | ||
bm_vm_thread_create_join.rb | ||
bm_vm_thread_mutex1.rb | ||
bm_vm_thread_mutex2.rb | ||
bm_vm_thread_mutex3.rb | ||
bm_vm_thread_pass.rb | ||
bm_vm_thread_pass_flood.rb | ||
bm_vm_thread_pipe.rb | ||
bm_vm_thread_queue.rb | ||
driver.rb | ||
make_fasta_output.rb | ||
prepare_require.rb | ||
prepare_require_thread.rb | ||
prepare_so_count_words.rb | ||
prepare_so_k_nucleotide.rb | ||
prepare_so_reverse_complement.rb | ||
report.rb | ||
run.rb | ||
runc.rb | ||
wc.input.base |