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.
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 :build => :compile
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 :default => [:clobber, :compile, :spec]
20
+ task default: %i[clobber compile spec rubocop]
@@ -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
@@ -0,0 +1,7 @@
1
+ #!/bin/sh
2
+ set -eu
3
+
4
+ export BENCH_N="$1"
5
+ shift
6
+
7
+ exec ruby "$@"
@@ -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")
@@ -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
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bundler/setup"
4
5
  require "d_heap"
@@ -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
@@ -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")
@@ -1,4 +1,6 @@
1
- require_relative 'lib/d_heap/version'
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 = %q{A d-ary heap implementation, for priority queues}
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 = Dir.chdir(File.expand_path('..', __FILE__)) do
25
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
- end
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/}) { |f| File.basename(f) }
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
+
@@ -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
+