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...

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63893 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
k0kubun 2018-07-08 16:28:34 +00:00
parent 9e62c93d0d
commit 820ad9cb1d
30 changed files with 242 additions and 336 deletions

View file

@ -73,15 +73,13 @@ loop_count: 1
next if @pattern && /#{@pattern}/ !~ File.basename(file) next if @pattern && /#{@pattern}/ !~ File.basename(file)
next if @exclude && /#{@exclude}/ =~ File.basename(file) next if @exclude && /#{@exclude}/ =~ File.basename(file)
case file case file
when /bm_(vm[12])_/, /bm_loop_(whileloop2?).rb/ when /bm_(vm2)_/, /bm_loop_(whileloop2).rb/
flag[$1] = true flag[$1] = true
end end
file file
}.compact }.compact
if flag['vm1'] && !flag['whileloop'] if flag['vm2'] && !flag['whileloop2']
files << File.join(@dir, 'bm_loop_whileloop.rb')
elsif flag['vm2'] && !flag['whileloop2']
files << File.join(@dir, 'bm_loop_whileloop2.rb') files << File.join(@dir, 'bm_loop_whileloop2.rb')
end end

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_attr_ivar: |
class C class C
attr_reader :a, :b attr_reader :a, :b
def initialize def initialize
@ -8,10 +7,8 @@ benchmark:
end end
end end
obj = C.new obj = C.new
i = 0 benchmark:
while i<30_000_000 # while loop 1 vm1_attr_ivar: |
i += 1
j = obj.a j = obj.a
k = obj.b k = obj.b
end loop_count: 30000000
loop_count: 1

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_attr_ivar_set: |
class C class C
attr_accessor :a, :b attr_accessor :a, :b
def initialize def initialize
@ -8,10 +7,8 @@ benchmark:
end end
end end
obj = C.new obj = C.new
i = 0 benchmark:
while i<30_000_000 # while loop 1 vm1_attr_ivar_set: |
i += 1
obj.a = 1 obj.a = 1
obj.b = 2 obj.b = 2
end loop_count: 30000000
loop_count: 1

View file

@ -1,13 +1,9 @@
benchmark: prelude: |
vm1_block: |
def m def m
yield yield
end end
benchmark:
i = 0 vm1_block: |
while i<30_000_000 # while loop 1
i += 1
m{ m{
} }
end loop_count: 30000000
loop_count: 1

View file

@ -1,11 +1,8 @@
benchmark: prelude: |
vm1_blockparam: |
def m &b def m &b
end end
benchmark:
vm1_blockparam: 'm{}
i = 0 '
while i<30_000_000 # while loop 1 loop_count: 30000000
i += 1
m{}
end
loop_count: 1

View file

@ -1,12 +1,9 @@
benchmark: prelude: |
vm1_blockparam_call: |
def m &b def m &b
b.call b.call
end end
benchmark:
vm1_blockparam_call: 'm{}
i = 0 '
while i<30_000_000 # while loop 1 loop_count: 30000000
i += 1
m{}
end
loop_count: 1

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_blockparam_pass: |
def bp_yield def bp_yield
yield yield
end end
@ -7,10 +6,8 @@ benchmark:
def bp_pass &b def bp_pass &b
bp_yield &b bp_yield &b
end end
benchmark:
vm1_blockparam_pass: 'bp_pass{}
i = 0 '
while i<30_000_000 # while loop 1 loop_count: 30000000
i += 1
bp_pass{}
end
loop_count: 1

View file

@ -1,12 +1,9 @@
benchmark: prelude: |
vm1_blockparam_yield: |
def bp_yield &b def bp_yield &b
yield yield
end end
benchmark:
vm1_blockparam_yield: 'bp_yield{}
i = 0 '
while i<30_000_000 # while loop 1 loop_count: 30000000
i += 1
bp_yield{}
end
loop_count: 1

View file

@ -1,11 +1,8 @@
prelude: 'Const = 1
'
benchmark: benchmark:
vm1_const: | vm1_const: |
Const = 1
i = 0
while i<30_000_000 # while loop 1
i += 1
j = Const j = Const
k = Const k = Const
end loop_count: 30000000
loop_count: 1

