Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Benchmark-IPSでRubyベンチマークを便利に使う

Benchmark-IPSはRuby標準添付のBenchmarkライブラリを便利に拡張してくれるGemです。

使い方

導入

$ gem install benchmark-ips

用例

普通のBenchmarkならbmメソッドを呼び出すところ、
ipsメソッドを呼び出すあたりが違います。
また、IPSならcompare!という比較用メソッドが用意されています。

require 'benchmark/ips'

def slow
  %w(a b c).shuffle.first
end

def fast
  %w(a b c).sample
end
  

Benchmark.ips do |x|
 x.report( "fast" ) { fast }
 x.report( "slow" ) { slow }
 x.compare!
end

結果はこの通り。

$ ruby benchmarkips.rb 
Calculating -------------------------------------
                fast    93.804k i/100ms
                slow   135.139k i/100ms
-------------------------------------------------
                fast      2.556M (± 6.2%) i/s -     12.757M
                slow      9.298M (± 8.4%) i/s -     46.218M

Comparison:
                slow:  9297622.7 i/s
                fast:  2556164.5 i/s - 3.64x slower

RyotaShirono-no-MacBook-Pro:ruby shuzo_kino$ vim benchmarkips.rb
RyotaShirono-no-MacBook-Pro:ruby shuzo_kino$ ruby benchmarkips.rb 
Calculating -------------------------------------
                fast    91.780k i/100ms
                slow    81.327k i/100ms
-------------------------------------------------
                fast      2.280M (± 5.2%) i/s -     11.381M
                slow      1.845M (± 5.6%) i/s -      9.271M

Comparison:
                fast:  2280092.2 i/s
                slow:  1845327.7 i/s - 1.24x slower