]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: remove a modulus calculation from pollorder
authorJosh Bleecher Snyder <josharian@gmail.com>
Mon, 27 Apr 2015 17:46:02 +0000 (10:46 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Mon, 27 Apr 2015 19:36:37 +0000 (19:36 +0000)
This is a follow-up to CL 9269, as suggested
by dvyukov.

There is probably even more that can be done
to speed up this shuffle. It will matter more
once CL 7570 (fine-grained locking in select)
is in and can be revisited then, with benchmarks.

Change-Id: Ic13a27d11cedd1e1f007951214b3bb56b1644f02
Reviewed-on: https://go-review.googlesource.com/9393
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
src/runtime/select.go

index efe0ec8542ba04ced5d0b80872c00d49bf9a227d..29cc0777793fa9c807b6d500ce870b63de8adc0d 100644 (file)
@@ -243,7 +243,7 @@ func selectgoImpl(sel *hselect) (uintptr, uint16) {
        // generate permuted order
        pollslice := slice{unsafe.Pointer(sel.pollorder), int(sel.ncase), int(sel.ncase)}
        pollorder := *(*[]uint16)(unsafe.Pointer(&pollslice))
-       for i := 0; i < int(sel.ncase); i++ {
+       for i := 1; i < int(sel.ncase); i++ {
                j := int(fastrand1()) % (i + 1)
                pollorder[i] = pollorder[j]
                pollorder[j] = uint16(i)