View file

@ -1,13 +1,9 @@
benchmark: benchmark:
vm1_ensure: | vm1_ensure: |
i = 0
while i<30_000_000 # benchmark loop 1
i += 1
begin begin
begin begin
ensure ensure
end end
ensure ensure
end end
end loop_count: 30000000
loop_count: 1

View file

@ -1,10 +1,8 @@
prelude: |
f = 0.0
benchmark: benchmark:
vm1_float_simple: | 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 f += 0.1; f -= 0.1
f += 0.1; f -= 0.1 f += 0.1; f -= 0.1
end loop_count: 30000000
loop_count: 1

View file

@ -1,13 +1,9 @@
benchmark: benchmark:
vm1_gc_short_lived: | vm1_gc_short_lived: |
i = 0
while i<30_000_000 # while loop 1
a = '' # short-lived String a = '' # short-lived String
b = '' b = ''
c = '' c = ''
d = '' d = ''
e = '' e = ''
f = '' f = ''
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_gc_short_with_complex_long: |
def nested_hash h, n def nested_hash h, n
if n == 0 if n == 0
'' ''
@ -15,15 +14,12 @@ benchmark:
GC.start GC.start
GC.start GC.start
benchmark:
i = 0 vm1_gc_short_with_complex_long: |
while i<30_000_000 # while loop 1
a = '' # short-lived String a = '' # short-lived String
b = '' b = ''
c = '' c = ''
d = '' d = ''
e = '' e = ''
f = '' f = ''
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,16 +1,13 @@
benchmark: prelude: |
vm1_gc_short_with_long: |
long_lived = Array.new(1_000_000){|i| "#{i}"} long_lived = Array.new(1_000_000){|i| "#{i}"}
GC.start GC.start
GC.start GC.start
i = 0 benchmark:
while i<30_000_000 # while loop 1 vm1_gc_short_with_long: |
a = '' # short-lived String a = '' # short-lived String
b = '' b = ''
c = '' c = ''
d = '' d = ''
e = '' e = ''
f = '' f = ''
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,19 +1,13 @@
prelude: | prelude: |
# make many symbols
benchmark:
vm1_gc_short_with_symbol: |
50_000.times{|i| sym = "sym#{i}".to_sym} 50_000.times{|i| sym = "sym#{i}".to_sym}
GC.start GC.start
GC.start GC.start
benchmark:
i = 0 vm1_gc_short_with_symbol: |
while i<30_000_000 # while loop 1
a = '' # short-lived String a = '' # short-lived String
b = '' b = ''
c = '' c = ''
d = '' d = ''
e = '' e = ''
f = '' f = ''
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,15 +1,12 @@
benchmark: prelude: |
vm1_gc_wb_ary: |
short_lived_ary = [] short_lived_ary = []
if RUBY_VERSION >= "2.2.0" if RUBY_VERSION >= "2.2.0"
GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true)
end end
i = 0
short_lived = '' short_lived = ''
while i<30_000_000 # while loop 1 benchmark:
vm1_gc_wb_ary: |
short_lived_ary[0] = short_lived # write barrier short_lived_ary[0] = short_lived # write barrier
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_gc_wb_ary_promoted: |
long_lived = [] long_lived = []
if RUBY_VERSION > "2.2.0" if RUBY_VERSION > "2.2.0"
@ -8,10 +7,9 @@ benchmark:
GC.start GC.start
end end
i = 0
short_lived = '' short_lived = ''
while i<30_000_000 # while loop 1
benchmark:
vm1_gc_wb_ary_promoted: |
long_lived[0] = short_lived # write barrier long_lived[0] = short_lived # write barrier
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_gc_wb_obj: |
class C class C
attr_accessor :foo attr_accessor :foo
end end
@ -9,10 +8,8 @@ benchmark:
GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true)
end end
i = 0
short_lived = '' short_lived = ''
while i<30_000_000 # while loop 1 benchmark:
vm1_gc_wb_obj: |
short_lived_obj.foo = short_lived # write barrier short_lived_obj.foo = short_lived # write barrier
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_gc_wb_obj_promoted: |
class C class C
attr_accessor :foo attr_accessor :foo
end end
@ -11,10 +10,8 @@ benchmark:
GC.start GC.start
end end
i = 0
short_lived = '' short_lived = ''
while i<30_000_000 # while loop 1 benchmark:
vm1_gc_wb_obj_promoted: |
long_lived.foo = short_lived # write barrier long_lived.foo = short_lived # write barrier
i+=1 loop_count: 30000000
end
loop_count: 1

