我有一个 go test 文件,我在其中编写了一个基准函数,如下所示:
func BenchmarkStuff(b *testing.B) {
for i := 0; i < b.N; i++ {
stuff()
}
}
Run Code Online (Sandbox Code Playgroud)
当我用 运行它时go test -benchtime 1x,我得到了这个:
BenchmarkStuff-6 1 847751900 ns/op
Run Code Online (Sandbox Code Playgroud)
这是什么-6意思?这似乎不必要地神秘。
它表示用于运行基准测试的 CPU 数量 - 所以在您的情况下6。
编辑:
基准名称格式似乎没有正式记录在 Go 网站上,但您可以在标准库源中看到名称是如何在此处和此处制定的:
runtime.GOMAXPROCS(procs)
benchName := benchmarkName(b.name, procs)
func benchmarkName(name string, n int) string {
if n != 1 {
return fmt.Sprintf("%s-%d", name, n)
}
return name
}
Run Code Online (Sandbox Code Playgroud)
仅供参考:来自go help命令行文档:
go help testflag
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)-cpu 1,2,4 Specify a list of GOMAXPROCS values for which the tests or benchmarks should be executed. The default is the current value of GOMAXPROCS.
因此,如果您想强制您的基准测试使用较少数量的 CPU,请使用 env var GOMAXPROCS:
$ GOMAXPROCS=2 go test -bench=.
...
BenchmarkStuff-2 1000000000 0.2642 ns/op
Run Code Online (Sandbox Code Playgroud)
或者您可以对多个 CPU 内核设置进行基准测试,如下所示:
$ go test -bench=. -cpu=1,2,4
...
BenchmarkStuff 1000000000 0.2516 ns/op
BenchmarkStuff-2 1000000000 0.2531 ns/op
BenchmarkStuff-4 1000000000 0.2488 ns/op
Run Code Online (Sandbox Code Playgroud)