]> Cypherpunks repositories - gostls13.git/commit
reflect, runtime: optimize Name method
authorDavid Crawshaw <crawshaw@golang.org>
Tue, 28 Jun 2016 01:37:19 +0000 (21:37 -0400)
committerDavid Crawshaw <crawshaw@golang.org>
Tue, 28 Jun 2016 12:28:05 +0000 (12:28 +0000)
commited9362f769626b1cdaf2eb1da63d5f25cadc979b
tree8710f5df82c87fde7a2b5b1cc8ea17ad3943a457
parentb75b0630fe6d8f66f937f78f15f540b5b6dab24f
reflect, runtime: optimize Name method

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/24510
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/reflect/type.go
src/runtime/type.go