2 回答

TA贡献1788条经验 获得超4个赞
您的基准不衡量奇偶校验。它测量输入加奇偶校验加输出。例如,在 Go 中,您可以测量scanner.Scan和strconv.ParseUint和fmt.Println以及奇偶校验。
这是一个 Go 基准测试,它只测量 1000000 次奇偶校验。
parity_test.go:
package parity
import (
"math/rand"
"runtime"
"testing"
)
func parity(n uint64) uint64 {
var parity uint64
for n > 0 {
parity ^= n & 1
n >>= 1
}
return parity
}
func init() { runtime.GOMAXPROCS(1) }
// Benchmark 1000000 parity checks.
func BenchmarkParity1000000(b *testing.B) {
n := make([]uint64, 1000000)
for i := range n {
r := uint64(rand.Uint32())
n[i] = (r << 32) | r
}
p := parity(42)
b.ResetTimer()
for i := 0; i < b.N; i++ {
for _, n := range n {
p = parity(n)
}
}
b.StopTimer()
_ = p
}
输出:
$ go test -bench=.
BenchmarkParity1000000 50 34586769 ns/op
$
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报