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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
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("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("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 + 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("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("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("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("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("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
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 ruby math 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
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.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
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.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
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 |
70-6-253-92:rubinius brian$ TOTAL=1_000 shotgun/rubinius math 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 + |
Pastie