OpenJDK JMH的“score error”到底是什么意思?

30
我正在使用http://openjdk.java.net/projects/code-tools/jmh/进行基准测试,并且获得了类似下面的结果:
Benchmark                         Mode   Samples        Score  Score error    Units
o.a.f.c.j.b.TestClass.test1       avgt         5  2372870,600   210897,743    us/op
o.a.f.c.j.b.TestClass.test2       avgt         5  2079931,850   394727,671    us/op
o.a.f.c.j.b.TestClass.test3       avgt         5    26585,818    21105,739    us/op
o.a.f.c.j.b.TestClass.test4       avgt         5    19113,230     8012,852    us/op
o.a.f.c.j.b.TestClass.test5       avgt         5     2586,413     1949,487    us/op
o.a.f.c.j.b.TestClass.test6       avgt         5     1942,963     1619,967    us/op
o.a.f.c.j.b.TestClass.test7       avgt         5      233,902       73,861    us/op
o.a.f.c.j.b.TestClass.test8       avgt         5      191,970      126,682    us/op
列"Score error"的意思是什么,如何解释它?

请参阅JMH基准测试指标评估中的一些见解。 - Vadzim
1个回答

41

这是得分的误差范围。在大多数情况下,这是置信区间的一半。置信区间

把它看作“得分”和“得分误差”之间有一个“±”符号。事实上,人类可读日志将显示:

Result: 1.986 ±(99.9%) 0.009 ops/ns [Average]
  Statistics: (min, avg, max) = (1.984, 1.986, 1.990), stdev = 0.002
  Confidence interval (99.9%): [1.977, 1.995]


# Run complete. Total time: 00:00:12

Benchmark                  Mode  Samples   Score  Score error   Units
o.o.j.s.HelloWorld.hello  thrpt        5   1.986        0.009  ops/ns

7
顺便说一下,我认为这里有改进的空间。从原始发布者的数据中可以看出,jmh存在“虚假精度”的问题(https://en.wikipedia.org/wiki/False_precision)。所显示的测量结果的有效数字误导性地表明比误差更高的精度。例如,“1.776361±0.154321”是没有意义的,最好写成“1.78±0.15”。由于误差本身的数量级,任何进一步的数字都是虚假的精度。因此,在使用jmh时,请注意精度。 - Kostas Filios
3
在1.21版本中,“得分错误”的列标签更改为“错误”,但上面的答案仍然适用,对吗? - James Freitas
@JamesFreitas 是的。 - Aleksey Shipilev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接