• Nigel Tao's avatar
    image/jpeg: change block from [64]int to [64]int32. · daf43ba4
    Nigel Tao authored
    On 6g/linux:
    benchmark                     old ns/op    new ns/op    delta
    BenchmarkFDCT                      4606         4241   -7.92%
    BenchmarkIDCT                      4187         3923   -6.31%
    BenchmarkDecodeBaseline         3154864      3170224   +0.49%
    BenchmarkDecodeProgressive      4072812      4017132   -1.37%
    BenchmarkEncode                39406920     34596760  -12.21%
    
    Stack requirements before (from 'go tool 6g -S'):
    (scan.go:37) TEXT    (*decoder).processSOS+0(SB),$1352-32
    (writer.go:448) TEXT    (*encoder).writeSOS+0(SB),$5344-24
    
    after:
    (scan.go:37) TEXT    (*decoder).processSOS+0(SB),$1064-32
    (writer.go:448) TEXT    (*encoder).writeSOS+0(SB),$2520-24
    
    Also, in encoder.writeSOS, re-use the yBlock scratch buffer for Cb and
    Cr. This reduces the stack requirement slightly, but also avoids an
    unlucky coincidence where a BenchmarkEncode stack split lands between
    encoder.writeByte and bufio.Writer.WriteByte, which occurs very often
    during Huffman encoding and is otherwise disasterous for the final
    benchmark number. FWIW, the yBlock re-use *without* the s/int/int32/
    change does not have a noticable effect on the benchmarks.
    
    R=r
    CC=golang-dev, rsc
    https://golang.org/cl/6823043
    daf43ba4
Name
Last commit
Last update
api Loading commit data...
doc Loading commit data...
include Loading commit data...
lib Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.hgignore Loading commit data...
.hgtags Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...