Programming Tutorials

bmbm(width = 0) {|job| ...} in Ruby

By: Jeya in Ruby Tutorials on 2009-03-03  

Sometimes benchmark results are skewed because code executed earlier encounters different garbage collection overheads than that run later. bmbm attempts to minimize this effect by running the tests twice, the first time as a rehearsal in order to get the runtime environment stable, the second time for real. GC.start is executed before the start of each of the real timings; the cost of this is not included in the timings. In reality, though, there's only so much that bmbm can do, and the results are not guaranteed to be isolated from garbage collection and other effects.

Because bmbm takes two passes through the tests, it can calculate the required label width.

      require 'benchmark'

      array = (1..1000000).map { rand }

      Benchmark.bmbm do |x|
        x.report("sort!") { array.dup.sort! }
        x.report("sort")  { array.dup.sort  }
      end

Generates:

       Rehearsal -----------------------------------------
       sort!  11.928000   0.010000  11.938000 ( 12.756000)
       sort   13.048000   0.020000  13.068000 ( 13.857000)
       ------------------------------- total: 25.006000sec

                   user     system      total        real
       sort!  12.959000   0.010000  12.969000 ( 13.793000)
       sort   12.007000   0.000000  12.007000 ( 12.791000)

bmbm yields a Benchmark::Job object and returns an array of Benchmark::Tms objects.






Add Comment

* Required information
1000

Comments

No comments yet. Be the first!

Most Viewed Articles (in Ruby )

Latest Articles (in Ruby)