Thank you, Go team, for all your work on this! I (and I think many others!) 
love all these behind-the-scenes changes that make our lives better.

I went to look for that 5% performance boost in my GoAWK interpreter (due 
to the new register-based calling convention), and found a 38% improvement 
instead!

$ time goawk_go1.16 'BEGIN { for (i=0; i<100000000; i++) s += i; print(s) }'
4999999950000000
real    0m10.158s ...
$ time goawk_go1.17 'BEGIN { for (i=0; i<100000000; i++) s += i; print(s) }'
4999999950000000
real    0m6.268s ...

Overall for GoAWK I get an 18% speed increase on my micro-benchmarks 
between Go 1.16 and 1.17 (see 
https://github.com/benhoyt/goawk/commit/1f314f421273b3dc164ff4e5d41363f4ac4d160f)
 
and I measured an 8% speed increase on my "slightly more real-world" 
benchmarks that also do I/O 
(https://github.com/benhoyt/goawk/blob/master/benchmark_awks.py).

After some pointers from people (see 
https://news.ycombinator.com/item?id=28203608) and some digging into the 
assembly, I found that many of the function-call heavy methods in 
interp/interp.go do a lot less stack manipulation (as expected) but are 
also 60-70% of the size of the versions compiled with Go 1.16. The overall 
binary is not 60-70% smaller, of course (it's "only" 7% smaller), but the 
fact that these hot-loop interpreter functions are so much smaller is a 
good indication they're doing a lot less -- as confirmed by the perf 
numbers.

I know that some people haven't gotten as much as 5% improvement, and a few 
things actually slowed down, but I just wanted to share a success story.

-Ben

On Tuesday, August 17, 2021 at 10:08:11 AM UTC+12 Michael Knyszek wrote:

> Hello gophers,
>
> We just released Go 1.17
>
> To find out what has changed in Go 1.17, read the release notes:
> https://golang.org/doc/go1.17
>
> You can download binary and source distributions from our download page:
> https://golang.org/dl/
>
> If you have Go installed already, an easy way to try go1.17
> is by using the go command:
> $ go get golang.org/dl/go1.17
> $ go1.17 download
>
> To compile from source using a Git clone, update to the release with
> "git checkout go1.17" and build as usual.
>
> Thanks to everyone who contributed to the release!
>
> Cheers,
> Michael and Dmitri for the Go Team
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/a532710d-0261-4695-8f93-277a43cfe80dn%40googlegroups.com.

Reply via email to