]> Cypherpunks repositories - gostls13.git/commit
runtime: Add prefetch to allocation code
authorRick Hudson <rlh@golang.org>
Thu, 19 Feb 2015 23:11:24 +0000 (18:11 -0500)
committerRick Hudson <rlh@golang.org>
Mon, 23 Feb 2015 18:52:43 +0000 (18:52 +0000)
commit99482f2f9e7710206386ff45869cb76a53e0ac76
tree7d0d9c476fcf6d82035bc3c124e7a0e70766e453
parent96333a7e4841c37d4c70cdab8748f9e69012cf29
runtime: Add prefetch to allocation code

The routine mallocgc retrieves objects from freelists. Prefetch
the object that will be returned in the next call to mallocgc.
Experiments indicate that this produces a 1% improvement when using
prefetchnta and less when using prefetcht0, prefetcht1, or prefetcht2.

Benchmark numbers indicate a 1% improvement over no
prefetch, much less over prefetcht0, prefetcht1, and prefetcht2.
These numbers were for the garbage benchmark with MAXPROCS=4
no prefetch                          >> 5.96 / 5.77 / 5.89
prefetcht0(uintptr(v.ptr().next))    >> 5.88 / 6.17 / 5.84
prefetcht1(uintptr(v.ptr().next))    >> 5.88 / 5.89 / 5.91
prefetcht2(uintptr(v.ptr().next))    >> 5.87 / 6.47 / 5.92
prefetchnta(uintptr(v.ptr().next))   >> 5.72 / 5.84 / 5.85

Change-Id: I54e07172081cccb097d5b5ce8789d74daa055ed9
Reviewed-on: https://go-review.googlesource.com/5350
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/malloc.go