benchmark
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
total = ( || 1_000) fixnums = Array(total) {|a| (100_000) } bignums = Array(total) {|a| 0xffff_ffff_ffff_ffff + (100_000) } floats = Array(total) {|a| (100_000) } Benchmark do |x| x("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("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("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("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("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("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("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 end |
MRI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
euler:rubinius brian$ TOTAL=1_000 ruby math Rehearsal --------------------------------------------------- loop 0.520000 0.000000 0.520000 ( 0.532934) Fixnum + Fixnum 0.940000 0.000000 0.940000 ( 0.953535) Bignum + Bignum 1.230000 0.000000 1.230000 ( 1.228264) Float + Float 0.980000 0.000000 0.980000 ( 0.990313) Bignum + Fixnum 1.440000 0.000000 1.440000 ( 1.457598) Bignum + Float 1.010000 0.010000 1.020000 ( 1.020064) Fixnum + Float 0.970000 0.000000 0.970000 ( 0.975901) ------------------------------------------ total: 7.100000sec user system total real loop 0.510000 0.000000 0.510000 ( 0.525869) Fixnum + Fixnum 0.940000 0.000000 0.940000 ( 0.940014) Bignum + Bignum 1.210000 0.000000 1.210000 ( 1.212178) Float + Float 0.960000 0.000000 0.960000 ( 0.956788) Bignum + Fixnum 1.440000 0.000000 1.440000 ( 1.442112) Bignum + Float 0.990000 0.000000 0.990000 ( 0.998438) Fixnum + Float 0.960000 0.000000 0.960000 ( 0.992699) |
rbx before
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
euler:rubinius brian$ TOTAL=1_000 shotgun/rubinius math Rehearsal --------------------------------------------------- loop 0.088945 0.000000 0.088945 ( 0.088930) Fixnum + Fixnum 0.231998 0.000000 0.231998 ( 0.231984) Bignum + Bignum 0.821572 0.000000 0.821572 ( 0.821547) Float + Float 1.186975 0.000000 1.186975 ( 1.186957) Bignum + Fixnum 3.689706 0.000000 3.689706 ( 3.689688) Bignum + Float 7.798996 0.000000 7.798996 ( 7.798980) Fixnum + Float 7.743594 0.000000 7.743594 ( 7.743577) ----------------------------------------- total: 21.561786sec user system total real loop 0.087257 0.000000 0.087257 ( 0.087245) Fixnum + Fixnum 0.216869 0.000000 0.216869 ( 0.216873) Bignum + Bignum 0.794047 0.000000 0.794047 ( 0.794044) Float + Float 1.174626 0.000000 1.174626 ( 1.174653) Bignum + Fixnum 3.694634 0.000000 3.694634 ( 3.694637) Bignum + Float 7.764805 0.000000 7.764805 ( 7.764801) Fixnum + Float 7.706353 0.000000 7.706353 ( 7.706359) |
rbx after rework Float
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
euler:rubinius brian$ TOTAL=1_000 shotgun/rubinius math Rehearsal --------------------------------------------------- loop 0.091259 0.000000 0.091259 ( 0.091244) Bignum + Bignum 0.814227 0.000000 0.814227 ( 0.814209) Bignum + Fixnum 3.882543 0.000000 3.882543 ( 3.882530) Bignum + Float 7.386961 0.000000 7.386961 ( 7.386945) Fixnum + Fixnum 0.247075 0.000000 0.247075 ( 0.247040) Fixnum + Bignum 3.898931 0.000000 3.898931 ( 3.898914) Fixnum + Float 7.294152 0.000000 7.294152 ( 7.294133) Float + Float 1.288831 0.000000 1.288831 ( 1.288812) Float + Bignum 8.912548 0.000000 8.912548 ( 8.912531) Float + Fixnum 8.871426 0.000000 8.871426 ( 8.871408) ----------------------------------------- total: 42.687953sec user system total real loop 0.088884 0.000000 0.088884 ( 0.088871) Bignum + Bignum 0.788301 0.000000 0.788301 ( 0.788302) Bignum + Fixnum 3.930608 0.000000 3.930608 ( 3.930595) Bignum + Float 7.511396 0.000000 7.511396 ( 7.511508) Fixnum + Fixnum 0.258501 0.000000 0.258501 ( 0.258489) Fixnum + Bignum 3.875360 0.000000 3.875360 ( 3.875369) Fixnum + Float 7.303709 0.000000 7.303709 ( 7.303705) Float + Float 1.294617 0.000000 1.294617 ( 1.294609) Float + Bignum 8.901592 0.000000 8.901592 ( 8.901595) Float + Fixnum 8.865972 0.000000 8.865972 ( 8.865971) |
Pastie