is_pointer_to_heapにCacheを入れる案を試す

珍しく効果がでたのか・・・な? - miura1729の日記
これを試してみたいと思います。
 

benchmark

benchmark results:
minimum results in each 5 measurements.
name	ruby 1.9.0_old (old) [i686-linux]	ruby 1.9.0_new (cache ver) [i686-linux]
app_answer	0.098	0.120
app_erb	3.016	3.054
app_factorial	0.782	0.798
app_fib	1.319	1.335
app_mandelbrot	0.437	0.460
app_pentomino	39.509	39.391
app_raise	1.108	1.132
app_strconcat	0.898	0.922
app_tak	1.709	1.714
app_tarai	1.349	1.354
app_uri	2.001	1.995
io_file_create	0.587	0.582
io_file_read	0.673	0.696
io_file_write	0.346	0.360
loop_generator	1.360	1.382
loop_times	2.947	2.958
loop_whileloop	1.198	1.232
loop_whileloop2	0.255	0.270
so_ackermann	1.409	1.423
so_array	3.014	2.863
so_binary_trees	1.090	1.122
so_concatenate	0.969	0.963
so_count_words	13.443	13.435
so_exception	2.185	2.167
so_fannkuch	39.146	38.679
so_fasta	5.657	5.689
so_k_nucleotide	4.049	3.994
so_lists	0.677	0.683
so_mandelbrot	15.532	15.343
so_matrix	0.877	0.873
so_meteor_contest	12.530	12.466
so_nbody	10.534	10.387
so_nested_loop	2.674	2.588
so_nsieve	5.350	5.333
so_nsieve_bits	7.745	7.768
so_object	1.931	1.998
so_partial_sums	11.886	11.871
so_pidigits	5.051	5.047
so_random	0.650	0.665
so_reverse_complement	13.353	13.378
so_sieve	0.157	0.171
so_spectralnorm	10.629	10.664
vm1_block*	3.701	3.713
vm1_const*	0.573	0.634
vm1_ensure*	0.051	0.042
vm1_ivar*	3.150	3.104
vm1_ivar_set*	2.940	3.071
vm1_length*	1.646	1.637
vm1_neq*	0.975	0.974
vm1_not*	0.524	0.456
vm1_rescue*	0.252	0.182
vm1_simplereturn*	2.016	1.947
vm1_swap*	0.463	0.433
vm2_array*	1.739	1.719
vm2_case*	0.303	0.324
vm2_eval*	44.536	44.026
vm2_method*	3.199	3.150
vm2_mutex*	3.052	3.002
vm2_poly_method*	4.300	4.206
vm2_poly_method_ov*	0.333	0.324
vm2_proc*	1.185	1.215
vm2_regexp*	4.232	3.221
vm2_send*	0.483	0.474
vm2_super*	0.789	0.783
vm2_unif1*	0.453	0.432
vm2_zsuper*	0.864	0.831
vm3_gc	2.233	2.228
vm3_thread_create_join	4.863	4.879

あまり変わらないなぁ。まぁ、こんなものなのかなぁ。
 

research

今回入れたCacheHitの割合を調べてみた。

./benchmark/bm_app_eval.rb
call is_pointer_to_heap : 3623630
cache hit               : 858167(24%)

./benchmark/bm_vm2_eval.rb
call is_pointer_to_heap : 1141236
cache hit               : 456407(40%)

./benchmark/bm_vm3_gc.rb
call is_pointer_to_heap : 564995
cache hit               : 1222420(46%)

おぉ
 

note

でも、手元だと少し遅くなるんだよなぁ。。。う〜ん。
もちょっと調査してからruby-devに投げてみるかのぉ。