如何乘以基准

时间:2016-04-30 22:39:28

标签: ruby benchmarking

说我有这样的基准测试结果:

0.020000   0.000000   0.020000 (  0.020197)

我用

之类的东西来创建它
Benchmark.bm do |x|
  x.report { run_a_method() }
end

这表示一次调用方法foo所需的时间。

我想制作一个基准,显示运行foo 3次的结果,但只需要调用一次方法。

这可以通过简单地将第一个基准中的值乘以3来完成。

有没有办法做到这一点?

修改

我并不十分赞赏这些“不是正确的基准”的评论。我认识到多次运行它更准确,但这些是资源密集型测试,我只是预测多次运行的预期时间框架。

换句话说,我的用例只是为多运行时创建一个期望,而不是一个完全准确的期望。

2 个答案:

答案 0 :(得分:1)

如您所说,推断的问题在于它会加重您所遇到的任何错误。运行N轮单一基准可以平衡任何违规行为。运行1轮并乘以N实际上会放大任何不规则性。

所以简短的回答是你不能。您需要运行多个测试才能更好地了解性能。如果这些测试需要很长时间才能运行,您要么必须花费成本,要么找到更快速运行它们的方法,或者以某种方式并行运行。

答案 1 :(得分:0)

自己想出来。

最初我尝试了以下内容:

report = Benchmark.bm do |x|  
  x.report { sleep.0.5 }
end
# => report is an array with     
#    1 element

report * 2
# => shows an array with 2 elements
#    (the first is duplicated)

但我最终想要尝试

report[0] * 2

具有将基准值加倍的预期效果。

例如,如果report变量指向

[#<Benchmark::Tms:0x0055fcba149030
@label="", 
@real=0.5001437529999748, 
@cstime=0.0, @cutime=0.0, 
@stime=0.0, @utime=0.0, @total=0.0>]

正在运行的puts (report[0] * 2)显示

  0.000000   0.000000   
0.000000 (  1.000288)
=> nil

这是我想要的乘法值。