d_heap 0.2.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +26 -0
- data/.rubocop.yml +199 -0
- data/CHANGELOG.md +59 -0
- data/Gemfile +10 -2
- data/Gemfile.lock +42 -5
- data/README.md +392 -109
- data/Rakefile +8 -2
- data/benchmarks/perf.rb +29 -0
- data/benchmarks/push_n.yml +31 -0
- data/benchmarks/push_n_pop_n.yml +35 -0
- data/benchmarks/push_pop.yml +27 -0
- data/benchmarks/stackprof.rb +31 -0
- data/bin/bench_n +7 -0
- data/bin/benchmark-driver +29 -0
- data/bin/benchmarks +10 -0
- data/bin/console +1 -0
- data/bin/profile +10 -0
- data/bin/rubocop +29 -0
- data/d_heap.gemspec +11 -6
- data/docs/benchmarks-2.txt +75 -0
- data/docs/benchmarks-mem.txt +39 -0
- data/docs/benchmarks.txt +515 -0
- data/docs/profile.txt +392 -0
- data/ext/d_heap/d_heap.c +555 -225
- data/ext/d_heap/d_heap.h +24 -48
- data/ext/d_heap/extconf.rb +20 -0
- data/lib/benchmark_driver/runner/ips_zero_fail.rb +120 -0
- data/lib/d_heap.rb +40 -2
- data/lib/d_heap/benchmarks.rb +112 -0
- data/lib/d_heap/benchmarks/benchmarker.rb +116 -0
- data/lib/d_heap/benchmarks/implementations.rb +222 -0
- data/lib/d_heap/benchmarks/profiler.rb +71 -0
- data/lib/d_heap/benchmarks/rspec_matchers.rb +374 -0
- data/lib/d_heap/version.rb +4 -1
- metadata +54 -3
data/Rakefile
CHANGED
@@ -1,14 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bundler/gem_tasks"
|
2
4
|
require "rspec/core/rake_task"
|
3
5
|
|
4
6
|
RSpec::Core::RakeTask.new(:spec)
|
5
7
|
|
8
|
+
require "rubocop/rake_task"
|
9
|
+
|
10
|
+
RuboCop::RakeTask.new
|
11
|
+
|
6
12
|
require "rake/extensiontask"
|
7
13
|
|
8
|
-
task :
|
14
|
+
task build: :compile
|
9
15
|
|
10
16
|
Rake::ExtensionTask.new("d_heap") do |ext|
|
11
17
|
ext.lib_dir = "lib/d_heap"
|
12
18
|
end
|
13
19
|
|
14
|
-
task :
|
20
|
+
task default: %i[clobber compile spec rubocop]
|
data/benchmarks/perf.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "perf"
|
5
|
+
|
6
|
+
system("#{RbConfig.ruby} bin/rake compile", err: :out, exception: true)
|
7
|
+
require "d_heap/benchmarks"
|
8
|
+
include DHeap::Benchmarks # rubocop:disable Style/MixinUsage
|
9
|
+
fill_random_vals
|
10
|
+
|
11
|
+
n = ENV.fetch("BENCH_N", 5_000_000).to_i
|
12
|
+
# interval = ENV.fetch("PROF_INTERVAL", 100).to_i # measured in μs
|
13
|
+
|
14
|
+
i = 0
|
15
|
+
|
16
|
+
q = initq RbHeap
|
17
|
+
n.times { q << n }
|
18
|
+
q.clear
|
19
|
+
|
20
|
+
Perf.record do
|
21
|
+
while i < n
|
22
|
+
q << random_val
|
23
|
+
i += 1
|
24
|
+
end
|
25
|
+
while 0 < i # rubocop:disable Style/NumericPredicate
|
26
|
+
q.pop
|
27
|
+
i -= 1
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
---
|
2
|
+
prelude: |
|
3
|
+
system("#{RbConfig.ruby} bin/rake compile", err: :out, exception: true)
|
4
|
+
require "d_heap/benchmarks"
|
5
|
+
include DHeap::Benchmarks
|
6
|
+
fill_random_vals
|
7
|
+
|
8
|
+
n = ENV.fetch("BENCH_N", 1000).to_i
|
9
|
+
|
10
|
+
benchmark:
|
11
|
+
- script: &script |
|
12
|
+
q.clear
|
13
|
+
i = 0
|
14
|
+
while i < n
|
15
|
+
q << random_val
|
16
|
+
i += 1
|
17
|
+
end
|
18
|
+
name: "push N (findmin)"
|
19
|
+
prelude: "q = initq FindMin"
|
20
|
+
- script: *script
|
21
|
+
name: "push N (bsearch)"
|
22
|
+
prelude: "q = initq BSearch"
|
23
|
+
- script: *script
|
24
|
+
name: "push N (rb_heap)"
|
25
|
+
prelude: "q = initq RbHeap"
|
26
|
+
- script: *script
|
27
|
+
name: "push N (c++ stl)"
|
28
|
+
prelude: "q = initq CppSTL"
|
29
|
+
- script: *script
|
30
|
+
name: "push N (c_dheap)"
|
31
|
+
prelude: "q = initq DHeap"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
prelude: |
|
3
|
+
system("#{RbConfig.ruby} bin/rake compile", err: :out, exception: true)
|
4
|
+
require "d_heap/benchmarks"
|
5
|
+
include DHeap::Benchmarks
|
6
|
+
fill_random_vals
|
7
|
+
|
8
|
+
n = ENV.fetch("BENCH_N", 1000).to_i
|
9
|
+
|
10
|
+
i = 0
|
11
|
+
|
12
|
+
benchmark:
|
13
|
+
- script: &script |
|
14
|
+
while i < n
|
15
|
+
q << random_val
|
16
|
+
i += 1
|
17
|
+
end
|
18
|
+
while 0 < i
|
19
|
+
q.pop
|
20
|
+
i -= 1
|
21
|
+
end
|
22
|
+
name: "push N + pop N (findmin)"
|
23
|
+
prelude: "q = initq FindMin"
|
24
|
+
- script: *script
|
25
|
+
name: "push N + pop N (bsearch)"
|
26
|
+
prelude: "q = initq BSearch"
|
27
|
+
- script: *script
|
28
|
+
name: "push N + pop N (rb_heap)"
|
29
|
+
prelude: "q = initq RbHeap"
|
30
|
+
- script: *script
|
31
|
+
name: "push N + pop N (c++ stl)"
|
32
|
+
prelude: "q = initq CppSTL"
|
33
|
+
- script: *script
|
34
|
+
name: "push N + pop N (c_dheap)"
|
35
|
+
prelude: "q = initq DHeap"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
---
|
2
|
+
prelude: |
|
3
|
+
system("#{RbConfig.ruby} bin/rake compile", err: :out, exception: true)
|
4
|
+
require "d_heap/benchmarks"
|
5
|
+
include DHeap::Benchmarks
|
6
|
+
fill_random_vals
|
7
|
+
|
8
|
+
n = ENV.fetch("BENCH_N", 1000).to_i
|
9
|
+
|
10
|
+
benchmark:
|
11
|
+
- script: &script |
|
12
|
+
q << random_val
|
13
|
+
q.pop
|
14
|
+
name: "push + pop (findmin)"
|
15
|
+
prelude: "q = FindMin.new(n) { random_val }"
|
16
|
+
- script: *script
|
17
|
+
name: "push + pop (bsearch)"
|
18
|
+
prelude: "q = BSearch.new(n) { random_val }"
|
19
|
+
- script: *script
|
20
|
+
name: "push + pop (rb_heap)"
|
21
|
+
prelude: "q = RbHeap.new(n) { random_val }"
|
22
|
+
- script: *script
|
23
|
+
name: "push + pop (c++ stl)"
|
24
|
+
prelude: "q = initq CppSTL, n"
|
25
|
+
- script: *script
|
26
|
+
name: "push + pop (c_dheap)"
|
27
|
+
prelude: "q = initq DHeap, n"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "stackprof"
|
5
|
+
|
6
|
+
system("#{RbConfig.ruby} bin/rake compile", err: :out, exception: true)
|
7
|
+
require "d_heap/benchmarks"
|
8
|
+
include DHeap::Benchmarks # rubocop:disable Style/MixinUsage
|
9
|
+
fill_random_vals
|
10
|
+
|
11
|
+
n = ENV.fetch("BENCH_N", 5_000_000).to_i
|
12
|
+
interval = ENV.fetch("PROF_INTERVAL", 100).to_i # measured in μs
|
13
|
+
|
14
|
+
i = 0
|
15
|
+
|
16
|
+
q = initq RbHeap
|
17
|
+
n.times { q << n }
|
18
|
+
q.clear
|
19
|
+
|
20
|
+
StackProf.run(mode: :cpu, out: "stackprof-cpu-push.dump", interval: interval) do
|
21
|
+
while i < n
|
22
|
+
q << random_val
|
23
|
+
i += 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
StackProf.run(mode: :cpu, out: "stackprof-cpu-pop.dump", interval: interval) do
|
27
|
+
while 0 < i # rubocop:disable Style/NumericPredicate
|
28
|
+
q.pop
|
29
|
+
i -= 1
|
30
|
+
end
|
31
|
+
end
|
data/bin/bench_n
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'benchmark-driver' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("benchmark_driver", "benchmark-driver")
|
data/bin/benchmarks
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "pathname"
|
5
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
6
|
+
require "rubygems"
|
7
|
+
require "bundler/setup"
|
8
|
+
|
9
|
+
require "d_heap/benchmarks/benchmarker"
|
10
|
+
DHeap::Benchmarks::Benchmarker.new.call
|
data/bin/console
CHANGED
data/bin/profile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "pathname"
|
5
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
6
|
+
require "rubygems"
|
7
|
+
require "bundler/setup"
|
8
|
+
|
9
|
+
require "d_heap/benchmarks/profiler"
|
10
|
+
DHeap::Benchmarks::Profiler.new.call
|
data/bin/rubocop
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rubocop' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rubocop", "rubocop")
|
data/d_heap.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/d_heap/version"
|
2
4
|
|
3
5
|
Gem::Specification.new do |spec|
|
4
6
|
spec.name = "d_heap"
|
@@ -6,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
6
8
|
spec.authors = ["nicholas a. evans"]
|
7
9
|
spec.email = ["nicholas.evans@gmail.com"]
|
8
10
|
|
9
|
-
spec.summary =
|
11
|
+
spec.summary = "A d-ary heap implementation, for priority queues"
|
10
12
|
spec.description = <<~DESC
|
11
13
|
A C extension implementation of a d-ary heap data structure, suitable for
|
12
14
|
use in e.g. priority queues or Djikstra's algorithm.
|
@@ -21,11 +23,14 @@ Gem::Specification.new do |spec|
|
|
21
23
|
|
22
24
|
# Specify which files should be added to the gem when it is released.
|
23
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
|
-
spec.files
|
25
|
-
`git ls-files -z`.split("\x0").reject {
|
26
|
-
|
26
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) {
|
27
|
+
`git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
|
28
|
+
}
|
27
29
|
spec.bindir = "exe"
|
28
|
-
spec.executables = spec.files.grep(%r{^exe/}) {
|
30
|
+
spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
|
29
31
|
spec.require_paths = ["lib"]
|
30
32
|
spec.extensions = ["ext/d_heap/extconf.rb"]
|
33
|
+
|
34
|
+
spec.add_development_dependency "benchmark_driver"
|
35
|
+
spec.add_development_dependency "ruby-prof"
|
31
36
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
Warming up --------------------------------------
|
2
|
+
push + pop (findmin) 136.044 i/s - 140.000 times in 1.029078s (7.35ms/i)
|
3
|
+
push + pop (bsearch) 5.700k i/s - 5.984k times in 1.049902s (175.45μs/i)
|
4
|
+
push + pop (rb_heap) 466.447k i/s - 496.977k times in 1.065453s (2.14μs/i)
|
5
|
+
push + pop (c++ stl) 3.023M i/s - 3.038M times in 1.004830s (330.81ns/i, 794clocks/i)
|
6
|
+
push + pop (c_dheap) 3.579M i/s - 3.620M times in 1.011429s (279.40ns/i, 785clocks/i)
|
7
|
+
Calculating -------------------------------------
|
8
|
+
bin/bench_n 1000000 bin/bench_n 10000 bin/bench_n 25000 bin/bench_n 50000 bin/bench_n 100000 bin/bench_n 250000 bin/bench_n 500000 bin/bench_n 10000000 bin/bench_n 2500000 bin/bench_n 5000000
|
9
|
+
push + pop (findmin) 136.690 11.014k 4.426k 2.178k 1.084k 408.671 215.680 13.169 52.037 26.307 i/s - 408.000 times in 2.984861s 0.037045s 0.092186s 0.187334s 0.376306s 0.998359s 1.891687s 30.981982s 7.840594s 15.509132s
|
10
|
+
push + pop (bsearch) 5.639k 786.334k 364.964k 200.521k 88.607k 34.530k 17.965k 288.811 1.302k 592.009 i/s - 17.098k times in 3.032244s 0.021744s 0.046848s 0.085268s 0.192965s 0.495157s 0.951721s 59.201408s 13.131805s 28.881310s
|
11
|
+
push + pop (rb_heap) 513.523k 736.618k 670.187k 618.157k 579.251k 572.795k 543.648k 423.119k 460.849k 445.235k i/s - 1.399M times in 2.724978s 1.899681s 2.087985s 2.263730s 2.415776s 2.443003s 2.573980s 3.307202s 3.036440s 3.142928s
|
12
|
+
push + pop (c++ stl) 3.396M 4.902M 4.794M 4.532M 4.316M 4.204M 3.903M 2.022M 2.659M 2.347M i/s - 9.069M times in 2.670712s 1.850114s 1.891786s 2.001185s 2.101354s 2.157093s 2.323676s 4.484351s 3.410224s 3.864573s
|
13
|
+
push + pop (c_dheap) 4.403M 7.311M 6.407M 6.738M 6.254M 5.918M 5.126M 2.138M 3.304M 2.665M i/s - 10.737M times in 2.438365s 1.468580s 1.675785s 1.593589s 1.716764s 1.814447s 2.094553s 5.022305s 3.249709s 4.029170s
|
14
|
+
|
15
|
+
Comparison:
|
16
|
+
push + pop (findmin)
|
17
|
+
bin/bench_n 10000: 11013.7 i/s
|
18
|
+
bin/bench_n 25000: 4425.8 i/s - 2.49x slower
|
19
|
+
bin/bench_n 50000: 2177.9 i/s - 5.06x slower
|
20
|
+
bin/bench_n 100000: 1084.2 i/s - 10.16x slower
|
21
|
+
bin/bench_n 250000: 408.7 i/s - 26.95x slower
|
22
|
+
bin/bench_n 500000: 215.7 i/s - 51.06x slower
|
23
|
+
bin/bench_n 1000000: 136.7 i/s - 80.57x slower
|
24
|
+
bin/bench_n 2500000: 52.0 i/s - 211.65x slower
|
25
|
+
bin/bench_n 5000000: 26.3 i/s - 418.66x slower
|
26
|
+
bin/bench_n 10000000: 13.2 i/s - 836.34x slower
|
27
|
+
|
28
|
+
push + pop (bsearch)
|
29
|
+
bin/bench_n 10000: 786334.2 i/s
|
30
|
+
bin/bench_n 25000: 364963.8 i/s - 2.15x slower
|
31
|
+
bin/bench_n 50000: 200520.6 i/s - 3.92x slower
|
32
|
+
bin/bench_n 100000: 88607.0 i/s - 8.87x slower
|
33
|
+
bin/bench_n 250000: 34530.5 i/s - 22.77x slower
|
34
|
+
bin/bench_n 500000: 17965.4 i/s - 43.77x slower
|
35
|
+
bin/bench_n 1000000: 5638.7 i/s - 139.45x slower
|
36
|
+
bin/bench_n 2500000: 1302.0 i/s - 603.93x slower
|
37
|
+
bin/bench_n 5000000: 592.0 i/s - 1328.25x slower
|
38
|
+
bin/bench_n 10000000: 288.8 i/s - 2722.66x slower
|
39
|
+
|
40
|
+
push + pop (rb_heap)
|
41
|
+
bin/bench_n 10000: 736618.2 i/s
|
42
|
+
bin/bench_n 25000: 670186.8 i/s - 1.10x slower
|
43
|
+
bin/bench_n 50000: 618156.7 i/s - 1.19x slower
|
44
|
+
bin/bench_n 100000: 579250.7 i/s - 1.27x slower
|
45
|
+
bin/bench_n 250000: 572795.0 i/s - 1.29x slower
|
46
|
+
bin/bench_n 500000: 543648.3 i/s - 1.35x slower
|
47
|
+
bin/bench_n 1000000: 513523.4 i/s - 1.43x slower
|
48
|
+
bin/bench_n 2500000: 460848.9 i/s - 1.60x slower
|
49
|
+
bin/bench_n 5000000: 445234.5 i/s - 1.65x slower
|
50
|
+
bin/bench_n 10000000: 423119.0 i/s - 1.74x slower
|
51
|
+
|
52
|
+
push + pop (c++ stl)
|
53
|
+
bin/bench_n 10000: 4901711.5 i/s
|
54
|
+
bin/bench_n 25000: 4793735.8 i/s - 1.02x slower
|
55
|
+
bin/bench_n 50000: 4531675.9 i/s - 1.08x slower
|
56
|
+
bin/bench_n 100000: 4315657.8 i/s - 1.14x slower
|
57
|
+
bin/bench_n 250000: 4204141.1 i/s - 1.17x slower
|
58
|
+
bin/bench_n 500000: 3902748.9 i/s - 1.26x slower
|
59
|
+
bin/bench_n 1000000: 3395620.2 i/s - 1.44x slower
|
60
|
+
bin/bench_n 2500000: 2659274.8 i/s - 1.84x slower
|
61
|
+
bin/bench_n 5000000: 2346630.0 i/s - 2.09x slower
|
62
|
+
bin/bench_n 10000000: 2022304.5 i/s - 2.42x slower
|
63
|
+
|
64
|
+
push + pop (c_dheap)
|
65
|
+
bin/bench_n 10000: 7311366.6 i/s
|
66
|
+
bin/bench_n 50000: 6737824.5 i/s - 1.09x slower
|
67
|
+
bin/bench_n 25000: 6407340.6 i/s - 1.14x slower
|
68
|
+
bin/bench_n 100000: 6254396.3 i/s - 1.17x slower
|
69
|
+
bin/bench_n 250000: 5917684.5 i/s - 1.24x slower
|
70
|
+
bin/bench_n 500000: 5126307.6 i/s - 1.43x slower
|
71
|
+
bin/bench_n 1000000: 4403494.1 i/s - 1.66x slower
|
72
|
+
bin/bench_n 2500000: 3304088.2 i/s - 2.21x slower
|
73
|
+
bin/bench_n 5000000: 2664897.7 i/s - 2.74x slower
|
74
|
+
bin/bench_n 10000000: 2137927.6 i/s - 3.42x slower
|
75
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
Calculating -------------------------------------
|
2
|
+
bin/bench_n 10000 bin/bench_n 100000 bin/bench_n 1000000 bin/bench_n 10000000
|
3
|
+
push + pop (findmin) 40.280M 42.236M 58.956M 204.536M bytes - 1.000 times
|
4
|
+
push + pop (bsearch) 40.212M 42.036M 59.012M 204.536M bytes - 1.000 times
|
5
|
+
push + pop (rb_heap) 40.264M 41.780M 58.940M 204.364M bytes - 1.000 times
|
6
|
+
push + pop (c++ stl) 40.416M 42.268M 56.624M 302.152M bytes - 1.000 times
|
7
|
+
push + pop (c_dheap) 40.848M 43.968M 72.888M 568.828M bytes - 1.000 times
|
8
|
+
|
9
|
+
Comparison:
|
10
|
+
push + pop (findmin)
|
11
|
+
bin/bench_n 10000: 40280000.0 bytes
|
12
|
+
bin/bench_n 100000: 42236000.0 bytes - 1.05x larger
|
13
|
+
bin/bench_n 1000000: 58956000.0 bytes - 1.46x larger
|
14
|
+
bin/bench_n 10000000: 204536000.0 bytes - 5.08x larger
|
15
|
+
|
16
|
+
push + pop (bsearch)
|
17
|
+
bin/bench_n 10000: 40212000.0 bytes
|
18
|
+
bin/bench_n 100000: 42036000.0 bytes - 1.05x larger
|
19
|
+
bin/bench_n 1000000: 59012000.0 bytes - 1.47x larger
|
20
|
+
bin/bench_n 10000000: 204536000.0 bytes - 5.09x larger
|
21
|
+
|
22
|
+
push + pop (rb_heap)
|
23
|
+
bin/bench_n 10000: 40264000.0 bytes
|
24
|
+
bin/bench_n 100000: 41780000.0 bytes - 1.04x larger
|
25
|
+
bin/bench_n 1000000: 58940000.0 bytes - 1.46x larger
|
26
|
+
bin/bench_n 10000000: 204364000.0 bytes - 5.08x larger
|
27
|
+
|
28
|
+
push + pop (c++ stl)
|
29
|
+
bin/bench_n 10000: 40416000.0 bytes
|
30
|
+
bin/bench_n 100000: 42268000.0 bytes - 1.05x larger
|
31
|
+
bin/bench_n 1000000: 56624000.0 bytes - 1.40x larger
|
32
|
+
bin/bench_n 10000000: 302152000.0 bytes - 7.48x larger
|
33
|
+
|
34
|
+
push + pop (c_dheap)
|
35
|
+
bin/bench_n 10000: 40848000.0 bytes
|
36
|
+
bin/bench_n 100000: 43968000.0 bytes - 1.08x larger
|
37
|
+
bin/bench_n 1000000: 72888000.0 bytes - 1.78x larger
|
38
|
+
bin/bench_n 10000000: 568828000.0 bytes - 13.93x larger
|
39
|
+
|
data/docs/benchmarks.txt
ADDED
@@ -0,0 +1,515 @@
|
|
1
|
+
Benchmarking run at 2021-01-17 17:17:24 -0500
|
2
|
+
ruby v2.7.2, DHeap v0.5.0
|
3
|
+
|
4
|
+
################################################################################
|
5
|
+
# Benchmarks with N=5 (t=10sec/benchmark)
|
6
|
+
################################################################################
|
7
|
+
|
8
|
+
== push N (N=5) ================================================================
|
9
|
+
Warming up --------------------------------------
|
10
|
+
push N (bsearch) 921.113k i/s - 1.862M times in 2.021033s (1.09μs/i)
|
11
|
+
push N (rb_heap) 953.542k i/s - 1.933M times in 2.026956s (1.05μs/i)
|
12
|
+
push N (c++ stl) 989.247k i/s - 2.038M times in 2.060495s (1.01μs/i)
|
13
|
+
push N (c_dheap) 1.922M i/s - 3.928M times in 2.043907s (520.30ns/i)
|
14
|
+
Calculating -------------------------------------
|
15
|
+
push N (bsearch) 921.060k i/s - 5.527M times in 6.000346s (1.09μs/i)
|
16
|
+
push N (rb_heap) 928.435k i/s - 5.721M times in 6.162252s (1.08μs/i)
|
17
|
+
push N (c++ stl) 1.050M i/s - 5.935M times in 5.654249s (952.62ns/i)
|
18
|
+
push N (c_dheap) 1.970M i/s - 11.532M times in 5.854595s (507.69ns/i)
|
19
|
+
|
20
|
+
Comparison:
|
21
|
+
push N (c_dheap): 1969700.7 i/s
|
22
|
+
push N (c++ stl): 1049738.1 i/s - 1.88x slower
|
23
|
+
push N (rb_heap): 928435.2 i/s - 2.12x slower
|
24
|
+
push N (bsearch): 921060.0 i/s - 2.14x slower
|
25
|
+
|
26
|
+
== push N then pop N (N=5) ====================================================
|
27
|
+
Warming up --------------------------------------
|
28
|
+
push N + pop N (findmin) 812.905k i/s - 1.645M times in 2.023946s (1.23μs/i)
|
29
|
+
push N + pop N (bsearch) 756.655k i/s - 1.537M times in 2.031407s (1.32μs/i)
|
30
|
+
push N + pop N (rb_heap) 505.268k i/s - 1.051M times in 2.079579s (1.98μs/i)
|
31
|
+
push N + pop N (c++ stl) 1.159M i/s - 2.358M times in 2.035009s (863.13ns/i)
|
32
|
+
push N + pop N (c_dheap) 1.425M i/s - 2.889M times in 2.028016s (701.91ns/i)
|
33
|
+
Calculating -------------------------------------
|
34
|
+
push N + pop N (findmin) 862.913k i/s - 4.877M times in 5.652280s (1.16μs/i)
|
35
|
+
push N + pop N (bsearch) 762.887k i/s - 4.540M times in 5.950988s (1.31μs/i)
|
36
|
+
push N + pop N (rb_heap) 506.890k i/s - 3.032M times in 5.980790s (1.97μs/i)
|
37
|
+
push N + pop N (c++ stl) 1.135M i/s - 6.951M times in 6.124666s (881.06ns/i)
|
38
|
+
push N + pop N (c_dheap) 1.376M i/s - 8.548M times in 6.213139s (726.85ns/i)
|
39
|
+
|
40
|
+
Comparison:
|
41
|
+
push N + pop N (c_dheap): 1375805.0 i/s
|
42
|
+
push N + pop N (c++ stl): 1134997.5 i/s - 1.21x slower
|
43
|
+
push N + pop N (findmin): 862913.1 i/s - 1.59x slower
|
44
|
+
push N + pop N (bsearch): 762887.1 i/s - 1.80x slower
|
45
|
+
push N + pop N (rb_heap): 506890.4 i/s - 2.71x slower
|
46
|
+
|
47
|
+
== Push/pop with pre-filled queue (size=N) (N=5) ==============================
|
48
|
+
Warming up --------------------------------------
|
49
|
+
push + pop (findmin) 5.115M i/s - 10.399M times in 2.033134s (195.52ns/i, 504clocks/i)
|
50
|
+
push + pop (bsearch) 4.203M i/s - 8.569M times in 2.038788s (237.92ns/i, 627clocks/i)
|
51
|
+
push + pop (rb_heap) 2.362M i/s - 4.760M times in 2.014718s (423.30ns/i)
|
52
|
+
push + pop (c++ stl) 6.881M i/s - 13.910M times in 2.021416s (145.32ns/i, 269clocks/i)
|
53
|
+
push + pop (c_dheap) 8.354M i/s - 16.814M times in 2.012796s (119.71ns/i, 343clocks/i)
|
54
|
+
Calculating -------------------------------------
|
55
|
+
push + pop (findmin) 5.026M i/s - 30.687M times in 6.105509s (198.96ns/i, 532clocks/i)
|
56
|
+
push + pop (bsearch) 4.300M i/s - 25.219M times in 5.864447s (232.54ns/i, 607clocks/i)
|
57
|
+
push + pop (rb_heap) 2.299M i/s - 14.174M times in 6.164105s (434.88ns/i)
|
58
|
+
push + pop (c++ stl) 7.535M i/s - 41.288M times in 5.479760s (132.72ns/i, 350clocks/i)
|
59
|
+
push + pop (c_dheap) 9.044M i/s - 50.122M times in 5.541698s (110.57ns/i, 241clocks/i)
|
60
|
+
|
61
|
+
Comparison:
|
62
|
+
push + pop (c_dheap): 9044435.5 i/s
|
63
|
+
push + pop (c++ stl): 7534583.4 i/s - 1.20x slower
|
64
|
+
push + pop (findmin): 5026155.1 i/s - 1.80x slower
|
65
|
+
push + pop (bsearch): 4300260.0 i/s - 2.10x slower
|
66
|
+
push + pop (rb_heap): 2299499.7 i/s - 3.93x slower
|
67
|
+
|
68
|
+
################################################################################
|
69
|
+
# Benchmarks with N=21 (t=10sec/benchmark)
|
70
|
+
################################################################################
|
71
|
+
|
72
|
+
== push N (N=21) ==============================================================
|
73
|
+
Warming up --------------------------------------
|
74
|
+
push N (bsearch) 172.478k i/s - 359.942k times in 2.086881s (5.80μs/i)
|
75
|
+
push N (rb_heap) 206.237k i/s - 426.074k times in 2.065940s (4.85μs/i)
|
76
|
+
push N (c++ stl) 317.575k i/s - 652.828k times in 2.055665s (3.15μs/i)
|
77
|
+
push N (c_dheap) 488.947k i/s - 991.484k times in 2.027793s (2.05μs/i)
|
78
|
+
Calculating -------------------------------------
|
79
|
+
push N (bsearch) 168.679k i/s - 1.035M times in 6.135155s (5.93μs/i)
|
80
|
+
push N (rb_heap) 202.804k i/s - 1.237M times in 6.101584s (4.93μs/i)
|
81
|
+
push N (c++ stl) 305.547k i/s - 1.905M times in 6.236198s (3.27μs/i)
|
82
|
+
push N (c_dheap) 464.231k i/s - 2.934M times in 6.319441s (2.15μs/i)
|
83
|
+
|
84
|
+
Comparison:
|
85
|
+
push N (c_dheap): 464231.4 i/s
|
86
|
+
push N (c++ stl): 305546.7 i/s - 1.52x slower
|
87
|
+
push N (rb_heap): 202803.7 i/s - 2.29x slower
|
88
|
+
push N (bsearch): 168678.7 i/s - 2.75x slower
|
89
|
+
|
90
|
+
== push N then pop N (N=21) ====================================================
|
91
|
+
Warming up --------------------------------------
|
92
|
+
push N + pop N (findmin) 160.307k i/s - 331.191k times in 2.065978s (6.24μs/i)
|
93
|
+
push N + pop N (bsearch) 136.665k i/s - 280.830k times in 2.054882s (7.32μs/i)
|
94
|
+
push N + pop N (rb_heap) 77.997k i/s - 156.492k times in 2.006388s (12.82μs/i)
|
95
|
+
push N + pop N (c++ stl) 243.819k i/s - 489.279k times in 2.006731s (4.10μs/i)
|
96
|
+
push N + pop N (c_dheap) 295.254k i/s - 597.410k times in 2.023373s (3.39μs/i)
|
97
|
+
Calculating -------------------------------------
|
98
|
+
push N + pop N (findmin) 161.999k i/s - 961.842k times in 5.937343s (6.17μs/i)
|
99
|
+
push N + pop N (bsearch) 143.432k i/s - 819.988k times in 5.716901s (6.97μs/i)
|
100
|
+
push N + pop N (rb_heap) 79.622k i/s - 467.981k times in 5.877529s (12.56μs/i)
|
101
|
+
push N + pop N (c++ stl) 252.227k i/s - 1.463M times in 5.799983s (3.96μs/i)
|
102
|
+
push N + pop N (c_dheap) 298.350k i/s - 1.772M times in 5.937739s (3.35μs/i)
|
103
|
+
|
104
|
+
Comparison:
|
105
|
+
push N + pop N (c_dheap): 298350.3 i/s
|
106
|
+
push N + pop N (c++ stl): 252227.1 i/s - 1.18x slower
|
107
|
+
push N + pop N (findmin): 161998.7 i/s - 1.84x slower
|
108
|
+
push N + pop N (bsearch): 143432.3 i/s - 2.08x slower
|
109
|
+
push N + pop N (rb_heap): 79622.1 i/s - 3.75x slower
|
110
|
+
|
111
|
+
== Push/pop with pre-filled queue (size=N) (N=21) ==============================
|
112
|
+
Warming up --------------------------------------
|
113
|
+
push + pop (findmin) 4.383M i/s - 8.832M times in 2.014937s (228.13ns/i, 482clocks/i)
|
114
|
+
push + pop (bsearch) 3.357M i/s - 6.859M times in 2.042965s (297.84ns/i, 709clocks/i)
|
115
|
+
push + pop (rb_heap) 1.885M i/s - 3.852M times in 2.043333s (530.48ns/i, 698clocks/i)
|
116
|
+
push + pop (c++ stl) 6.362M i/s - 12.844M times in 2.018810s (157.18ns/i, 438clocks/i)
|
117
|
+
push + pop (c_dheap) 7.644M i/s - 15.337M times in 2.006451s (130.83ns/i, 350clocks/i)
|
118
|
+
Calculating -------------------------------------
|
119
|
+
push + pop (findmin) 4.543M i/s - 26.301M times in 5.789445s (220.12ns/i, 618clocks/i)
|
120
|
+
push + pop (bsearch) 3.462M i/s - 20.145M times in 5.819157s (288.87ns/i, 721clocks/i)
|
121
|
+
push + pop (rb_heap) 1.845M i/s - 11.310M times in 6.128707s (541.86ns/i)
|
122
|
+
push + pop (c++ stl) 7.223M i/s - 38.172M times in 5.284687s (138.45ns/i, 383clocks/i)
|
123
|
+
push + pop (c_dheap) 8.855M i/s - 45.863M times in 5.179255s (112.93ns/i, 331clocks/i)
|
124
|
+
|
125
|
+
Comparison:
|
126
|
+
push + pop (c_dheap): 8855093.4 i/s
|
127
|
+
push + pop (c++ stl): 7223079.5 i/s - 1.23x slower
|
128
|
+
push + pop (findmin): 4542913.7 i/s - 1.95x slower
|
129
|
+
push + pop (bsearch): 3461802.4 i/s - 2.56x slower
|
130
|
+
push + pop (rb_heap): 1845488.7 i/s - 4.80x slower
|
131
|
+
|
132
|
+
################################################################################
|
133
|
+
# Benchmarks with N=85 (t=10sec/benchmark)
|
134
|
+
################################################################################
|
135
|
+
|
136
|
+
== push N (N=85) ==============================================================
|
137
|
+
Warming up --------------------------------------
|
138
|
+
push N (bsearch) 33.725k i/s - 70.434k times in 2.088480s (29.65μs/i)
|
139
|
+
push N (rb_heap) 48.257k i/s - 97.041k times in 2.010935s (20.72μs/i)
|
140
|
+
push N (c++ stl) 89.473k i/s - 179.991k times in 2.011685s (11.18μs/i)
|
141
|
+
push N (c_dheap) 113.625k i/s - 229.362k times in 2.018582s (8.80μs/i)
|
142
|
+
Calculating -------------------------------------
|
143
|
+
push N (bsearch) 32.896k i/s - 202.350k times in 6.151202s (30.40μs/i)
|
144
|
+
push N (rb_heap) 45.078k i/s - 289.539k times in 6.423085s (22.18μs/i)
|
145
|
+
push N (c++ stl) 90.436k i/s - 536.836k times in 5.936116s (11.06μs/i)
|
146
|
+
push N (c_dheap) 115.218k i/s - 681.751k times in 5.917030s (8.68μs/i)
|
147
|
+
|
148
|
+
Comparison:
|
149
|
+
push N (c_dheap): 115218.4 i/s
|
150
|
+
push N (c++ stl): 90435.6 i/s - 1.27x slower
|
151
|
+
push N (rb_heap): 45077.9 i/s - 2.56x slower
|
152
|
+
push N (bsearch): 32896.0 i/s - 3.50x slower
|
153
|
+
|
154
|
+
== push N then pop N (N=85) ====================================================
|
155
|
+
Warming up --------------------------------------
|
156
|
+
push N + pop N (findmin) 28.014k i/s - 57.855k times in 2.065181s (35.70μs/i)
|
157
|
+
push N + pop N (bsearch) 28.759k i/s - 59.829k times in 2.080345s (34.77μs/i)
|
158
|
+
push N + pop N (rb_heap) 14.748k i/s - 29.500k times in 2.000302s (67.81μs/i)
|
159
|
+
push N + pop N (c++ stl) 58.058k i/s - 117.831k times in 2.029553s (17.22μs/i)
|
160
|
+
push N + pop N (c_dheap) 67.639k i/s - 139.587k times in 2.063705s (14.78μs/i)
|
161
|
+
Calculating -------------------------------------
|
162
|
+
push N + pop N (findmin) 27.713k i/s - 168.086k times in 6.065197s (36.08μs/i)
|
163
|
+
push N + pop N (bsearch) 29.110k i/s - 172.554k times in 5.927752s (34.35μs/i)
|
164
|
+
push N + pop N (rb_heap) 14.908k i/s - 88.486k times in 5.935373s (67.08μs/i)
|
165
|
+
push N + pop N (c++ stl) 54.774k i/s - 348.345k times in 6.359716s (18.26μs/i)
|
166
|
+
push N + pop N (c_dheap) 68.487k i/s - 405.834k times in 5.925729s (14.60μs/i)
|
167
|
+
|
168
|
+
Comparison:
|
169
|
+
push N + pop N (c_dheap): 68486.8 i/s
|
170
|
+
push N + pop N (c++ stl): 54773.7 i/s - 1.25x slower
|
171
|
+
push N + pop N (bsearch): 29109.5 i/s - 2.35x slower
|
172
|
+
push N + pop N (findmin): 27713.2 i/s - 2.47x slower
|
173
|
+
push N + pop N (rb_heap): 14908.2 i/s - 4.59x slower
|
174
|
+
|
175
|
+
== Push/pop with pre-filled queue (size=N) (N=85) ==============================
|
176
|
+
Warming up --------------------------------------
|
177
|
+
push + pop (findmin) 3.148M i/s - 6.329M times in 2.010240s (317.64ns/i, 872clocks/i)
|
178
|
+
push + pop (bsearch) 2.616M i/s - 5.241M times in 2.003260s (382.20ns/i)
|
179
|
+
push + pop (rb_heap) 1.537M i/s - 3.126M times in 2.033793s (650.57ns/i)
|
180
|
+
push + pop (c++ stl) 6.648M i/s - 13.314M times in 2.002850s (150.43ns/i, 396clocks/i)
|
181
|
+
push + pop (c_dheap) 7.902M i/s - 15.885M times in 2.010277s (126.55ns/i, 282clocks/i)
|
182
|
+
Calculating -------------------------------------
|
183
|
+
push + pop (findmin) 3.327M i/s - 18.889M times in 5.677677s (300.58ns/i, 809clocks/i)
|
184
|
+
push + pop (bsearch) 2.827M i/s - 15.699M times in 5.553113s (353.73ns/i, 891clocks/i)
|
185
|
+
push + pop (rb_heap) 1.465M i/s - 9.223M times in 6.293793s (682.42ns/i)
|
186
|
+
push + pop (c++ stl) 7.057M i/s - 39.885M times in 5.651789s (141.70ns/i, 418clocks/i)
|
187
|
+
push + pop (c_dheap) 8.422M i/s - 47.412M times in 5.629438s (118.73ns/i, 281clocks/i)
|
188
|
+
|
189
|
+
Comparison:
|
190
|
+
push + pop (c_dheap): 8422216.3 i/s
|
191
|
+
push + pop (c++ stl): 7057057.1 i/s - 1.19x slower
|
192
|
+
push + pop (findmin): 3326922.6 i/s - 2.53x slower
|
193
|
+
push + pop (bsearch): 2827025.2 i/s - 2.98x slower
|
194
|
+
push + pop (rb_heap): 1465369.7 i/s - 5.75x slower
|
195
|
+
|
196
|
+
################################################################################
|
197
|
+
# Benchmarks with N=341 (t=10sec/benchmark)
|
198
|
+
################################################################################
|
199
|
+
|
200
|
+
== push N (N=341) ==============================================================
|
201
|
+
Warming up --------------------------------------
|
202
|
+
push N (bsearch) 6.761k i/s - 13.860k times in 2.049946s (147.90μs/i)
|
203
|
+
push N (rb_heap) 11.284k i/s - 23.040k times in 2.041838s (88.62μs/i)
|
204
|
+
push N (c++ stl) 23.839k i/s - 49.266k times in 2.066605s (41.95μs/i)
|
205
|
+
push N (c_dheap) 30.654k i/s - 63.420k times in 2.068901s (32.62μs/i)
|
206
|
+
Calculating -------------------------------------
|
207
|
+
push N (bsearch) 6.624k i/s - 40.566k times in 6.123861s (150.96μs/i)
|
208
|
+
push N (rb_heap) 11.433k i/s - 67.703k times in 5.921638s (87.46μs/i)
|
209
|
+
push N (c++ stl) 23.055k i/s - 143.034k times in 6.204083s (43.37μs/i)
|
210
|
+
push N (c_dheap) 27.951k i/s - 183.923k times in 6.580153s (35.78μs/i)
|
211
|
+
|
212
|
+
Comparison:
|
213
|
+
push N (c_dheap): 27951.2 i/s
|
214
|
+
push N (c++ stl): 23054.8 i/s - 1.21x slower
|
215
|
+
push N (rb_heap): 11433.2 i/s - 2.44x slower
|
216
|
+
push N (bsearch): 6624.3 i/s - 4.22x slower
|
217
|
+
|
218
|
+
== push N then pop N (N=341) ==================================================
|
219
|
+
Warming up --------------------------------------
|
220
|
+
push N + pop N (findmin) 3.013k i/s - 6.040k times in 2.004514s (331.87μs/i)
|
221
|
+
push N + pop N (bsearch) 6.202k i/s - 12.684k times in 2.045306s (161.25μs/i)
|
222
|
+
push N + pop N (rb_heap) 3.028k i/s - 6.100k times in 2.014435s (330.24μs/i)
|
223
|
+
push N + pop N (c++ stl) 13.177k i/s - 27.006k times in 2.049544s (75.89μs/i)
|
224
|
+
push N + pop N (c_dheap) 15.142k i/s - 31.563k times in 2.084497s (66.04μs/i)
|
225
|
+
Calculating -------------------------------------
|
226
|
+
push N + pop N (findmin) 3.025k i/s - 18.079k times in 5.976274s (330.56μs/i)
|
227
|
+
push N + pop N (bsearch) 5.906k i/s - 37.209k times in 6.300596s (169.33μs/i)
|
228
|
+
push N + pop N (rb_heap) 3.008k i/s - 18.168k times in 6.039305s (332.41μs/i)
|
229
|
+
push N + pop N (c++ stl) 13.135k i/s - 79.059k times in 6.018814s (76.13μs/i)
|
230
|
+
push N + pop N (c_dheap) 15.142k i/s - 90.850k times in 5.999735s (66.04μs/i)
|
231
|
+
|
232
|
+
Comparison:
|
233
|
+
push N + pop N (c_dheap): 15142.3 i/s
|
234
|
+
push N + pop N (c++ stl): 13135.3 i/s - 1.15x slower
|
235
|
+
push N + pop N (bsearch): 5905.6 i/s - 2.56x slower
|
236
|
+
push N + pop N (findmin): 3025.1 i/s - 5.01x slower
|
237
|
+
push N + pop N (rb_heap): 3008.3 i/s - 5.03x slower
|
238
|
+
|
239
|
+
== Push/pop with pre-filled queue (size=N) (N=341) ============================
|
240
|
+
Warming up --------------------------------------
|
241
|
+
push + pop (findmin) 1.508M i/s - 3.048M times in 2.020819s (662.94ns/i)
|
242
|
+
push + pop (bsearch) 2.149M i/s - 4.337M times in 2.017794s (465.25ns/i)
|
243
|
+
push + pop (rb_heap) 1.144M i/s - 2.313M times in 2.021027s (873.78ns/i)
|
244
|
+
push + pop (c++ stl) 5.897M i/s - 11.981M times in 2.031688s (169.57ns/i, 484clocks/i)
|
245
|
+
push + pop (c_dheap) 7.452M i/s - 14.981M times in 2.010401s (134.20ns/i, 367clocks/i)
|
246
|
+
Calculating -------------------------------------
|
247
|
+
push + pop (findmin) 1.548M i/s - 9.051M times in 5.844950s (645.81ns/i)
|
248
|
+
push + pop (bsearch) 2.257M i/s - 12.896M times in 5.713856s (443.06ns/i)
|
249
|
+
push + pop (rb_heap) 1.220M i/s - 6.867M times in 5.628146s (819.63ns/i)
|
250
|
+
push + pop (c++ stl) 6.578M i/s - 35.384M times in 5.379298s (152.03ns/i, 399clocks/i)
|
251
|
+
push + pop (c_dheap) 8.225M i/s - 44.711M times in 5.435966s (121.58ns/i, 327clocks/i)
|
252
|
+
|
253
|
+
Comparison:
|
254
|
+
push + pop (c_dheap): 8225038.0 i/s
|
255
|
+
push + pop (c++ stl): 6577756.8 i/s - 1.25x slower
|
256
|
+
push + pop (bsearch): 2257028.3 i/s - 3.64x slower
|
257
|
+
push + pop (findmin): 1548450.8 i/s - 5.31x slower
|
258
|
+
push + pop (rb_heap): 1220067.2 i/s - 6.74x slower
|
259
|
+
|
260
|
+
################################################################################
|
261
|
+
# Benchmarks with N=1365 (t=10sec/benchmark)
|
262
|
+
################################################################################
|
263
|
+
|
264
|
+
== push N (N=1365) ============================================================
|
265
|
+
Warming up --------------------------------------
|
266
|
+
push N (bsearch) 1.394k i/s - 2.898k times in 2.079633s (717.61μs/i)
|
267
|
+
push N (rb_heap) 2.943k i/s - 5.920k times in 2.011565s (339.79μs/i)
|
268
|
+
push N (c++ stl) 5.621k i/s - 11.676k times in 2.077224s (177.91μs/i)
|
269
|
+
push N (c_dheap) 7.425k i/s - 15.582k times in 2.098509s (134.68μs/i)
|
270
|
+
Calculating -------------------------------------
|
271
|
+
push N (bsearch) 1.346k i/s - 8.361k times in 6.211667s (742.93μs/i)
|
272
|
+
push N (rb_heap) 2.908k i/s - 17.657k times in 6.072601s (343.92μs/i)
|
273
|
+
push N (c++ stl) 5.812k i/s - 33.725k times in 5.802474s (172.05μs/i)
|
274
|
+
push N (c_dheap) 7.406k i/s - 44.551k times in 6.015756s (135.03μs/i)
|
275
|
+
|
276
|
+
Comparison:
|
277
|
+
push N (c_dheap): 7405.7 i/s
|
278
|
+
push N (c++ stl): 5812.2 i/s - 1.27x slower
|
279
|
+
push N (rb_heap): 2907.7 i/s - 2.55x slower
|
280
|
+
push N (bsearch): 1346.0 i/s - 5.50x slower
|
281
|
+
|
282
|
+
== push N then pop N (N=1365) ==================================================
|
283
|
+
Warming up --------------------------------------
|
284
|
+
push N + pop N (findmin) 189.039 i/s - 380.000 times in 2.010168s (5.29ms/i)
|
285
|
+
push N + pop N (bsearch) 1.275k i/s - 2.667k times in 2.091317s (784.15μs/i)
|
286
|
+
push N + pop N (rb_heap) 629.327 i/s - 1.260k times in 2.002137s (1.59ms/i)
|
287
|
+
push N + pop N (c++ stl) 3.083k i/s - 6.280k times in 2.036843s (324.34μs/i)
|
288
|
+
push N + pop N (c_dheap) 3.434k i/s - 6.880k times in 2.003496s (291.21μs/i)
|
289
|
+
Calculating -------------------------------------
|
290
|
+
push N + pop N (findmin) 195.665 i/s - 1.134k times in 5.795620s (5.11ms/i)
|
291
|
+
push N + pop N (bsearch) 1.177k i/s - 7.651k times in 6.501332s (849.74μs/i)
|
292
|
+
push N + pop N (rb_heap) 624.066 i/s - 3.775k times in 6.049040s (1.60ms/i)
|
293
|
+
push N + pop N (c++ stl) 3.105k i/s - 18.499k times in 5.958037s (322.07μs/i)
|
294
|
+
push N + pop N (c_dheap) 3.475k i/s - 20.603k times in 5.928992s (287.77μs/i)
|
295
|
+
|
296
|
+
Comparison:
|
297
|
+
push N + pop N (c_dheap): 3475.0 i/s
|
298
|
+
push N + pop N (c++ stl): 3104.9 i/s - 1.12x slower
|
299
|
+
push N + pop N (bsearch): 1176.8 i/s - 2.95x slower
|
300
|
+
push N + pop N (rb_heap): 624.1 i/s - 5.57x slower
|
301
|
+
push N + pop N (findmin): 195.7 i/s - 17.76x slower
|
302
|
+
|
303
|
+
== Push/pop with pre-filled queue (size=N) (N=1365) ============================
|
304
|
+
Warming up --------------------------------------
|
305
|
+
push + pop (findmin) 496.816k i/s - 1.028M times in 2.069729s (2.01μs/i)
|
306
|
+
push + pop (bsearch) 1.964M i/s - 3.956M times in 2.014551s (509.28ns/i)
|
307
|
+
push + pop (rb_heap) 1.043M i/s - 2.150M times in 2.061288s (958.58ns/i)
|
308
|
+
push + pop (c++ stl) 5.289M i/s - 10.720M times in 2.026911s (189.07ns/i, 346clocks/i)
|
309
|
+
push + pop (c_dheap) 6.890M i/s - 13.979M times in 2.029039s (145.15ns/i, 411clocks/i)
|
310
|
+
Calculating -------------------------------------
|
311
|
+
push + pop (findmin) 498.357k i/s - 2.981M times in 5.981452s (2.01μs/i)
|
312
|
+
push + pop (bsearch) 2.016M i/s - 11.781M times in 5.844338s (496.07ns/i)
|
313
|
+
push + pop (rb_heap) 1.056M i/s - 6.259M times in 5.926221s (946.80ns/i)
|
314
|
+
push + pop (c++ stl) 6.149M i/s - 31.734M times in 5.160646s (162.62ns/i, 357clocks/i)
|
315
|
+
push + pop (c_dheap) 7.240M i/s - 41.337M times in 5.709252s (138.11ns/i, 365clocks/i)
|
316
|
+
|
317
|
+
Comparison:
|
318
|
+
push + pop (c_dheap): 7240436.4 i/s
|
319
|
+
push + pop (c++ stl): 6149299.4 i/s - 1.18x slower
|
320
|
+
push + pop (bsearch): 2015850.6 i/s - 3.59x slower
|
321
|
+
push + pop (rb_heap): 1056192.6 i/s - 6.86x slower
|
322
|
+
push + pop (findmin): 498356.6 i/s - 14.53x slower
|
323
|
+
|
324
|
+
################################################################################
|
325
|
+
# Benchmarks with N=5461 (t=10sec/benchmark)
|
326
|
+
################################################################################
|
327
|
+
|
328
|
+
== push N (N=5461) ============================================================
|
329
|
+
Warming up --------------------------------------
|
330
|
+
push N (bsearch) 269.520 i/s - 560.000 times in 2.077767s (3.71ms/i)
|
331
|
+
push N (rb_heap) 717.703 i/s - 1.440k times in 2.006402s (1.39ms/i)
|
332
|
+
push N (c++ stl) 1.462k i/s - 3.045k times in 2.082734s (683.99μs/i)
|
333
|
+
push N (c_dheap) 1.823k i/s - 3.780k times in 2.073303s (548.49μs/i)
|
334
|
+
Calculating -------------------------------------
|
335
|
+
push N (bsearch) 258.932 i/s - 1.617k times in 6.244873s (3.86ms/i)
|
336
|
+
push N (rb_heap) 723.029 i/s - 4.306k times in 5.955502s (1.38ms/i)
|
337
|
+
push N (c++ stl) 1.407k i/s - 8.772k times in 6.235747s (710.87μs/i)
|
338
|
+
push N (c_dheap) 1.853k i/s - 10.939k times in 5.904004s (539.72μs/i)
|
339
|
+
|
340
|
+
Comparison:
|
341
|
+
push N (c_dheap): 1852.8 i/s
|
342
|
+
push N (c++ stl): 1406.7 i/s - 1.32x slower
|
343
|
+
push N (rb_heap): 723.0 i/s - 2.56x slower
|
344
|
+
push N (bsearch): 258.9 i/s - 7.16x slower
|
345
|
+
|
346
|
+
== push N then pop N (N=5461) ==================================================
|
347
|
+
Warming up --------------------------------------
|
348
|
+
push N + pop N (findmin) 12.207 i/s - 26.000 times in 2.129850s (81.92ms/i)
|
349
|
+
push N + pop N (bsearch) 251.139 i/s - 525.000 times in 2.090473s (3.98ms/i)
|
350
|
+
push N + pop N (rb_heap) 137.157 i/s - 280.000 times in 2.041453s (7.29ms/i)
|
351
|
+
push N + pop N (c++ stl) 724.325 i/s - 1.460k times in 2.015670s (1.38ms/i)
|
352
|
+
push N + pop N (c_dheap) 794.655 i/s - 1.600k times in 2.013452s (1.26ms/i)
|
353
|
+
Calculating -------------------------------------
|
354
|
+
push N + pop N (findmin) 12.381 i/s - 73.000 times in 5.896102s (80.77ms/i)
|
355
|
+
push N + pop N (bsearch) 249.090 i/s - 1.506k times in 6.046014s (4.01ms/i)
|
356
|
+
push N + pop N (rb_heap) 136.820 i/s - 822.000 times in 6.007880s (7.31ms/i)
|
357
|
+
push N + pop N (c++ stl) 699.853 i/s - 4.345k times in 6.208445s (1.43ms/i)
|
358
|
+
push N + pop N (c_dheap) 779.676 i/s - 4.767k times in 6.114082s (1.28ms/i)
|
359
|
+
|
360
|
+
Comparison:
|
361
|
+
push N + pop N (c_dheap): 779.7 i/s
|
362
|
+
push N + pop N (c++ stl): 699.9 i/s - 1.11x slower
|
363
|
+
push N + pop N (bsearch): 249.1 i/s - 3.13x slower
|
364
|
+
push N + pop N (rb_heap): 136.8 i/s - 5.70x slower
|
365
|
+
push N + pop N (findmin): 12.4 i/s - 62.97x slower
|
366
|
+
|
367
|
+
== Push/pop with pre-filled queue (size=N) (N=5461) ============================
|
368
|
+
Warming up --------------------------------------
|
369
|
+
push + pop (findmin) 122.350k i/s - 245.280k times in 2.004736s (8.17μs/i)
|
370
|
+
push + pop (bsearch) 1.778M i/s - 3.633M times in 2.043729s (562.57ns/i)
|
371
|
+
push + pop (rb_heap) 918.753k i/s - 1.850M times in 2.013237s (1.09μs/i)
|
372
|
+
push + pop (c++ stl) 5.000M i/s - 10.088M times in 2.017440s (199.99ns/i, 445clocks/i)
|
373
|
+
push + pop (c_dheap) 6.520M i/s - 13.190M times in 2.023137s (153.39ns/i, 427clocks/i)
|
374
|
+
Calculating -------------------------------------
|
375
|
+
push + pop (findmin) 120.450k i/s - 734.101k times in 6.094657s (8.30μs/i)
|
376
|
+
push + pop (bsearch) 1.799M i/s - 10.665M times in 5.928598s (555.87ns/i)
|
377
|
+
push + pop (rb_heap) 870.024k i/s - 5.513M times in 6.336058s (1.15μs/i)
|
378
|
+
push + pop (c++ stl) 5.594M i/s - 30.001M times in 5.363045s (178.76ns/i, 451clocks/i)
|
379
|
+
push + pop (c_dheap) 6.991M i/s - 39.117M times in 5.595561s (143.05ns/i, 373clocks/i)
|
380
|
+
|
381
|
+
Comparison:
|
382
|
+
push + pop (c_dheap): 6990729.5 i/s
|
383
|
+
push + pop (c++ stl): 5594102.7 i/s - 1.25x slower
|
384
|
+
push + pop (bsearch): 1798974.6 i/s - 3.89x slower
|
385
|
+
push + pop (rb_heap): 870023.6 i/s - 8.04x slower
|
386
|
+
push + pop (findmin): 120449.9 i/s - 58.04x slower
|
387
|
+
|
388
|
+
################################################################################
|
389
|
+
# Benchmarks with N=21845 (t=10sec/benchmark)
|
390
|
+
################################################################################
|
391
|
+
|
392
|
+
== push N (N=21845) ============================================================
|
393
|
+
Warming up --------------------------------------
|
394
|
+
push N (bsearch) 29.500 i/s - 60.000 times in 2.033920s (33.90ms/i)
|
395
|
+
push N (rb_heap) 180.110 i/s - 378.000 times in 2.098720s (5.55ms/i)
|
396
|
+
push N (c++ stl) 341.267 i/s - 700.000 times in 2.051181s (2.93ms/i)
|
397
|
+
push N (c_dheap) 452.850 i/s - 920.000 times in 2.031579s (2.21ms/i)
|
398
|
+
Calculating -------------------------------------
|
399
|
+
push N (bsearch) 34.825 i/s - 176.000 times in 5.053771s (28.71ms/i)
|
400
|
+
push N (rb_heap) 178.444 i/s - 1.080k times in 6.052328s (5.60ms/i)
|
401
|
+
push N (c++ stl) 339.996 i/s - 2.047k times in 6.020652s (2.94ms/i)
|
402
|
+
push N (c_dheap) 471.606 i/s - 2.717k times in 5.761168s (2.12ms/i)
|
403
|
+
|
404
|
+
Comparison:
|
405
|
+
push N (c_dheap): 471.6 i/s
|
406
|
+
push N (c++ stl): 340.0 i/s - 1.39x slower
|
407
|
+
push N (rb_heap): 178.4 i/s - 2.64x slower
|
408
|
+
push N (bsearch): 34.8 i/s - 13.54x slower
|
409
|
+
|
410
|
+
== push N then pop N (N=21845) ================================================
|
411
|
+
Warming up --------------------------------------
|
412
|
+
push N + pop N (findmin) 0.779 i/s - 2.000 times in 2.567523s (1.28s/i)
|
413
|
+
push N + pop N (bsearch) 34.097 i/s - 72.000 times in 2.111648s (29.33ms/i)
|
414
|
+
push N + pop N (rb_heap) 30.004 i/s - 63.000 times in 2.099747s (33.33ms/i)
|
415
|
+
push N + pop N (c++ stl) 162.161 i/s - 340.000 times in 2.096682s (6.17ms/i)
|
416
|
+
push N + pop N (c_dheap) 174.422 i/s - 360.000 times in 2.063954s (5.73ms/i)
|
417
|
+
Calculating -------------------------------------
|
418
|
+
push N + pop N (findmin) 0.778 i/s - 4.000 times in 5.144549s (1.29s/i)
|
419
|
+
push N + pop N (bsearch) 32.991 i/s - 204.000 times in 6.183540s (30.31ms/i)
|
420
|
+
push N + pop N (rb_heap) 29.347 i/s - 180.000 times in 6.133559s (34.08ms/i)
|
421
|
+
push N + pop N (c++ stl) 164.692 i/s - 972.000 times in 5.901925s (6.07ms/i)
|
422
|
+
push N + pop N (c_dheap) 171.201 i/s - 1.046k times in 6.109760s (5.84ms/i)
|
423
|
+
|
424
|
+
Comparison:
|
425
|
+
push N + pop N (c_dheap): 171.2 i/s
|
426
|
+
push N + pop N (c++ stl): 164.7 i/s - 1.04x slower
|
427
|
+
push N + pop N (bsearch): 33.0 i/s - 5.19x slower
|
428
|
+
push N + pop N (rb_heap): 29.3 i/s - 5.83x slower
|
429
|
+
push N + pop N (findmin): 0.8 i/s - 220.19x slower
|
430
|
+
|
431
|
+
== Push/pop with pre-filled queue (size=N) (N=21845) ==========================
|
432
|
+
Warming up --------------------------------------
|
433
|
+
push + pop (findmin) 9.674k i/s - 19.701k times in 2.036569s (103.37μs/i)
|
434
|
+
push + pop (bsearch) 1.565M i/s - 3.181M times in 2.032390s (638.93ns/i)
|
435
|
+
push + pop (rb_heap) 830.840k i/s - 1.701M times in 2.047922s (1.20μs/i)
|
436
|
+
push + pop (c++ stl) 4.606M i/s - 9.338M times in 2.027286s (217.11ns/i, 525clocks/i)
|
437
|
+
push + pop (c_dheap) 5.854M i/s - 11.791M times in 2.014052s (170.81ns/i, 453clocks/i)
|
438
|
+
Calculating -------------------------------------
|
439
|
+
push + pop (findmin) 11.522k i/s - 58.041k times in 5.037203s (86.79μs/i)
|
440
|
+
push + pop (bsearch) 1.528M i/s - 9.391M times in 6.144507s (654.32ns/i)
|
441
|
+
push + pop (rb_heap) 802.621k i/s - 4.985M times in 6.210948s (1.25μs/i)
|
442
|
+
push + pop (c++ stl) 4.959M i/s - 27.636M times in 5.573344s (201.67ns/i, 561clocks/i)
|
443
|
+
push + pop (c_dheap) 6.275M i/s - 35.126M times in 5.597394s (159.35ns/i, 421clocks/i)
|
444
|
+
|
445
|
+
Comparison:
|
446
|
+
push + pop (c_dheap): 6275438.5 i/s
|
447
|
+
push + pop (c++ stl): 4958577.7 i/s - 1.27x slower
|
448
|
+
push + pop (bsearch): 1528297.6 i/s - 4.11x slower
|
449
|
+
push + pop (rb_heap): 802621.5 i/s - 7.82x slower
|
450
|
+
push + pop (findmin): 11522.5 i/s - 544.63x slower
|
451
|
+
|
452
|
+
################################################################################
|
453
|
+
# Benchmarks with N=87381 (t=10sec/benchmark)
|
454
|
+
################################################################################
|
455
|
+
|
456
|
+
== push N (N=87381) ============================================================
|
457
|
+
Warming up --------------------------------------
|
458
|
+
push N (bsearch) 2.860 i/s - 6.000 times in 2.097866s (349.64ms/i)
|
459
|
+
push N (rb_heap) 44.082 i/s - 90.000 times in 2.041662s (22.69ms/i)
|
460
|
+
push N (c++ stl) 87.951 i/s - 180.000 times in 2.046591s (11.37ms/i)
|
461
|
+
push N (c_dheap) 114.586 i/s - 240.000 times in 2.094502s (8.73ms/i)
|
462
|
+
Calculating -------------------------------------
|
463
|
+
push N (bsearch) 2.876 i/s - 17.000 times in 5.910605s (347.68ms/i)
|
464
|
+
push N (rb_heap) 44.019 i/s - 264.000 times in 5.997408s (22.72ms/i)
|
465
|
+
push N (c++ stl) 79.328 i/s - 527.000 times in 6.643283s (12.61ms/i)
|
466
|
+
push N (c_dheap) 115.006 i/s - 687.000 times in 5.973623s (8.70ms/i)
|
467
|
+
|
468
|
+
Comparison:
|
469
|
+
push N (c_dheap): 115.0 i/s
|
470
|
+
push N (c++ stl): 79.3 i/s - 1.45x slower
|
471
|
+
push N (rb_heap): 44.0 i/s - 2.61x slower
|
472
|
+
push N (bsearch): 2.9 i/s - 39.99x slower
|
473
|
+
|
474
|
+
== push N then pop N (N=87381) ================================================
|
475
|
+
Warming up --------------------------------------
|
476
|
+
push N + pop N (findmin)0.0 i/s - 0.0 times in 15.004015s (Infs/i)
|
477
|
+
push N + pop N (bsearch) 2.818 i/s - 6.000 times in 2.129230s (354.87ms/i)
|
478
|
+
push N + pop N (rb_heap) 6.587 i/s - 14.000 times in 2.125416s (151.82ms/i)
|
479
|
+
push N + pop N (c++ stl) 38.095 i/s - 80.000 times in 2.100037s (26.25ms/i)
|
480
|
+
push N + pop N (c_dheap) 39.934 i/s - 80.000 times in 2.003287s (25.04ms/i)
|
481
|
+
Calculating -------------------------------------
|
482
|
+
push N + pop N (findmin)0.0 i/s - 0.0 times in 15.004015s (Infs/i)
|
483
|
+
push N + pop N (bsearch) 2.905 i/s - 16.000 times in 5.507260s (344.20ms/i)
|
484
|
+
push N + pop N (rb_heap) 6.675 i/s - 39.000 times in 5.843054s (149.82ms/i)
|
485
|
+
push N + pop N (c++ stl) 38.576 i/s - 228.000 times in 5.910361s (25.92ms/i)
|
486
|
+
push N + pop N (c_dheap) 39.508 i/s - 239.000 times in 6.049426s (25.31ms/i)
|
487
|
+
|
488
|
+
Comparison:
|
489
|
+
push N + pop N (c_dheap): 39.5 i/s
|
490
|
+
push N + pop N (c++ stl): 38.6 i/s - 1.02x slower
|
491
|
+
push N + pop N (rb_heap): 6.7 i/s - 5.92x slower
|
492
|
+
push N + pop N (bsearch): 2.9 i/s - 13.60x slower
|
493
|
+
push N + pop N (findmin): 0.0 i/s - Infx slower
|
494
|
+
|
495
|
+
== Push/pop with pre-filled queue (size=N) (N=87381) ==========================
|
496
|
+
Warming up --------------------------------------
|
497
|
+
push + pop (findmin) 1.301k i/s - 2.646k times in 2.033177s (768.40μs/i)
|
498
|
+
push + pop (bsearch) 399.722k i/s - 802.368k times in 2.007313s (2.50μs/i)
|
499
|
+
push + pop (rb_heap) 693.504k i/s - 1.416M times in 2.042452s (1.44μs/i)
|
500
|
+
push + pop (c++ stl) 3.984M i/s - 7.970M times in 2.000250s (250.98ns/i, 578clocks/i)
|
501
|
+
push + pop (c_dheap) 5.101M i/s - 10.348M times in 2.028583s (196.05ns/i, 321clocks/i)
|
502
|
+
Calculating -------------------------------------
|
503
|
+
push + pop (findmin) 1.305k i/s - 7.808k times in 5.983727s (766.36μs/i)
|
504
|
+
push + pop (bsearch) 516.666k i/s - 2.398M times in 4.641947s (1.94μs/i)
|
505
|
+
push + pop (rb_heap) 695.029k i/s - 4.161M times in 5.986830s (1.44μs/i)
|
506
|
+
push + pop (c++ stl) 4.478M i/s - 23.906M times in 5.338832s (223.32ns/i, 577clocks/i)
|
507
|
+
push + pop (c_dheap) 5.968M i/s - 30.605M times in 5.128099s (167.56ns/i, 426clocks/i)
|
508
|
+
|
509
|
+
Comparison:
|
510
|
+
push + pop (c_dheap): 5968137.3 i/s
|
511
|
+
push + pop (c++ stl): 4477815.8 i/s - 1.33x slower
|
512
|
+
push + pop (rb_heap): 695029.1 i/s - 8.59x slower
|
513
|
+
push + pop (bsearch): 516665.5 i/s - 11.55x slower
|
514
|
+
push + pop (findmin): 1304.9 i/s - 4573.73x slower
|
515
|
+
|