Skip to content

Instantly share code, notes, and snippets.

@dubek
Created October 31, 2014 15:09
Show Gist options
  • Save dubek/f5c4e68febe2a7c80e77 to your computer and use it in GitHub Desktop.
Save dubek/f5c4e68febe2a7c80e77 to your computer and use it in GitHub Desktop.
require "benchmark/ips"
require "hamster/set"
require "hamster/version"
puts "OS Name: #{`uname -s -r -v -m -p -i -o`}"
puts "Ruby Version: #{`ruby -v`}"
puts "RubyGems Version: #{`gem -v`}"
puts "RVM Version: #{`rvm -v`}"
puts "Hamster version: #{Hamster::VERSION}"
def benchmark_filter(set_size, keep_below)
puts
puts
puts
Benchmark.ips do |b|
set = Hamster::Set.new((1..set_size).to_a)
set_b = Hamster::Set.new(((set_size/2)..set_size).to_a)
b.report "old_filter(N=#{set_size}, K=#{keep_below})" do
set.old_filter { |x| x <= keep_below }
end
b.report "filter(N=#{set_size}, K=#{keep_below})" do
set.filter { |x| x <= keep_below }
end
b.compare!
end
end
benchmark_filter(10, 2)
benchmark_filter(10, 8)
benchmark_filter(20, 4)
benchmark_filter(20, 16)
benchmark_filter(50, 10)
benchmark_filter(50, 40)
benchmark_filter(100, 20)
benchmark_filter(100, 80)
benchmark_filter(1000, 10)
benchmark_filter(1000, 200)
benchmark_filter(1000, 800)
benchmark_filter(1000, 990)
require "benchmark/ips"
require "hamster/set"
require "hamster/version"
puts "OS Name: #{`uname -s -r -v -m -p -i -o`}"
puts "Ruby Version: #{`ruby -v`}"
puts "RubyGems Version: #{`gem -v`}"
puts "RVM Version: #{`rvm -v`}"
puts "Hamster version: #{Hamster::VERSION}"
def benchmark_filter(hash_size, keep_below)
puts
puts
puts
Benchmark.ips do |b|
keys = (1..hash_size).to_a
values = keys_a.map { |k| "a-#{k}" }
hash = Hamster.hash(keys_a.zip(values_a))
b.report "old_filter(N=#{hash_size}, K=#{keep_below})" do
hash.old_filter { |x| x <= keep_below }
end
b.report "filter(N=#{hash_size}, K=#{keep_below})" do
hash.filter { |x| x <= keep_below }
end
b.compare!
end
end
benchmark_filter(10, 2)
benchmark_filter(10, 8)
benchmark_filter(20, 4)
benchmark_filter(20, 16)
benchmark_filter(50, 10)
benchmark_filter(50, 40)
benchmark_filter(100, 20)
benchmark_filter(100, 80)
benchmark_filter(1000, 10)
benchmark_filter(1000, 200)
benchmark_filter(1000, 800)
benchmark_filter(1000, 990)
OS Name: Linux 2.6.32-431.30.1.el6.x86_64 #1 SMP Wed Jul 30 14:44:26 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
Ruby Version: ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
RubyGems Version: 2.2.2
RVM Version: rvm 1.25.33 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
Hamster version: 1.0.1-rc3
Calculating -------------------------------------
old_filter(N=10, K=2)
3375 i/100ms
filter(N=10, K=2) 5306 i/100ms
-------------------------------------------------
old_filter(N=10, K=2)
34317.2 (±0.9%) i/s - 172125 in 5.016153s
filter(N=10, K=2) 57675.6 (±1.2%) i/s - 291830 in 5.060676s
Comparison:
filter(N=10, K=2): 57675.6 i/s
old_filter(N=10, K=2): 34317.2 i/s - 1.68x slower
Calculating -------------------------------------
old_filter(N=10, K=8)
6484 i/100ms
filter(N=10, K=8) 7420 i/100ms
-------------------------------------------------
old_filter(N=10, K=8)
72095.2 (±1.3%) i/s - 363104 in 5.037302s
filter(N=10, K=8) 82054.9 (±0.8%) i/s - 415520 in 5.064289s
Comparison:
filter(N=10, K=8): 82054.9 i/s
old_filter(N=10, K=8): 72095.2 i/s - 1.14x slower
Calculating -------------------------------------
old_filter(N=20, K=4)
1537 i/100ms
filter(N=20, K=4) 2553 i/100ms
-------------------------------------------------
old_filter(N=20, K=4)
15642.4 (±1.1%) i/s - 78387 in 5.011832s
filter(N=20, K=4) 26719.4 (±1.3%) i/s - 135309 in 5.064962s
Comparison:
filter(N=20, K=4): 26719.4 i/s
old_filter(N=20, K=4): 15642.4 i/s - 1.71x slower
Calculating -------------------------------------
old_filter(N=20, K=16)
3192 i/100ms
filter(N=20, K=16) 3721 i/100ms
-------------------------------------------------
old_filter(N=20, K=16)
32238.8 (±1.3%) i/s - 162792 in 5.050504s
filter(N=20, K=16) 39679.6 (±0.9%) i/s - 200934 in 5.064327s
Comparison:
filter(N=20, K=16): 39679.6 i/s
old_filter(N=20, K=16): 32238.8 i/s - 1.23x slower
Calculating -------------------------------------
old_filter(N=50, K=10)
542 i/100ms
filter(N=50, K=10) 832 i/100ms
-------------------------------------------------
old_filter(N=50, K=10)
5410.6 (±1.3%) i/s - 27100 in 5.009646s
filter(N=50, K=10) 8410.9 (±1.1%) i/s - 42432 in 5.045593s
Comparison:
filter(N=50, K=10): 8410.9 i/s
old_filter(N=50, K=10): 5410.6 i/s - 1.55x slower
Calculating -------------------------------------
old_filter(N=50, K=40)
1297 i/100ms
filter(N=50, K=40) 1605 i/100ms
-------------------------------------------------
old_filter(N=50, K=40)
12870.1 (±8.3%) i/s - 64850 in 5.087979s
filter(N=50, K=40) 16293.4 (±1.2%) i/s - 81855 in 5.024527s
Comparison:
filter(N=50, K=40): 16293.4 i/s
old_filter(N=50, K=40): 12870.1 i/s - 1.27x slower
Calculating -------------------------------------
old_filter(N=100, K=20)
264 i/100ms
filter(N=100, K=20) 370 i/100ms
-------------------------------------------------
old_filter(N=100, K=20)
2601.5 (±1.2%) i/s - 13200 in 5.074711s
filter(N=100, K=20) 3710.3 (±0.8%) i/s - 18870 in 5.086168s
Comparison:
filter(N=100, K=20): 3710.3 i/s
old_filter(N=100, K=20): 2601.5 i/s - 1.43x slower
Calculating -------------------------------------
old_filter(N=100, K=80)
717 i/100ms
filter(N=100, K=80) 908 i/100ms
-------------------------------------------------
old_filter(N=100, K=80)
7126.0 (±0.7%) i/s - 35850 in 5.031170s
filter(N=100, K=80) 9131.5 (±1.3%) i/s - 46308 in 5.072100s
Comparison:
filter(N=100, K=80): 9131.5 i/s
old_filter(N=100, K=80): 7126.0 i/s - 1.28x slower
Calculating -------------------------------------
old_filter(N=1000, K=10)
16 i/100ms
filter(N=1000, K=10) 21 i/100ms
-------------------------------------------------
old_filter(N=1000, K=10)
161.6 (±1.9%) i/s - 816 in 5.051265s
filter(N=1000, K=10) 216.3 (±1.4%) i/s - 1092 in 5.048709s
Comparison:
filter(N=1000, K=10): 216.3 i/s
old_filter(N=1000, K=10): 161.6 i/s - 1.34x slower
Calculating -------------------------------------
old_filter(N=1000, K=200)
20 i/100ms
filter(N=1000, K=200)
26 i/100ms
-------------------------------------------------
old_filter(N=1000, K=200)
204.8 (±1.5%) i/s - 1040 in 5.078630s
filter(N=1000, K=200)
263.3 (±2.3%) i/s - 1326 in 5.038179s
Comparison:
filter(N=1000, K=200): 263.3 i/s
old_filter(N=1000, K=200): 204.8 i/s - 1.29x slower
Calculating -------------------------------------
old_filter(N=1000, K=800)
58 i/100ms
filter(N=1000, K=800)
73 i/100ms
-------------------------------------------------
old_filter(N=1000, K=800)
578.5 (±3.8%) i/s - 2900 in 5.021371s
filter(N=1000, K=800)
730.0 (±1.1%) i/s - 3650 in 5.000251s
Comparison:
filter(N=1000, K=800): 730.0 i/s
old_filter(N=1000, K=800): 578.5 i/s - 1.26x slower
Calculating -------------------------------------
old_filter(N=1000, K=990)
146 i/100ms
filter(N=1000, K=990)
164 i/100ms
-------------------------------------------------
old_filter(N=1000, K=990)
1457.3 (±0.8%) i/s - 7300 in 5.009475s
filter(N=1000, K=990)
1670.7 (±1.5%) i/s - 8364 in 5.007446s
Comparison:
filter(N=1000, K=990): 1670.7 i/s
old_filter(N=1000, K=990): 1457.3 i/s - 1.15x slower
OS Name: Linux 2.6.32-431.30.1.el6.x86_64 #1 SMP Wed Jul 30 14:44:26 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
Ruby Version: ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
RubyGems Version: 2.2.2
RVM Version: rvm 1.25.33 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
Hamster version: 1.0.1-rc3
Calculating -------------------------------------
old_filter(N=10, K=2)
3132 i/100ms
filter(N=10, K=2) 4825 i/100ms
-------------------------------------------------
old_filter(N=10, K=2)
30598.3 (±8.6%) i/s - 153468 in 5.062400s
filter(N=10, K=2) 52345.9 (±3.8%) i/s - 265375 in 5.077277s
Comparison:
filter(N=10, K=2): 52345.9 i/s
old_filter(N=10, K=2): 30598.3 i/s - 1.71x slower
Calculating -------------------------------------
old_filter(N=10, K=8)
5973 i/100ms
filter(N=10, K=8) 7333 i/100ms
-------------------------------------------------
old_filter(N=10, K=8)
67003.7 (±9.4%) i/s - 340461 in 5.147048s
filter(N=10, K=8) 76040.1 (±12.1%) i/s - 373983 in 5.016412s
Comparison:
filter(N=10, K=8): 76040.1 i/s
old_filter(N=10, K=8): 67003.7 i/s - 1.13x slower
Calculating -------------------------------------
old_filter(N=20, K=4)
1266 i/100ms
filter(N=20, K=4) 2841 i/100ms
-------------------------------------------------
old_filter(N=20, K=4)
16595.4 (±13.5%) i/s - 81024 in 5.025667s
filter(N=20, K=4) 31738.5 (±2.2%) i/s - 159096 in 5.015250s
Comparison:
filter(N=20, K=4): 31738.5 i/s
old_filter(N=20, K=4): 16595.4 i/s - 1.91x slower
Calculating -------------------------------------
old_filter(N=20, K=16)
2979 i/100ms
filter(N=20, K=16) 4133 i/100ms
-------------------------------------------------
old_filter(N=20, K=16)
35316.6 (±2.4%) i/s - 178740 in 5.064100s
filter(N=20, K=16) 45623.9 (±1.9%) i/s - 231448 in 5.074713s
Comparison:
filter(N=20, K=16): 45623.9 i/s
old_filter(N=20, K=16): 35316.6 i/s - 1.29x slower
Calculating -------------------------------------
old_filter(N=50, K=10)
484 i/100ms
filter(N=50, K=10) 782 i/100ms
-------------------------------------------------
old_filter(N=50, K=10)
5203.6 (±2.5%) i/s - 26136 in 5.026036s
filter(N=50, K=10) 8014.6 (±1.3%) i/s - 40664 in 5.074627s
Comparison:
filter(N=50, K=10): 8014.6 i/s
old_filter(N=50, K=10): 5203.6 i/s - 1.54x slower
Calculating -------------------------------------
old_filter(N=50, K=40)
1175 i/100ms
filter(N=50, K=40) 1516 i/100ms
-------------------------------------------------
old_filter(N=50, K=40)
12777.6 (±2.9%) i/s - 64625 in 5.062134s
filter(N=50, K=40) 16073.4 (±1.9%) i/s - 81864 in 5.095068s
Comparison:
filter(N=50, K=40): 16073.4 i/s
old_filter(N=50, K=40): 12777.6 i/s - 1.26x slower
Calculating -------------------------------------
old_filter(N=100, K=20)
253 i/100ms
filter(N=100, K=20) 362 i/100ms
-------------------------------------------------
old_filter(N=100, K=20)
2573.4 (±1.8%) i/s - 12903 in 5.015683s
filter(N=100, K=20) 3679.0 (±1.2%) i/s - 18462 in 5.019007s
Comparison:
filter(N=100, K=20): 3679.0 i/s
old_filter(N=100, K=20): 2573.4 i/s - 1.43x slower
Calculating -------------------------------------
old_filter(N=100, K=80)
680 i/100ms
filter(N=100, K=80) 859 i/100ms
-------------------------------------------------
old_filter(N=100, K=80)
6673.6 (±1.2%) i/s - 34000 in 5.095432s
filter(N=100, K=80) 8698.2 (±1.0%) i/s - 43809 in 5.037085s
Comparison:
filter(N=100, K=80): 8698.2 i/s
old_filter(N=100, K=80): 6673.6 i/s - 1.30x slower
Calculating -------------------------------------
old_filter(N=1000, K=10)
15 i/100ms
filter(N=1000, K=10) 21 i/100ms
-------------------------------------------------
old_filter(N=1000, K=10)
156.7 (±1.9%) i/s - 795 in 5.074175s
filter(N=1000, K=10) 211.5 (±1.9%) i/s - 1071 in 5.065460s
Comparison:
filter(N=1000, K=10): 211.5 i/s
old_filter(N=1000, K=10): 156.7 i/s - 1.35x slower
Calculating -------------------------------------
old_filter(N=1000, K=200)
19 i/100ms
filter(N=1000, K=200)
25 i/100ms
-------------------------------------------------
old_filter(N=1000, K=200)
192.8 (±2.6%) i/s - 969 in 5.030329s
filter(N=1000, K=200)
253.7 (±1.2%) i/s - 1275 in 5.025793s
Comparison:
filter(N=1000, K=200): 253.7 i/s
old_filter(N=1000, K=200): 192.8 i/s - 1.32x slower
Calculating -------------------------------------
old_filter(N=1000, K=800)
52 i/100ms
filter(N=1000, K=800)
66 i/100ms
-------------------------------------------------
old_filter(N=1000, K=800)
541.2 (±1.7%) i/s - 2756 in 5.093704s
filter(N=1000, K=800)
672.0 (±1.2%) i/s - 3366 in 5.009657s
Comparison:
filter(N=1000, K=800): 672.0 i/s
old_filter(N=1000, K=800): 541.2 i/s - 1.24x slower
Calculating -------------------------------------
old_filter(N=1000, K=990)
125 i/100ms
filter(N=1000, K=990)
137 i/100ms
-------------------------------------------------
old_filter(N=1000, K=990)
1282.4 (±1.2%) i/s - 6500 in 5.069462s
filter(N=1000, K=990)
1396.1 (±1.1%) i/s - 6987 in 5.005063s
Comparison:
filter(N=1000, K=990): 1396.1 i/s
old_filter(N=1000, K=990): 1282.4 i/s - 1.09x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment