Descriptionencoding/binary: Reduce memory allocations and add fast paths for slices
Also added a new test and a few benchmarks for different basic slice types.
Fixes issue 2634
benchmark old ns/op new ns/op delta
BenchmarkReadSlice1000Int8s 35700 3328 -90.68%
BenchmarkReadSlice1000Uint8s 34159 110 -99.68%
BenchmarkReadSlice1000Int16s 46197 14607 -68.38%
BenchmarkReadSlice1000Uint16s 44314 14693 -66.84%
BenchmarkReadSlice1000Int32s 49191 19269 -60.83%
BenchmarkReadSlice1000Uint32s 47523 18213 -61.68%
BenchmarkReadSlice1000Int64s 61243 29637 -51.61%
BenchmarkReadSlice1000Uint64s 57205 27828 -51.35%
BenchmarkWriteSlice1000Int8s 40406 2217 -94.51%
BenchmarkWriteSlice1000Uint8s 40316 99 -99.75%
BenchmarkWriteSlice1000Int16s 51168 11912 -76.72%
BenchmarkWriteSlice1000Uint16s 49556 11840 -76.11%
BenchmarkWriteSlice1000Int32s 54567 15955 -70.76%
BenchmarkWriteSlice1000Uint32s 51732 15800 -69.46%
BenchmarkWriteSlice1000Int64s 67872 24318 -64.17%
BenchmarkWriteSlice1000Uint64s 61171 23469 -61.63%
benchmark old MB/s new MB/s speedup
BenchmarkReadSlice1000Int8s 28.01 300.41 10.73x
BenchmarkReadSlice1000Uint8s 29.27 9051.21 309.23x
BenchmarkReadSlice1000Int16s 43.29 136.92 3.16x
BenchmarkReadSlice1000Uint16s 45.13 136.11 3.02x
BenchmarkReadSlice1000Int32s 81.31 207.58 2.55x
BenchmarkReadSlice1000Uint32s 84.17 219.61 2.61x
BenchmarkReadSlice1000Int64s 130.63 269.93 2.07x
BenchmarkReadSlice1000Uint64s 139.85 287.48 2.06x
BenchmarkWriteSlice1000Int8s 24.75 451.01 18.22x
BenchmarkWriteSlice1000Uint8s 24.80 10104.20 407.43x
BenchmarkWriteSlice1000Int16s 39.09 167.89 4.29x
BenchmarkWriteSlice1000Uint16s 40.36 168.91 4.19x
BenchmarkWriteSlice1000Int32s 73.30 250.70 3.42x
BenchmarkWriteSlice1000Uint32s 77.32 253.16 3.27x
BenchmarkWriteSlice1000Int64s 117.87 328.97 2.79x
BenchmarkWriteSlice1000Uint64s 130.78 340.87 2.61x
benchmark old allocs new allocs delta
BenchmarkReadSlice1000Int8s 2 1 -50.00%
BenchmarkReadSlice1000Uint8s 2 1 -50.00%
BenchmarkReadSlice1000Int16s 2 1 -50.00%
BenchmarkReadSlice1000Uint16s 2 1 -50.00%
BenchmarkReadSlice1000Int32s 2 1 -50.00%
BenchmarkReadSlice1000Uint32s 2 1 -50.00%
BenchmarkReadSlice1000Int64s 2 1 -50.00%
BenchmarkReadSlice1000Uint64s 2 1 -50.00%
BenchmarkWriteSlice1000Int8s 3 1 -66.67%
BenchmarkWriteSlice1000Uint8s 3 1 -66.67%
BenchmarkWriteSlice1000Int16s 3 1 -66.67%
BenchmarkWriteSlice1000Uint16s 3 1 -66.67%
BenchmarkWriteSlice1000Int32s 3 1 -66.67%
BenchmarkWriteSlice1000Uint32s 3 1 -66.67%
BenchmarkWriteSlice1000Int64s 3 1 -66.67%
BenchmarkWriteSlice1000Uint64s 3 1 -66.67%
benchmark old bytes new bytes delta
BenchmarkReadSlice1000Int8s 1072 8 -99.25%
BenchmarkReadSlice1000Uint8s 1072 8 -99.25%
BenchmarkReadSlice1000Int16s 2096 8 -99.62%
BenchmarkReadSlice1000Uint16s 2096 8 -99.62%
BenchmarkReadSlice1000Int32s 4144 8 -99.81%
BenchmarkReadSlice1000Uint32s 4144 8 -99.81%
BenchmarkReadSlice1000Int64s 8240 8 -99.90%
BenchmarkReadSlice1000Uint64s 8240 8 -99.90%
BenchmarkWriteSlice1000Int8s 1080 8 -99.26%
BenchmarkWriteSlice1000Uint8s 1080 8 -99.26%
BenchmarkWriteSlice1000Int16s 2104 8 -99.62%
BenchmarkWriteSlice1000Uint16s 2104 8 -99.62%
BenchmarkWriteSlice1000Int32s 4152 8 -99.81%
BenchmarkWriteSlice1000Uint32s 4152 8 -99.81%
BenchmarkWriteSlice1000Int64s 8248 8 -99.90%
BenchmarkWriteSlice1000Uint64s 8248 8 -99.90%
Patch Set 1 #Patch Set 2 : diff -r ab644299d124 https://code.google.com/p/go #Patch Set 3 : diff -r ab644299d124 https://code.google.com/p/go #
Total comments: 2
Patch Set 4 : diff -r 626c01d29570 https://code.google.com/p/go #Patch Set 5 : diff -r 626c01d29570 https://code.google.com/p/go #MessagesTotal messages: 16
|