diff options
| author | Meng Zhuo <mzh@golangcn.org> | 2021-09-30 22:46:09 +0800 |
|---|---|---|
| committer | Meng Zhuo <mzh@golangcn.org> | 2021-10-07 14:01:52 +0000 |
| commit | ecb2f231fa41b581319505139f8d5ac779763bee (patch) | |
| tree | 9892a8ece179edd0a1a88273e271255d18295b62 /src/runtime/mbitmap.go | |
| parent | 6f74ed06c5b0e1d69fb70e89f31f002f18554c79 (diff) | |
| download | go-ecb2f231fa41b581319505139f8d5ac779763bee.tar.xz | |
runtime,sync: using fastrandn instead of modulo reduction
fastrandn is ~50% faster than fastrand() % n.
`ack -v 'fastrand\(\)\s?\%'` finds all modulo on fastrand()
name old time/op new time/op delta
Fastrandn/2 2.86ns ± 0% 1.59ns ± 0% -44.35% (p=0.000 n=9+10)
Fastrandn/3 2.87ns ± 1% 1.59ns ± 0% -44.41% (p=0.000 n=10+9)
Fastrandn/4 2.87ns ± 1% 1.58ns ± 1% -45.10% (p=0.000 n=10+10)
Fastrandn/5 2.86ns ± 1% 1.58ns ± 1% -44.84% (p=0.000 n=10+10)
Change-Id: Ic91f5ca9b9e3b65127bc34792b62fd64fbd13b5c
Reviewed-on: https://go-review.googlesource.com/c/go/+/353269
Trust: Meng Zhuo <mzh@golangcn.org>
Run-TryBot: Meng Zhuo <mzh@golangcn.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/runtime/mbitmap.go')
| -rw-r--r-- | src/runtime/mbitmap.go | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/runtime/mbitmap.go b/src/runtime/mbitmap.go index 9363409e36..daf1fcfbc0 100644 --- a/src/runtime/mbitmap.go +++ b/src/runtime/mbitmap.go @@ -974,7 +974,7 @@ func heapBitsSetType(x, size, dataSize uintptr, typ *_type) { // machine instructions. outOfPlace := false - if arenaIndex(x+size-1) != arenaIdx(h.arena) || (doubleCheck && fastrand()%2 == 0) { + if arenaIndex(x+size-1) != arenaIdx(h.arena) || (doubleCheck && fastrandn(2) == 0) { // This object spans heap arenas, so the bitmap may be // discontiguous. Unroll it into the object instead // and then copy it out. |
