ruby-changes:51681
From: k0kubun <ko1@a...>
Date: Mon, 9 Jul 2018 01:28:42 +0900 (JST)
Subject: [ruby-changes:51681] k0kubun:r63893 (trunk): benchmark/vm1_*.yml: abstract away the while loop
k0kubun 2018-07-09 01:28:34 +0900 (Mon, 09 Jul 2018) New Revision: 63893 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=63893 Log: benchmark/vm1_*.yml: abstract away the while loop benchmark/driver.rb had removed the cost for while loop in benchmark/bm_vm1_*.rb, and benchmark_driver.gem can achieve the same thing with `loop_count`. But unfortunately current benchmark_driver.gem can't solve it only for vm1_yield.yml... Modified files: trunk/benchmark/driver.rb trunk/benchmark/vm1_attr_ivar.yml trunk/benchmark/vm1_attr_ivar_set.yml trunk/benchmark/vm1_block.yml trunk/benchmark/vm1_blockparam.yml trunk/benchmark/vm1_blockparam_call.yml trunk/benchmark/vm1_blockparam_pass.yml trunk/benchmark/vm1_blockparam_yield.yml trunk/benchmark/vm1_const.yml trunk/benchmark/vm1_ensure.yml trunk/benchmark/vm1_float_simple.yml trunk/benchmark/vm1_gc_short_lived.yml trunk/benchmark/vm1_gc_short_with_complex_long.yml trunk/benchmark/vm1_gc_short_with_long.yml trunk/benchmark/vm1_gc_short_with_symbol.yml trunk/benchmark/vm1_gc_wb_ary.yml trunk/benchmark/vm1_gc_wb_ary_promoted.yml trunk/benchmark/vm1_gc_wb_obj.yml trunk/benchmark/vm1_gc_wb_obj_promoted.yml trunk/benchmark/vm1_ivar.yml trunk/benchmark/vm1_ivar_set.yml trunk/benchmark/vm1_length.yml trunk/benchmark/vm1_lvar_init.yml trunk/benchmark/vm1_lvar_set.yml trunk/benchmark/vm1_neq.yml trunk/benchmark/vm1_not.yml trunk/benchmark/vm1_rescue.yml trunk/benchmark/vm1_simplereturn.yml trunk/benchmark/vm1_swap.yml trunk/benchmark/vm1_yield.yml Index: benchmark/vm1_ensure.yml =================================================================== --- benchmark/vm1_ensure.yml (revision 63892) +++ benchmark/vm1_ensure.yml (revision 63893) @@ -1,13 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_ensure.yml#L1 benchmark: vm1_ensure: | - i = 0 - while i<30_000_000 # benchmark loop 1 - i += 1 + begin begin - begin - ensure - end ensure end + ensure end -loop_count: 1 +loop_count: 30000000 Index: benchmark/vm1_const.yml =================================================================== --- benchmark/vm1_const.yml (revision 63892) +++ benchmark/vm1_const.yml (revision 63893) @@ -1,11 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_const.yml#L1 +prelude: 'Const = 1 + +' benchmark: vm1_const: | - Const = 1 - - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - j = Const - k = Const - end -loop_count: 1 + j = Const + k = Const +loop_count: 30000000 Index: benchmark/vm1_lvar_set.yml =================================================================== --- benchmark/vm1_lvar_set.yml (revision 63892) +++ benchmark/vm1_lvar_set.yml (revision 63893) @@ -1,8 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_lvar_set.yml#L1 benchmark: - vm1_lvar_set: | - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r = 1 - end -loop_count: 1 + vm1_lvar_set: 'a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r + = 1 + +' +loop_count: 30000000 Index: benchmark/vm1_gc_short_with_symbol.yml =================================================================== --- benchmark/vm1_gc_short_with_symbol.yml (revision 63892) +++ benchmark/vm1_gc_short_with_symbol.yml (revision 63893) @@ -1,19 +1,13 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_short_with_symbol.yml#L1 prelude: | - # make many symbols + 50_000.times{|i| sym = "sym#{i}".to_sym} + GC.start + GC.start benchmark: vm1_gc_short_with_symbol: | - 50_000.times{|i| sym = "sym#{i}".to_sym} - GC.start - GC.start - - i = 0 - while i<30_000_000 # while loop 1 - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' - i+=1 - end -loop_count: 1 + a = '' # short-lived String + b = '' + c = '' + d = '' + e = '' + f = '' +loop_count: 30000000 Index: benchmark/vm1_blockparam_pass.yml =================================================================== --- benchmark/vm1_blockparam_pass.yml (revision 63892) +++ benchmark/vm1_blockparam_pass.yml (revision 63893) @@ -1,16 +1,13 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_blockparam_pass.yml#L1 -benchmark: - vm1_blockparam_pass: | - def bp_yield - yield - end +prelude: | + def bp_yield + yield + end - def bp_pass &b - bp_yield &b - end + def bp_pass &b + bp_yield &b + end +benchmark: + vm1_blockparam_pass: 'bp_pass{} - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - bp_pass{} - end -loop_count: 1 +' +loop_count: 30000000 Index: benchmark/vm1_blockparam_yield.yml =================================================================== --- benchmark/vm1_blockparam_yield.yml (revision 63892) +++ benchmark/vm1_blockparam_yield.yml (revision 63893) @@ -1,12 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_blockparam_yield.yml#L1 +prelude: | + def bp_yield &b + yield + end benchmark: - vm1_blockparam_yield: | - def bp_yield &b - yield - end + vm1_blockparam_yield: 'bp_yield{} - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - bp_yield{} - end -loop_count: 1 +' +loop_count: 30000000 Index: benchmark/vm1_blockparam.yml =================================================================== --- benchmark/vm1_blockparam.yml (revision 63892) +++ benchmark/vm1_blockparam.yml (revision 63893) @@ -1,11 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_blockparam.yml#L1 +prelude: | + def m &b + end benchmark: - vm1_blockparam: | - def m &b - end + vm1_blockparam: 'm{} - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - m{} - end -loop_count: 1 +' +loop_count: 30000000 Index: benchmark/vm1_float_simple.yml =================================================================== --- benchmark/vm1_float_simple.yml (revision 63892) +++ benchmark/vm1_float_simple.yml (revision 63893) @@ -1,10 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_float_simple.yml#L1 +prelude: | + f = 0.0 benchmark: vm1_float_simple: | - i = 0.0; f = 0.0 - while i<30_000_000 - i += 1 - f += 0.1; f -= 0.1 - f += 0.1; f -= 0.1 - f += 0.1; f -= 0.1 - end -loop_count: 1 + f += 0.1; f -= 0.1 + f += 0.1; f -= 0.1 + f += 0.1; f -= 0.1 +loop_count: 30000000 Index: benchmark/vm1_neq.yml =================================================================== --- benchmark/vm1_neq.yml (revision 63892) +++ benchmark/vm1_neq.yml (revision 63893) @@ -1,11 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_neq.yml#L1 +prelude: | + obj1 = Object.new + obj2 = Object.new benchmark: vm1_neq: | - i = 0 - obj1 = Object.new - obj2 = Object.new - - while i<30_000_000 # while loop 1 - i += 1 - obj1 != obj2 - end -loop_count: 1 + obj1 != obj2 +loop_count: 30000000 Index: benchmark/vm1_simplereturn.yml =================================================================== --- benchmark/vm1_simplereturn.yml (revision 63892) +++ benchmark/vm1_simplereturn.yml (revision 63893) @@ -1,11 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_simplereturn.yml#L1 +prelude: | + def m + return 1 + end benchmark: - vm1_simplereturn: | - def m - return 1 - end - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - m - end -loop_count: 1 + vm1_simplereturn: 'm + +' +loop_count: 30000000 Index: benchmark/vm1_gc_short_lived.yml =================================================================== --- benchmark/vm1_gc_short_lived.yml (revision 63892) +++ benchmark/vm1_gc_short_lived.yml (revision 63893) @@ -1,13 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_short_lived.yml#L1 benchmark: vm1_gc_short_lived: | - i = 0 - while i<30_000_000 # while loop 1 - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' - i+=1 - end -loop_count: 1 + a = '' # short-lived String + b = '' + c = '' + d = '' + e = '' + f = '' +loop_count: 30000000 Index: benchmark/vm1_swap.yml =================================================================== --- benchmark/vm1_swap.yml (revision 63892) +++ benchmark/vm1_swap.yml (revision 63893) @@ -1,10 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_swap.yml#L1 +prelude: | + a = 1 + b = 2 benchmark: - vm1_swap: | - a = 1 - b = 2 - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - a, b = b, a - end -loop_count: 1 + vm1_swap: 'a, b = b, a + +' +loop_count: 30000000 Index: benchmark/vm1_gc_short_with_long.yml =================================================================== --- benchmark/vm1_gc_short_with_long.yml (revision 63892) +++ benchmark/vm1_gc_short_with_long.yml (revision 63893) @@ -1,16 +1,13 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_short_with_long.yml#L1 +prelude: | + long_lived = Array.new(1_000_000){|i| "#{i}"} + GC.start + GC.start benchmark: vm1_gc_short_with_long: | - long_lived = Array.new(1_000_000){|i| "#{i}"} - GC.start - GC.start - i = 0 - while i<30_000_000 # while loop 1 - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' - i+=1 - end -loop_count: 1 + a = '' # short-lived String + b = '' + c = '' + d = '' + e = '' + f = '' +loop_count: 30000000 Index: benchmark/vm1_attr_ivar.yml =================================================================== --- benchmark/vm1_attr_ivar.yml (revision 63892) +++ benchmark/vm1_attr_ivar.yml (revision 63893) @@ -1,17 +1,14 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_attr_ivar.yml#L1 +prelude: | + class C + attr_reader :a, :b + def initialize + @a = nil + @b = nil + end + end + obj = C.new benchmark: vm1_attr_ivar: | - class C - attr_reader :a, :b - def initialize - @a = nil - @b = nil - end - end - obj = C.new - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - j = obj.a - k = obj.b - end -loop_count: 1 + j = obj.a + k = obj.b +loop_count: 30000000 Index: benchmark/vm1_gc_short_with_complex_long.yml =================================================================== --- benchmark/vm1_gc_short_with_complex_long.yml (revision 63892) +++ benchmark/vm1_gc_short_with_complex_long.yml (revision 63893) @@ -1,29 +1,25 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_short_with_complex_long.yml#L1 -benchmark: - vm1_gc_short_with_complex_long: | - def nested_hash h, n - if n == 0 - '' - else - 10.times{ - h[Object.new] = nested_hash(h, n-1) - } - end +prelude: | + def nested_hash h, n + if n == 0 + '' + else + 10.times{ + h[Object.new] = nested_hash(h, n-1) + } end + end - long_lived = Hash.new - nested_hash long_lived, 6 - - GC.start - GC.start + long_lived = Hash.new + nested_hash long_lived, 6 - i = 0 - while i<30_000_000 # while loop 1 - a = '' # short-lived String - b = '' - c = '' - d = '' - e = '' - f = '' - i+=1 - end -loop_count: 1 + GC.start + GC.start +benchmark: + vm1_gc_short_with_complex_long: | + a = '' # short-lived String + b = '' + c = '' + d = '' + e = '' + f = '' +loop_count: 30000000 Index: benchmark/vm1_gc_wb_obj_promoted.yml =================================================================== --- benchmark/vm1_gc_wb_obj_promoted.yml (revision 63892) +++ benchmark/vm1_gc_wb_obj_promoted.yml (revision 63893) @@ -1,20 +1,17 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_wb_obj_promoted.yml#L1 -benchmark: - vm1_gc_wb_obj_promoted: | - class C - attr_accessor :foo - end - long_lived = C.new +prelude: | + class C + attr_accessor :foo + end + long_lived = C.new - if RUBY_VERSION >= "2.2.0" - 3.times{ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) } - elsif - GC.start - end + if RUBY_VERSION >= "2.2.0" + 3.times{ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) } + elsif + GC.start + end - i = 0 - short_lived = '' - while i<30_000_000 # while loop 1 - long_lived.foo = short_lived # write barrier - i+=1 - end -loop_count: 1 + short_lived = '' +benchmark: + vm1_gc_wb_obj_promoted: | + long_lived.foo = short_lived # write barrier +loop_count: 30000000 Index: benchmark/vm1_block.yml =================================================================== --- benchmark/vm1_block.yml (revision 63892) +++ benchmark/vm1_block.yml (revision 63893) @@ -1,13 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_block.yml#L1 +prelude: | + def m + yield + end benchmark: vm1_block: | - def m - yield - end - - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - m{ - } - end -loop_count: 1 + m{ + } +loop_count: 30000000 Index: benchmark/vm1_attr_ivar_set.yml =================================================================== --- benchmark/vm1_attr_ivar_set.yml (revision 63892) +++ benchmark/vm1_attr_ivar_set.yml (revision 63893) @@ -1,17 +1,14 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_attr_ivar_set.yml#L1 +prelude: | + class C + attr_accessor :a, :b + def initialize + @a = nil + @b = nil + end + end + obj = C.new benchmark: vm1_attr_ivar_set: | - class C - attr_accessor :a, :b - def initialize - @a = nil - @b = nil - end - end - obj = C.new - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - obj.a = 1 - obj.b = 2 - end -loop_count: 1 + obj.a = 1 + obj.b = 2 +loop_count: 30000000 Index: benchmark/vm1_yield.yml =================================================================== --- benchmark/vm1_yield.yml (revision 63892) +++ benchmark/vm1_yield.yml (revision 63893) @@ -1,8 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_yield.yml#L1 +# while loop cost is not removed due to benchmark_driver.gem's limitation benchmark: vm1_yield: | def m i = 0 - while i<30_000_000 # while loop 1 + while i<30_000_000 i += 1 yield end Index: benchmark/driver.rb =================================================================== --- benchmark/driver.rb (revision 63892) +++ benchmark/driver.rb (revision 63893) @@ -73,15 +73,13 @@ loop_count: 1 https://github.com/ruby/ruby/blob/trunk/benchmark/driver.rb#L73 next if @pattern && /#{@pattern}/ !~ File.basename(file) next if @exclude && /#{@exclude}/ =~ File.basename(file) case file - when /bm_(vm[12])_/, /bm_loop_(whileloop2?).rb/ + when /bm_(vm2)_/, /bm_loop_(whileloop2).rb/ flag[$1] = true end file }.compact - if flag['vm1'] && !flag['whileloop'] - files << File.join(@dir, 'bm_loop_whileloop.rb') - elsif flag['vm2'] && !flag['whileloop2'] + if flag['vm2'] && !flag['whileloop2'] files << File.join(@dir, 'bm_loop_whileloop2.rb') end Index: benchmark/vm1_length.yml =================================================================== --- benchmark/vm1_length.yml (revision 63892) +++ benchmark/vm1_length.yml (revision 63893) @@ -1,11 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_length.yml#L1 +prelude: | + a = 'abc' + b = [1, 2, 3] benchmark: vm1_length: | - a = 'abc' - b = [1, 2, 3] - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - a.length - b.length - end -loop_count: 1 + a.length + b.length +loop_count: 30000000 Index: benchmark/vm1_gc_wb_ary_promoted.yml =================================================================== --- benchmark/vm1_gc_wb_ary_promoted.yml (revision 63892) +++ benchmark/vm1_gc_wb_ary_promoted.yml (revision 63893) @@ -1,17 +1,15 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_wb_ary_promoted.yml#L1 -benchmark: - vm1_gc_wb_ary_promoted: | - long_lived = [] +prelude: | + long_lived = [] + + if RUBY_VERSION > "2.2.0" + 3.times{ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) } + elsif + GC.start + end - if RUBY_VERSION > "2.2.0" - 3.times{ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) } - elsif - GC.start - end + short_lived = '' - i = 0 - short_lived = '' - while i<30_000_000 # while loop 1 - long_lived[0] = short_lived # write barrier - i+=1 - end -loop_count: 1 +benchmark: + vm1_gc_wb_ary_promoted: | + long_lived[0] = short_lived # write barrier +loop_count: 30000000 Index: benchmark/vm1_ivar.yml =================================================================== --- benchmark/vm1_ivar.yml (revision 63892) +++ benchmark/vm1_ivar.yml (revision 63893) @@ -1,11 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_ivar.yml#L1 +prelude: "@a = 1\n" benchmark: vm1_ivar: | - @a = 1 - - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - j = @a - k = @a - end -loop_count: 1 + j = @a + k = @a +loop_count: 30000000 Index: benchmark/vm1_blockparam_call.yml =================================================================== --- benchmark/vm1_blockparam_call.yml (revision 63892) +++ benchmark/vm1_blockparam_call.yml (revision 63893) @@ -1,12 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_blockparam_call.yml#L1 +prelude: | + def m &b + b.call + end benchmark: - vm1_blockparam_call: | - def m &b - b.call - end + vm1_blockparam_call: 'm{} - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - m{} - end -loop_count: 1 +' +loop_count: 30000000 Index: benchmark/vm1_gc_wb_obj.yml =================================================================== --- benchmark/vm1_gc_wb_obj.yml (revision 63892) +++ benchmark/vm1_gc_wb_obj.yml (revision 63893) @@ -1,18 +1,15 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_wb_obj.yml#L1 -benchmark: - vm1_gc_wb_obj: | - class C - attr_accessor :foo - end - short_lived_obj = C.new +prelude: | + class C + attr_accessor :foo + end + short_lived_obj = C.new - if RUBY_VERSION >= "2.2.0" - GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) - end + if RUBY_VERSION >= "2.2.0" + GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) + end - i = 0 - short_lived = '' - while i<30_000_000 # while loop 1 - short_lived_obj.foo = short_lived # write barrier - i+=1 - end -loop_count: 1 + short_lived = '' +benchmark: + vm1_gc_wb_obj: | + short_lived_obj.foo = short_lived # write barrier +loop_count: 30000000 Index: benchmark/vm1_rescue.yml =================================================================== --- benchmark/vm1_rescue.yml (revision 63892) +++ benchmark/vm1_rescue.yml (revision 63893) @@ -1,10 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_rescue.yml#L1 benchmark: vm1_rescue: | - i = 0 - while i<30_000_000 # while loop 1 - i += 1 - begin - rescue - end + begin + rescue end -loop_count: 1 +loop_count: 30000000 Index: benchmark/vm1_lvar_init.yml =================================================================== --- benchmark/vm1_lvar_init.yml (revision 63892) +++ benchmark/vm1_lvar_init.yml (revision 63893) @@ -1,20 +1,16 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_lvar_init.yml#L1 -benchmark: - vm1_lvar_init: | - def m v - unless v - # unreachable code - v1 = v2 = v3 = v4 = v5 = v6 = v7 = v8 = v9 = v10 = - v11 = v12 = v13 = v14 = v15 = v16 = v17 = v18 = v19 = v20 = - v21 = v22 = v23 = v24 = v25 = v26 = v27 = v28 = v29 = v30 = - v31 = v32 = v33 = v34 = v35 = v36 = v37 = v38 = v39 = v40 = - v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1 - end +prelude: | + def m v + unless v + # unreachable code + v1 = v2 = v3 = v4 = v5 = v6 = v7 = v8 = v9 = v10 = + v11 = v12 = v13 = v14 = v15 = v16 = v17 = v18 = v19 = v20 = + v21 = v22 = v23 = v24 = v25 = v26 = v27 = v28 = v29 = v30 = + v31 = v32 = v33 = v34 = v35 = v36 = v37 = v38 = v39 = v40 = + v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1 end + end +benchmark: + vm1_lvar_init: 'm i - i = 0 - - while i<30_000_000 # while loop 1 - i += 1 - m i - end -loop_count: 1 +' +loop_count: 30000000 Index: benchmark/vm1_gc_wb_ary.yml =================================================================== --- benchmark/vm1_gc_wb_ary.yml (revision 63892) +++ benchmark/vm1_gc_wb_ary.yml (revision 63893) @@ -1,15 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/vm1_gc_wb_ary.yml#L1 -benchmark: - vm1_gc_wb_ary: | - short_lived_ary = [] +prelude: | + short_lived_ary = [] - if RUBY_VERSION >= "2.2.0" - GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) - end + if RUBY_VERSION >= "2.2.0" + GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) + end - i = 0 - short_lived = '' - while i<30_000_000 # while loop 1 - shor (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/