| Descriptionhash/adler32: optimize.
The bulk of the gains come from hoisting the modulo ops outside of
the inner loop.
Reducing the digest type from 8 bytes to 4 bytes gains another 1% on
the hash/adler32 micro-benchmark.
Benchmarks for $GOOS,$GOARCH = linux,amd64 below.
hash/adler32 benchmark:
benchmark             old ns/op    new ns/op    delta
BenchmarkAdler32KB         1660         1364  -17.83%
image/png benchmark:
benchmark                       old ns/op    new ns/op    delta
BenchmarkDecodeGray               2466909      2425539   -1.68%
BenchmarkDecodeNRGBAGradient      9884500      9751705   -1.34%
BenchmarkDecodeNRGBAOpaque        8511615      8379800   -1.55%
BenchmarkDecodePaletted           1366683      1330677   -2.63%
BenchmarkDecodeRGB                6987496      6884974   -1.47%
BenchmarkEncodePaletted           6292408      6040052   -4.01%
BenchmarkEncodeRGBOpaque         19780680     19178440   -3.04%
BenchmarkEncodeRGBA              80738600     79076800   -2.06%
Wall time for Denis Cheremisov's PNG-decoding program given in
https://groups.google.com/group/golang-nuts/browse_thread/thread/22aa8a05040fdd49
Before: 2.44s
After:  2.26s
Delta:  -7%
   Patch Set 1 #Patch Set 2 : diff -r 8c0f26decc1b https://go.googlecode.com/hg/ #Patch Set 3 : diff -r 8c0f26decc1b https://go.googlecode.com/hg/ #Patch Set 4 : diff -r 8c0f26decc1b https://go.googlecode.com/hg/ #Patch Set 5 : diff -r 8c0f26decc1b https://go.googlecode.com/hg/ #Patch Set 6 : diff -r 8c0f26decc1b https://go.googlecode.com/hg/ #Patch Set 7 : diff -r 8c0f26decc1b https://go.googlecode.com/hg/ #Patch Set 8 : diff -r 8c0f26decc1b https://go.googlecode.com/hg/ #Patch Set 9 : diff -r e2e4e44b1804 https://go.googlecode.com/hg/ #MessagesTotal messages: 3 |