benchmark
require 'benchmark'
total = (ENV['TOTAL'] || 1_000).to_i
fixnums = Array.new(total).fill { |a| rand(100_000).to_i }
bignums = Array.new(total).fill { |a| 0xffff_ffff_ffff_ffff + rand(100_000).to_i }
floats = Array.new(total).fill { |a| rand(100_000).to_f }
Benchmark.bmbm do |x|
x.report("loop") do
times = 0
while times < total
i, j = 0, total-1
while i < total
i += 1
j -= 1
end
times += 1
end
end
x.report("Bignum + Bignum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
bignums[i] + bignums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Bignum + Fixnum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
bignums[i] + fixnums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Bignum + Float") do
times = 0
while times < total
i, j = 0, total-1
while i < total
bignums[i] + floats[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Fixnum + Fixnum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
fixnums[i] + fixnums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Fixnum + Bignum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
fixnums[i] + bignums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Fixnum + Float") do
times = 0
while times < total
i, j = 0, total-1
while i < total
fixnums[i] + floats[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Float + Float") do
times = 0
while times < total
i, j = 0, total-1
while i < total
floats[i] + floats[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Float + Bignum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
floats[i] + bignums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Float + Fixnum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
floats[i] + fixnums[j]
i += 1
j -= 1
end
times += 1
end
end
end
|
MRI
euler:rubinius brian$ TOTAL=1_000 ruby math.rb
Rehearsal ---------------------------------------------------
loop 0.520000 0.000000 0.520000 ( 0.526538)
Bignum + Bignum 1.230000 0.010000 1.240000 ( 1.241606)
Bignum + Fixnum 1.470000 0.000000 1.470000 ( 1.480382)
Bignum + Float 1.000000 0.010000 1.010000 ( 1.023455)
Fixnum + Fixnum 0.940000 0.000000 0.940000 ( 0.956190)
Fixnum + Bignum 1.960000 0.010000 1.970000 ( 1.976145)
Fixnum + Float 0.980000 0.010000 0.990000 ( 0.986041)
Float + Float 0.970000 0.000000 0.970000 ( 0.983038)
Float + Bignum 1.000000 0.010000 1.010000 ( 1.028215)
Float + Fixnum 0.990000 0.000000 0.990000 ( 0.992212)
----------------------------------------- total: 11.110000sec
user system total real
loop 0.510000 0.010000 0.520000 ( 0.513927)
Bignum + Bignum 1.230000 0.000000 1.230000 ( 1.229817)
Bignum + Fixnum 1.460000 0.010000 1.470000 ( 1.477439)
Bignum + Float 1.000000 0.000000 1.000000 ( 1.007784)
Fixnum + Fixnum 0.930000 0.010000 0.940000 ( 0.956147)
Fixnum + Bignum 1.950000 0.000000 1.950000 ( 1.977649)
Fixnum + Float 0.970000 0.000000 0.970000 ( 0.972687)
Float + Float 0.980000 0.010000 0.990000 ( 0.989669)
Float + Bignum 1.000000 0.000000 1.000000 ( 1.027935)
Float + Fixnum 0.980000 0.000000 0.980000 ( 0.980609)
|
rbx before
euler:rubinius brian$ TOTAL=1_000 shotgun/rubinius math.rb
Rehearsal ---------------------------------------------------
loop 0.082213 0.000000 0.082213 ( 0.082195)
Bignum + Bignum 0.786170 0.000000 0.786170 ( 0.786153)
Bignum + Fixnum 3.507383 0.000000 3.507383 ( 3.507342)
Bignum + Float 6.047656 0.000000 6.047656 ( 6.047641)
Fixnum + Fixnum 0.230899 0.000000 0.230899 ( 0.230879)
Fixnum + Bignum 3.563296 0.000000 3.563296 ( 3.563289)
Fixnum + Float 5.941993 0.000000 5.941993 ( 5.941975)
Float + Float 0.789120 0.000000 0.789120 ( 0.789106)
Float + Bignum 6.132281 0.000000 6.132281 ( 6.132263)
Float + Fixnum 6.172868 0.000000 6.172868 ( 6.172852)
----------------------------------------- total: 33.253879sec
user system total real
loop 0.087209 0.000000 0.087209 ( 0.087188)
Bignum + Bignum 0.753885 0.000000 0.753885 ( 0.753881)
Bignum + Fixnum 3.501982 0.000000 3.501982 ( 3.501985)
Bignum + Float 6.108905 0.000000 6.108905 ( 6.108903)
Fixnum + Fixnum 0.210097 0.000000 0.210097 ( 0.210081)
Fixnum + Bignum 3.508541 0.000000 3.508541 ( 3.508554)
Fixnum + Float 5.920287 0.000000 5.920287 ( 5.920289)
Float + Float 0.835571 0.000000 0.835571 ( 0.835566)
Float + Bignum 6.205112 0.000000 6.205112 ( 6.205113)
Float + Fixnum 6.216693 0.000000 6.216693 ( 6.216691)
|
rbx after rework of Float only
euler:rubinius brian$ TOTAL=1_000 shotgun/rubinius math.rb
Rehearsal ---------------------------------------------------
loop 0.084886 0.000000 0.084886 ( 0.084848)
Bignum + Bignum 0.755755 0.000000 0.755755 ( 0.755733)
Bignum + Fixnum 3.316833 0.000000 3.316833 ( 3.316814)
Bignum + Float 4.260303 0.000000 4.260303 ( 4.260280)
Fixnum + Fixnum 0.214757 0.000000 0.214757 ( 0.214762)
Fixnum + Bignum 3.433364 0.000000 3.433364 ( 3.433348)
Fixnum + Float 4.199053 0.000000 4.199053 ( 4.199036)
Float + Float 0.310652 0.000000 0.310652 ( 0.310634)
Float + Bignum 0.409653 0.000000 0.409653 ( 0.409644)
Float + Fixnum 0.385315 0.000000 0.385315 ( 0.385296)
----------------------------------------- total: 17.370571sec
user system total real
loop 0.082152 0.000000 0.082152 ( 0.082125)
Bignum + Bignum 0.719112 0.000000 0.719112 ( 0.719104)
Bignum + Fixnum 3.280030 0.000000 3.280030 ( 3.280026)
Bignum + Float 4.317936 0.000000 4.317936 ( 4.317934)
Fixnum + Fixnum 0.211694 0.000000 0.211694 ( 0.211678)
Fixnum + Bignum 3.371581 0.000000 3.371581 ( 3.371591)
Fixnum + Float 4.097401 0.000000 4.097401 ( 4.097396)
Float + Float 0.315193 0.000000 0.315193 ( 0.315200)
Float + Bignum 0.418549 0.000000 0.418549 ( 0.418555)
Float + Fixnum 0.380301 0.000000 0.380301 ( 0.380296)
|
after more rework of Bignum, Fixnum
70-6-253-92:rubinius brian$ TOTAL=1_000 shotgun/rubinius math.rb
Rehearsal ---------------------------------------------------
loop 0.083874 0.000000 0.083874 ( 0.083841)
Bignum + Bignum 0.773796 0.000000 0.773796 ( 0.773774)
Bignum + Fixnum 1.395339 0.000000 1.395339 ( 1.395324)
Bignum + Float 0.353866 0.000000 0.353866 ( 0.353851)
Fixnum + Fixnum 0.232125 0.000000 0.232125 ( 0.232106)
Fixnum + Bignum 1.416564 0.000000 1.416564 ( 1.416522)
Fixnum + Float 0.378118 0.000000 0.378118 ( 0.378100)
Float + Float 0.304509 0.000000 0.304509 ( 0.304491)
Float + Bignum 0.399603 0.000000 0.399603 ( 0.399588)
Float + Fixnum 0.364755 0.000000 0.364755 ( 0.364735)
------------------------------------------ total: 5.702549sec
user system total real
loop 0.082133 0.000000 0.082133 ( 0.082132)
Bignum + Bignum 0.727976 0.000000 0.727976 ( 0.727964)
Bignum + Fixnum 1.380439 0.000000 1.380439 ( 1.380427)
Bignum + Float 0.339638 0.000000 0.339638 ( 0.339641)
Fixnum + Fixnum 0.217382 0.000000 0.217382 ( 0.217379)
Fixnum + Bignum 1.412270 0.000000 1.412270 ( 1.412246)
Fixnum + Float 0.367439 0.000000 0.367439 ( 0.367441)
Float + Float 0.307626 0.000000 0.307626 ( 0.307638)
Float + Bignum 0.398086 0.000000 0.398086 ( 0.398091)
Float + Fixnum 0.367171 0.000000 0.367171 ( 0.367164)
|

