Wrap text
Theme:
Clean (Pastie)
All Hallow's Eve
Blackboard
Brilliance Black
Cobalt
Espresso Libre
IDLE
Mac Classic
MagicWB (Amiga)
Pastels on Dark
Slate
Slush and Poppies
Sunburst
Sunburst (Josh)
Twilight
Vibrant Ink
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)