Method: Tem::Benchmarks#do_timing

Defined in:
lib/tem/benchmarks/benchmarks.rb

#do_timingObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/tem/benchmarks/benchmarks.rb', line 34

def do_timing
  @tem.flush_buffers
  
  n = 10
  loop do
    timings = (0...3).map do |i|
      t_start = Time.now
      n.times do
        yield
      end
      t_delta = Time.now - t_start
    end
    avg_time = timings.inject { |a,v| a + v } / timings.length
    max_diff = timings.map { |t| (t - avg_time).abs }.max
    uncertainty = max_diff / avg_time
    print "%8d: %3.8fs per run, %3.8fs uncertainty (%2.5f%%)\n" %
        [n, avg_time / n, max_diff / n, 100 * uncertainty]
    
    if max_diff / avg_time >= 0.01
      n *= 2
      next
    end
    
    @timing = avg_time / n
    break
  end
  @timing
end