github.com/c12o16h1/go/src@v0.0.0-20200114212001-5a151c0f00ed/runtime/internal/atomic/bench_test.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package atomic_test 6 7 import ( 8 "runtime/internal/atomic" 9 "testing" 10 ) 11 12 var sink interface{} 13 14 func BenchmarkAtomicLoad64(b *testing.B) { 15 var x uint64 16 sink = &x 17 for i := 0; i < b.N; i++ { 18 _ = atomic.Load64(&x) 19 } 20 } 21 22 func BenchmarkAtomicStore64(b *testing.B) { 23 var x uint64 24 sink = &x 25 for i := 0; i < b.N; i++ { 26 atomic.Store64(&x, 0) 27 } 28 } 29 30 func BenchmarkAtomicLoad(b *testing.B) { 31 var x uint32 32 sink = &x 33 for i := 0; i < b.N; i++ { 34 _ = atomic.Load(&x) 35 } 36 } 37 38 func BenchmarkAtomicStore(b *testing.B) { 39 var x uint32 40 sink = &x 41 for i := 0; i < b.N; i++ { 42 atomic.Store(&x, 0) 43 } 44 } 45 46 func BenchmarkAnd8(b *testing.B) { 47 var x [512]uint8 // give byte its own cache line 48 sink = &x 49 for i := 0; i < b.N; i++ { 50 atomic.And8(&x[255], uint8(i)) 51 } 52 } 53 54 func BenchmarkAnd8Parallel(b *testing.B) { 55 var x [512]uint8 // give byte its own cache line 56 sink = &x 57 b.RunParallel(func(pb *testing.PB) { 58 i := uint8(0) 59 for pb.Next() { 60 atomic.And8(&x[255], i) 61 i++ 62 } 63 }) 64 } 65 66 func BenchmarkOr8(b *testing.B) { 67 var x [512]uint8 // give byte its own cache line 68 sink = &x 69 for i := 0; i < b.N; i++ { 70 atomic.Or8(&x[255], uint8(i)) 71 } 72 } 73 74 func BenchmarkOr8Parallel(b *testing.B) { 75 var x [512]uint8 // give byte its own cache line 76 sink = &x 77 b.RunParallel(func(pb *testing.PB) { 78 i := uint8(0) 79 for pb.Next() { 80 atomic.Or8(&x[255], i) 81 i++ 82 } 83 }) 84 } 85 86 func BenchmarkXadd(b *testing.B) { 87 var x uint32 88 ptr := &x 89 b.RunParallel(func(pb *testing.PB) { 90 for pb.Next() { 91 atomic.Xadd(ptr, 1) 92 } 93 }) 94 } 95 96 func BenchmarkXadd64(b *testing.B) { 97 var x uint64 98 ptr := &x 99 b.RunParallel(func(pb *testing.PB) { 100 for pb.Next() { 101 atomic.Xadd64(ptr, 1) 102 } 103 }) 104 }