在一个循环中,为了提高缓冲区使用效率,不应该同时写超过4个截然不同的内存位置
package main
import (
"math"
"testing"
)
func write() {
const ITERATIONS = math.MaxInt32
const ITEMS = 1 << 24
const MASK = ITEMS - 1
var arrayA, arrayB,arrayC,arrayD,arrayE,arrayF [ITEMS]byte
for i := ITERATIONS; i > 0; i-- {
slot := i & MASK
b := byte(i)
arrayA[slot] = b
arrayB[slot] = b
arrayC[slot] = b
arrayD[slot] = b
arrayE[slot] = b
arrayF[slot] = b
}
}
func writeCombining() {
const ITERATIONS = math.MaxInt32
const ITEMS = 1 << 24
const MASK = ITEMS - 1
var arrayA, arrayB,arrayC,arrayD,arrayE,arrayF [ITEMS]byte
for i := ITERATIONS; i > 0; i-- {
slot := i & MASK
b := byte(i)
arrayA[slot] = b
arrayB[slot] = b
arrayC[slot] = b
}
for i := ITERATIONS; i > 0; i-- {
slot := i & MASK
b := byte(i)
arrayD[slot] = b
arrayE[slot] = b
arrayF[slot] = b
}
}
func BenchmarkWrite(b *testing.B) {
for i := 0; i < b.N; i++ {
write()
}
}
func BenchmarkWriteCombining(b *testing.B) {
for i := 0; i < b.N; i++ {
writeCombining()
}
}
pkg: ......
cpu: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
BenchmarkWrite
BenchmarkWrite-4 1 6315499300 ns/op
BenchmarkWriteCombining
BenchmarkWriteCombining-4 1 5191109500 ns/op
PASS
参考
http://mechanical-sympathy.blogspot.com/2011/07/write-combining.html