Benchmark函数名称后的“-6”是什么意思?

我有一个 go test 文件,我在其中编写了一个基准函数,如下所示:

func BenchmarkStuff(b *testing.B) {
    for i := 0; i < b.N; i++ {
        stuff()
    }
}

当我用 运行它时go test -benchtime 1x,我得到了这个:

BenchmarkStuff-6               1     847751900 ns/op

这是什么-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
}

仅供参考:来自go help命令行文档:

go help testflag
    -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

或者您可以对多个 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

  • 它在标准库源中“记录”:) 请参阅更新。

以上是Benchmark函数名称后的“-6”是什么意思?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>