• David Crawshaw's avatar
    reflect, runtime: optimize Name method · ed9362f7
    David Crawshaw authored
    Several minor changes that remove a good chunk of the overhead added
    to the reflect Name method over the 1.7 cycle, as seen from the
    non-SSA architectures.
    
    In particular, there are ~20 fewer instructions in reflect.name.name
    on 386, and the method now qualifies for inlining.
    
    The simple JSON decoding benchmark on darwin/386:
    
    	name           old time/op    new time/op    delta
    	CodeDecoder-8    49.2ms ± 0%    48.9ms ± 1%  -0.77%  (p=0.000 n=10+9)
    
    	name           old speed      new speed      delta
    	CodeDecoder-8  39.4MB/s ± 0%  39.7MB/s ± 1%  +0.77%  (p=0.000 n=10+9)
    
    On darwin/amd64 the effect is less pronounced:
    
    	name           old time/op    new time/op    delta
    	CodeDecoder-8    38.9ms ± 0%    38.7ms ± 1%  -0.38%  (p=0.005 n=10+10)
    
    	name           old speed      new speed      delta
    	CodeDecoder-8  49.9MB/s ± 0%  50.1MB/s ± 1%  +0.38%  (p=0.006 n=10+10)
    
    Counterintuitively, I get much more useful benchmark data out of my
    MacBook Pro than a linux workstation with more expensive Intel chips.
    While the laptop has fewer cores and an active GUI, the single-threaded
    performance is significantly better (nearly 1.5x decoding throughput)
    so the differences are more pronounced.
    
    For #16117.
    
    Change-Id: I4e0cc1cc2d271d47d5127b1ee1ca926faf34cabf
    Reviewed-on: https://go-review.googlesource.com/24510Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
    ed9362f7
type.go 15 KB