d_heap 0.2.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|