View file

@ -1,11 +1,6 @@
prelude: "@a = 1\n"
benchmark: benchmark:
vm1_ivar: | vm1_ivar: |
@a = 1
i = 0
while i<30_000_000 # while loop 1
i += 1
j = @a j = @a
k = @a k = @a
end loop_count: 30000000
loop_count: 1

View file

@ -1,9 +1,5 @@
benchmark: benchmark:
vm1_ivar_set: | vm1_ivar_set: |
i = 0
while i<30_000_000 # while loop 1
i += 1
@a = 1 @a = 1
@b = 2 @b = 2
end loop_count: 30000000
loop_count: 1

View file

@ -1,11 +1,8 @@
benchmark: prelude: |
vm1_length: |
a = 'abc' a = 'abc'
b = [1, 2, 3] b = [1, 2, 3]
i = 0 benchmark:
while i<30_000_000 # while loop 1 vm1_length: |
i += 1
a.length a.length
b.length b.length
end loop_count: 30000000
loop_count: 1

View file

@ -1,5 +1,4 @@
benchmark: prelude: |
vm1_lvar_init: |
def m v def m v
unless v unless v
# unreachable code # unreachable code
@ -10,11 +9,8 @@ benchmark:
v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1 v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1
end end
end end
benchmark:
vm1_lvar_init: 'm i
i = 0 '
loop_count: 30000000
while i<30_000_000 # while loop 1
i += 1
m i
end
loop_count: 1

View file

@ -1,8 +1,6 @@
benchmark: benchmark:
vm1_lvar_set: | vm1_lvar_set: 'a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r
i = 0 = 1
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 loop_count: 30000000
end
loop_count: 1

View file

@ -1,11 +1,7 @@
benchmark: prelude: |
vm1_neq: |
i = 0
obj1 = Object.new obj1 = Object.new
obj2 = Object.new obj2 = Object.new
benchmark:
while i<30_000_000 # while loop 1 vm1_neq: |
i += 1
obj1 != obj2 obj1 != obj2
end loop_count: 30000000
loop_count: 1

View file

@ -1,10 +1,6 @@
prelude: |
obj = Object.new
benchmark: benchmark:
vm1_not: | vm1_not: |
i = 0
obj = Object.new
while i<30_000_000 # while loop 1
i += 1
!obj !obj
end loop_count: 30000000
loop_count: 1

View file

@ -1,10 +1,6 @@
benchmark: benchmark:
vm1_rescue: | vm1_rescue: |
i = 0
while i<30_000_000 # while loop 1
i += 1
begin begin
rescue rescue
end end
end loop_count: 30000000
loop_count: 1

View file

@ -1,11 +1,9 @@
benchmark: prelude: |
vm1_simplereturn: |
def m def m
return 1 return 1
end end
i = 0 benchmark:
while i<30_000_000 # while loop 1 vm1_simplereturn: 'm
i += 1
m '
end loop_count: 30000000
loop_count: 1

View file

@ -1,10 +1,8 @@
benchmark: prelude: |
vm1_swap: |
a = 1 a = 1
b = 2 b = 2
i = 0 benchmark:
while i<30_000_000 # while loop 1 vm1_swap: 'a, b = b, a
i += 1
a, b = b, a '
end loop_count: 30000000
loop_count: 1

View file

@ -1,8 +1,9 @@
# while loop cost is not removed due to benchmark_driver.gem's limitation
benchmark: benchmark:
vm1_yield: | vm1_yield: |
def m def m
i = 0 i = 0
while i<30_000_000 # while loop 1 while i<30_000_000
i += 1 i += 1
yield yield
end end