Fork 中的warmup 属性和jmh 中的Warmup 注释有什么区别?

Raj*_*jan 9 jmh

我正在使用本教程学习 JMH 基准测试。

我注意到,有2个热身相关的工具和功能benchMurmur3_128在这里

所以,我对 Fork 注释中的warmup 属性和具有迭代属性的Warmup 注释之间的区别有疑问?

sko*_*isa 15

使用 JMH 基准,您可以按顺序运行一个或多个分支,并在每个分支中运行一个或多个基准代码迭代。有两种形式的热身与此相关:

  • 在叉水平热身参数@Fork指定许多热身叉如何运行基准叉之前运行。创建基准测试结果时会忽略预热叉。
  • @Warmup注解让你一个叉中指定的热身特性,包括有多少热身反复运行。创建基准测试结果时,将忽略预热迭代。

例如:

  • @Fork(value = 3, warmups = 2)表示将按顺序运行 5 个 fork。前两个将是热身运行,将被忽略,最后 3 个将用于基准测试。
  • @Warmup(iterations = 5, time = 55, timeUnit = TimeUnit.MILLISECONDS)意味着每个 fork 中会有 5 次预热迭代。在生成基准测试结果时,这些运行的计时将被忽略。
  • @Measurement(iterations = 4, time = 44, timeUnit = TimeUnit.MILLISECONDS)意味着您的基准迭代将运行 4 次(在 5 次预热迭代之后)。

所以上面显示的预热设置的整体影响是:

  • 只有五个分叉中的最后三个将用于基准测试结果。
  • 只有每个非预热分叉中的最后四次迭代将用于基准测试结果。

这就是为什么下面的 JMH 输出(使用这些注释针对基准方法运行)在运行结束时显示Cnt 12:3 次叉 x 4 次迭代 = 12。

jmharmup

  • @KanagaveluSugumar 关于“batchSize”,我并不是说很难,但如果您针对该问题创建自己的问题以吸引更多受众,那么对社区会更有帮助。如果我们在评论中讨论它,那么几乎没有其他人会看到它,并且该问题将无法搜索。 (2认同)