Sha256: 50f54bce6a439cfb6e1c3982448f75dcdccc23b1edf4c8d10e7878c95aee4d05
Contents?: true
Size: 1.88 KB
Versions: 1
Compression:
Stored size: 1.88 KB
Contents
module Rgot class B < Common attr_accessor :n def initialize(benchmark_module, name, opts={}) super() @n = 1 @module = benchmark_module @name = name @opts = opts @timer_on = false @duration = 0 @module.extend @module if @module end def start_timer if !@timer_on @start = Rgot.now @timer_on = true end end def stop_timer if @timer_on @duration += Rgot.now - @start @timer_on = false end end def reset_timer if @timer_on @start = Rgot.now end @duration = 0 end def run(&block) n = 1 benchtime = @opts.fetch(:benchtime, 1).to_f run_n(n.to_i, block) while !failed? && @duration < benchtime && @n < 1e9 if @duration < (benchtime / 100.0) @n *= 100 elsif @duration < (benchtime / 10.0) @n *= 10 elsif @duration < (benchtime / 5.0) @n *= 5 elsif @duration < (benchtime / 2.0) @n *= 2 else if @n.to_i == 1 break end @n *= 1.2 end run_n(@n.to_i, block) end BenchmarkResult.new(n: @n, t: @duration) end def run_parallel raise LocalJumpError, "no block given" unless block_given? @opts[:procs].times do fork { Array.new(@opts[:threads]) { Thread.new { yield PB.new(bn: @n) }.tap { |t| t.abort_on_exception = true } }.each(&:join) } end @n *= @opts[:procs] * @opts[:threads] Process.waitall end private def run_n(n, block=nil) GC.start i = 0 @n = n reset_timer start_timer if block block.call(self) else @module.instance_method(@name).bind(@module).call(self) end stop_timer end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rgot-0.0.5 | lib/rgot/b.rb |