-
Artyom Pervukhin authored
Function sqDiff is called multiple times in the hot path (x, y loops) of drawPaletted from the image/draw package; number of sqDiff calls is between 4×width×height and 4×width×height×len(palette) for each drawPaletted call. Simplify this function by removing arguments comparison and relying instead on signed to unsigned integer conversion rules and properties of unsigned integer values operations guaranteed by the spec: > For unsigned integer values, the operations +, -, *, and << are > computed modulo 2n, where n is the bit width of the unsigned integer's > type. Loosely speaking, these unsigned integer operations discard high > bits upon overflow, and programs may rely on ``wrap around''. image/gif package benchmark that depends on the code updated shows throughput improvements: name old time/op new time/op delta QuantizedEncode-4 788ms ± 2% 468ms ± 9% -40.58% (p=0.000 n=9+10) name old speed new speed delta QuantizedEncode-4 1.56MB/s ± 2% 2.63MB/s ± 8% +68.47% (p=0.000 n=9+10) Closes #22375. Change-Id: Ic9a540e39ceb21e7741d308af1cfbe61b4ac347b Reviewed-on: https://go-review.googlesource.com/72373Reviewed-by: Nigel Tao <nigeltao@golang.org>
7a8e8b2f
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
bench_test.go | ||
clip_test.go | ||
draw.go | ||
draw_test.go | ||
example_test.go |