]> Cypherpunks repositories - gostls13.git/commit
hash/adler32: optimize.
authorNigel Tao <nigeltao@golang.org>
Thu, 24 May 2012 23:58:38 +0000 (09:58 +1000)
committerNigel Tao <nigeltao@golang.org>
Thu, 24 May 2012 23:58:38 +0000 (09:58 +1000)
commit60ffae25bc1e8ddacaa52952683bfaf6caebc9fd
treed27ad5f658a5711282efff5275d17c52f0b3cbb3
parent184209787c5904cb670857c7c1ef3a2fd10718e5
hash/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%

R=rsc
CC=golang-dev
https://golang.org/cl/6251044
src/pkg/hash/adler32/adler32.go
src/pkg/hash/adler32/adler32_test.go