d_heap 0.4.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/CHANGELOG.md +19 -2
- data/Gemfile +4 -0
- data/Gemfile.lock +7 -1
- data/README.md +131 -107
- data/benchmarks/perf.rb +29 -0
- data/benchmarks/push_n.yml +6 -3
- data/benchmarks/push_n_pop_n.yml +4 -0
- data/benchmarks/push_pop.yml +6 -3
- data/benchmarks/stackprof.rb +31 -0
- data/docs/benchmarks-2.txt +63 -40
- data/docs/benchmarks-mem.txt +39 -0
- data/docs/benchmarks.txt +337 -265
- data/ext/d_heap/d_heap.c +202 -304
- data/ext/d_heap/d_heap.h +10 -4
- data/ext/d_heap/extconf.rb +8 -1
- data/lib/d_heap.rb +24 -0
- data/lib/d_heap/benchmarks.rb +2 -1
- data/lib/d_heap/benchmarks/benchmarker.rb +3 -0
- data/lib/d_heap/benchmarks/implementations.rb +86 -32
- data/lib/d_heap/version.rb +1 -1
- metadata +5 -2
data/benchmarks/push_n_pop_n.yml
CHANGED
@@ -6,6 +6,7 @@ prelude: |
|
|
6
6
|
fill_random_vals
|
7
7
|
|
8
8
|
n = ENV.fetch("BENCH_N", 1000).to_i
|
9
|
+
|
9
10
|
i = 0
|
10
11
|
|
11
12
|
benchmark:
|
@@ -26,6 +27,9 @@ benchmark:
|
|
26
27
|
- script: *script
|
27
28
|
name: "push N + pop N (rb_heap)"
|
28
29
|
prelude: "q = initq RbHeap"
|
30
|
+
- script: *script
|
31
|
+
name: "push N + pop N (c++ stl)"
|
32
|
+
prelude: "q = initq CppSTL"
|
29
33
|
- script: *script
|
30
34
|
name: "push N + pop N (c_dheap)"
|
31
35
|
prelude: "q = initq DHeap"
|
data/benchmarks/push_pop.yml
CHANGED
@@ -12,13 +12,16 @@ benchmark:
|
|
12
12
|
q << random_val
|
13
13
|
q.pop
|
14
14
|
name: "push + pop (findmin)"
|
15
|
-
prelude: "q =
|
15
|
+
prelude: "q = FindMin.new(n) { random_val }"
|
16
16
|
- script: *script
|
17
17
|
name: "push + pop (bsearch)"
|
18
|
-
prelude: "q =
|
18
|
+
prelude: "q = BSearch.new(n) { random_val }"
|
19
19
|
- script: *script
|
20
20
|
name: "push + pop (rb_heap)"
|
21
|
-
prelude: "q =
|
21
|
+
prelude: "q = RbHeap.new(n) { random_val }"
|
22
|
+
- script: *script
|
23
|
+
name: "push + pop (c++ stl)"
|
24
|
+
prelude: "q = initq CppSTL, n"
|
22
25
|
- script: *script
|
23
26
|
name: "push + pop (c_dheap)"
|
24
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/docs/benchmarks-2.txt
CHANGED
@@ -1,52 +1,75 @@
|
|
1
|
-
Benchmarking run at 2021-01-11 23:29:03 -0500
|
2
|
-
ruby v2.7.2, DHeap v0.4.0
|
3
|
-
|
4
1
|
Warming up --------------------------------------
|
5
|
-
push + pop (findmin)
|
6
|
-
push + pop (bsearch)
|
7
|
-
push + pop (rb_heap)
|
8
|
-
push + pop (
|
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)
|
9
7
|
Calculating -------------------------------------
|
10
|
-
bin/bench_n
|
11
|
-
push + pop (findmin)
|
12
|
-
push + pop (bsearch)
|
13
|
-
push + pop (rb_heap)
|
14
|
-
push + pop (
|
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
|
15
14
|
|
16
15
|
Comparison:
|
17
16
|
push + pop (findmin)
|
18
|
-
bin/bench_n
|
19
|
-
bin/bench_n
|
20
|
-
bin/bench_n
|
21
|
-
|
22
|
-
bin/bench_n
|
23
|
-
bin/bench_n
|
24
|
-
|
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
|
25
27
|
|
26
28
|
push + pop (bsearch)
|
27
|
-
bin/bench_n
|
28
|
-
bin/bench_n
|
29
|
-
bin/bench_n
|
30
|
-
|
31
|
-
bin/bench_n
|
32
|
-
bin/bench_n
|
33
|
-
|
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
|
34
39
|
|
35
40
|
push + pop (rb_heap)
|
36
|
-
bin/bench_n
|
37
|
-
bin/bench_n
|
38
|
-
bin/bench_n
|
39
|
-
bin/bench_n
|
40
|
-
|
41
|
-
bin/bench_n
|
42
|
-
|
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
|
43
63
|
|
44
64
|
push + pop (c_dheap)
|
45
|
-
bin/bench_n
|
46
|
-
bin/bench_n
|
47
|
-
bin/bench_n
|
48
|
-
|
49
|
-
bin/bench_n
|
50
|
-
bin/bench_n
|
51
|
-
|
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
|
52
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
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
Benchmarking run at 2021-01-
|
2
|
-
ruby v2.7.2, DHeap v0.
|
1
|
+
Benchmarking run at 2021-01-17 17:17:24 -0500
|
2
|
+
ruby v2.7.2, DHeap v0.5.0
|
3
3
|
|
4
4
|
################################################################################
|
5
5
|
# Benchmarks with N=5 (t=10sec/benchmark)
|
@@ -7,54 +7,63 @@ ruby v2.7.2, DHeap v0.4.0
|
|
7
7
|
|
8
8
|
== push N (N=5) ================================================================
|
9
9
|
Warming up --------------------------------------
|
10
|
-
push N (bsearch)
|
11
|
-
push N (rb_heap)
|
12
|
-
push N (
|
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)
|
13
14
|
Calculating -------------------------------------
|
14
|
-
push N (bsearch)
|
15
|
-
push N (rb_heap)
|
16
|
-
push N (
|
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)
|
17
19
|
|
18
20
|
Comparison:
|
19
|
-
push N (c_dheap):
|
20
|
-
push N (
|
21
|
-
push N (
|
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
|
22
25
|
|
23
26
|
== push N then pop N (N=5) ====================================================
|
24
27
|
Warming up --------------------------------------
|
25
|
-
push N + pop N (findmin)
|
26
|
-
push N + pop N (bsearch)
|
27
|
-
push N + pop N (rb_heap)
|
28
|
-
push N + pop N (
|
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)
|
29
33
|
Calculating -------------------------------------
|
30
|
-
push N + pop N (findmin)
|
31
|
-
push N + pop N (bsearch)
|
32
|
-
push N + pop N (rb_heap)
|
33
|
-
push N + pop N (
|
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)
|
34
39
|
|
35
40
|
Comparison:
|
36
|
-
push N + pop N (c_dheap):
|
37
|
-
push N + pop N (
|
38
|
-
push N + pop N (
|
39
|
-
push N + pop N (
|
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
|
40
46
|
|
41
47
|
== Push/pop with pre-filled queue (size=N) (N=5) ==============================
|
42
48
|
Warming up --------------------------------------
|
43
|
-
push + pop (findmin) 5.
|
44
|
-
push + pop (bsearch) 4.
|
45
|
-
push + pop (rb_heap) 2.
|
46
|
-
push + pop (
|
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)
|
47
54
|
Calculating -------------------------------------
|
48
|
-
push + pop (findmin) 5.
|
49
|
-
push + pop (bsearch) 4.
|
50
|
-
push + pop (rb_heap) 2.
|
51
|
-
push + pop (
|
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)
|
52
60
|
|
53
61
|
Comparison:
|
54
|
-
push + pop (c_dheap):
|
55
|
-
push + pop (
|
56
|
-
push + pop (
|
57
|
-
push + pop (
|
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
|
58
67
|
|
59
68
|
################################################################################
|
60
69
|
# Benchmarks with N=21 (t=10sec/benchmark)
|
@@ -62,54 +71,63 @@ push + pop (rb_heap): 2207042.0 i/s - 2.50x slower
|
|
62
71
|
|
63
72
|
== push N (N=21) ==============================================================
|
64
73
|
Warming up --------------------------------------
|
65
|
-
push N (bsearch)
|
66
|
-
push N (rb_heap)
|
67
|
-
push N (
|
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)
|
68
78
|
Calculating -------------------------------------
|
69
|
-
push N (bsearch)
|
70
|
-
push N (rb_heap)
|
71
|
-
push N (
|
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)
|
72
83
|
|
73
84
|
Comparison:
|
74
|
-
push N (c_dheap):
|
75
|
-
push N (
|
76
|
-
push N (
|
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
|
77
89
|
|
78
90
|
== push N then pop N (N=21) ====================================================
|
79
91
|
Warming up --------------------------------------
|
80
|
-
push N + pop N (findmin)
|
81
|
-
push N + pop N (bsearch)
|
82
|
-
push N + pop N (rb_heap)
|
83
|
-
push N + pop N (
|
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)
|
84
97
|
Calculating -------------------------------------
|
85
|
-
push N + pop N (findmin)
|
86
|
-
push N + pop N (bsearch)
|
87
|
-
push N + pop N (rb_heap)
|
88
|
-
push N + pop N (
|
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)
|
89
103
|
|
90
104
|
Comparison:
|
91
|
-
push N + pop N (c_dheap):
|
92
|
-
push N + pop N (
|
93
|
-
push N + pop N (
|
94
|
-
push N + pop N (
|
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
|
95
110
|
|
96
111
|
== Push/pop with pre-filled queue (size=N) (N=21) ==============================
|
97
112
|
Warming up --------------------------------------
|
98
|
-
push + pop (findmin) 4.
|
99
|
-
push + pop (bsearch) 3.
|
100
|
-
push + pop (rb_heap) 1.
|
101
|
-
push + pop (
|
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)
|
102
118
|
Calculating -------------------------------------
|
103
|
-
push + pop (findmin) 4.
|
104
|
-
push + pop (bsearch) 3.
|
105
|
-
push + pop (rb_heap) 1.
|
106
|
-
push + pop (
|
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)
|
107
124
|
|
108
125
|
Comparison:
|
109
|
-
push + pop (c_dheap):
|
110
|
-
push + pop (
|
111
|
-
push + pop (
|
112
|
-
push + pop (
|
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
|
113
131
|
|
114
132
|
################################################################################
|
115
133
|
# Benchmarks with N=85 (t=10sec/benchmark)
|
@@ -117,54 +135,63 @@ push + pop (rb_heap): 1560476.3 i/s - 3.10x slower
|
|
117
135
|
|
118
136
|
== push N (N=85) ==============================================================
|
119
137
|
Warming up --------------------------------------
|
120
|
-
push N (bsearch) 33.
|
121
|
-
push N (rb_heap)
|
122
|
-
push N (
|
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)
|
123
142
|
Calculating -------------------------------------
|
124
|
-
push N (bsearch)
|
125
|
-
push N (rb_heap)
|
126
|
-
push N (
|
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)
|
127
147
|
|
128
148
|
Comparison:
|
129
|
-
push N (c_dheap):
|
130
|
-
push N (
|
131
|
-
push N (
|
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
|
132
153
|
|
133
154
|
== push N then pop N (N=85) ====================================================
|
134
155
|
Warming up --------------------------------------
|
135
|
-
push N + pop N (findmin)
|
136
|
-
push N + pop N (bsearch)
|
137
|
-
push N + pop N (rb_heap)
|
138
|
-
push N + pop N (
|
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)
|
139
161
|
Calculating -------------------------------------
|
140
|
-
push N + pop N (findmin) 27.
|
141
|
-
push N + pop N (bsearch) 29.
|
142
|
-
push N + pop N (rb_heap)
|
143
|
-
push N + pop N (
|
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)
|
144
167
|
|
145
168
|
Comparison:
|
146
|
-
push N + pop N (c_dheap):
|
147
|
-
push N + pop N (
|
148
|
-
push N + pop N (
|
149
|
-
push N + pop N (
|
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
|
150
174
|
|
151
175
|
== Push/pop with pre-filled queue (size=N) (N=85) ==============================
|
152
176
|
Warming up --------------------------------------
|
153
|
-
push + pop (findmin) 3.
|
154
|
-
push + pop (bsearch) 2.
|
155
|
-
push + pop (rb_heap) 1.
|
156
|
-
push + pop (
|
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)
|
157
182
|
Calculating -------------------------------------
|
158
|
-
push + pop (findmin) 3.
|
159
|
-
push + pop (bsearch) 2.
|
160
|
-
push + pop (rb_heap) 1.
|
161
|
-
push + pop (
|
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)
|
162
188
|
|
163
189
|
Comparison:
|
164
|
-
push + pop (c_dheap):
|
165
|
-
push + pop (
|
166
|
-
push + pop (
|
167
|
-
push + pop (
|
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
|
168
195
|
|
169
196
|
################################################################################
|
170
197
|
# Benchmarks with N=341 (t=10sec/benchmark)
|
@@ -172,54 +199,63 @@ push + pop (rb_heap): 1218828.1 i/s - 3.54x slower
|
|
172
199
|
|
173
200
|
== push N (N=341) ==============================================================
|
174
201
|
Warming up --------------------------------------
|
175
|
-
push N (bsearch) 6.
|
176
|
-
push N (rb_heap) 11.
|
177
|
-
push N (
|
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)
|
178
206
|
Calculating -------------------------------------
|
179
|
-
push N (bsearch) 6.
|
180
|
-
push N (rb_heap) 11.
|
181
|
-
push N (
|
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)
|
182
211
|
|
183
212
|
Comparison:
|
184
|
-
push N (c_dheap):
|
185
|
-
push N (
|
186
|
-
push N (
|
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
|
187
217
|
|
188
218
|
== push N then pop N (N=341) ==================================================
|
189
219
|
Warming up --------------------------------------
|
190
|
-
push N + pop N (findmin) 3.
|
191
|
-
push N + pop N (bsearch)
|
192
|
-
push N + pop N (rb_heap)
|
193
|
-
push N + pop N (
|
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)
|
194
225
|
Calculating -------------------------------------
|
195
|
-
push N + pop N (findmin)
|
196
|
-
push N + pop N (bsearch)
|
197
|
-
push N + pop N (rb_heap)
|
198
|
-
push N + pop N (
|
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)
|
199
231
|
|
200
232
|
Comparison:
|
201
|
-
push N + pop N (c_dheap):
|
202
|
-
push N + pop N (
|
203
|
-
push N + pop N (
|
204
|
-
push N + pop N (
|
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
|
205
238
|
|
206
239
|
== Push/pop with pre-filled queue (size=N) (N=341) ============================
|
207
240
|
Warming up --------------------------------------
|
208
|
-
push + pop (findmin) 1.
|
209
|
-
push + pop (bsearch) 2.
|
210
|
-
push + pop (rb_heap)
|
211
|
-
push + pop (
|
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)
|
212
246
|
Calculating -------------------------------------
|
213
|
-
push + pop (findmin) 1.
|
214
|
-
push + pop (bsearch) 2.
|
215
|
-
push + pop (rb_heap)
|
216
|
-
push + pop (
|
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)
|
217
252
|
|
218
253
|
Comparison:
|
219
|
-
push + pop (c_dheap):
|
220
|
-
push + pop (
|
221
|
-
push + pop (
|
222
|
-
push + pop (
|
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
|
223
259
|
|
224
260
|
################################################################################
|
225
261
|
# Benchmarks with N=1365 (t=10sec/benchmark)
|
@@ -227,54 +263,63 @@ push + pop (rb_heap): 973051.6 i/s - 4.00x slower
|
|
227
263
|
|
228
264
|
== push N (N=1365) ============================================================
|
229
265
|
Warming up --------------------------------------
|
230
|
-
push N (bsearch) 1.
|
231
|
-
push N (rb_heap) 2.
|
232
|
-
push N (
|
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)
|
233
270
|
Calculating -------------------------------------
|
234
|
-
push N (bsearch) 1.
|
235
|
-
push N (rb_heap) 2.
|
236
|
-
push N (
|
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)
|
237
275
|
|
238
276
|
Comparison:
|
239
|
-
push N (c_dheap):
|
240
|
-
push N (
|
241
|
-
push N (
|
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
|
242
281
|
|
243
282
|
== push N then pop N (N=1365) ==================================================
|
244
283
|
Warming up --------------------------------------
|
245
|
-
push N + pop N (findmin)
|
246
|
-
push N + pop N (bsearch) 1.
|
247
|
-
push N + pop N (rb_heap)
|
248
|
-
push N + pop N (
|
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)
|
249
289
|
Calculating -------------------------------------
|
250
|
-
push N + pop N (findmin)
|
251
|
-
push N + pop N (bsearch) 1.
|
252
|
-
push N + pop N (rb_heap)
|
253
|
-
push N + pop N (
|
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)
|
254
295
|
|
255
296
|
Comparison:
|
256
|
-
push N + pop N (c_dheap):
|
257
|
-
push N + pop N (
|
258
|
-
push N + pop N (
|
259
|
-
push N + pop N (
|
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
|
260
302
|
|
261
303
|
== Push/pop with pre-filled queue (size=N) (N=1365) ============================
|
262
304
|
Warming up --------------------------------------
|
263
|
-
push + pop (findmin)
|
264
|
-
push + pop (bsearch) 1.
|
265
|
-
push + pop (rb_heap)
|
266
|
-
push + pop (
|
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)
|
267
310
|
Calculating -------------------------------------
|
268
|
-
push + pop (findmin)
|
269
|
-
push + pop (bsearch) 2.
|
270
|
-
push + pop (rb_heap)
|
271
|
-
push + pop (
|
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)
|
272
316
|
|
273
317
|
Comparison:
|
274
|
-
push + pop (c_dheap):
|
275
|
-
push + pop (
|
276
|
-
push + pop (
|
277
|
-
push + pop (
|
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
|
278
323
|
|
279
324
|
################################################################################
|
280
325
|
# Benchmarks with N=5461 (t=10sec/benchmark)
|
@@ -282,54 +327,63 @@ push + pop (findmin): 493104.4 i/s - 6.32x slower
|
|
282
327
|
|
283
328
|
== push N (N=5461) ============================================================
|
284
329
|
Warming up --------------------------------------
|
285
|
-
push N (bsearch)
|
286
|
-
push N (rb_heap)
|
287
|
-
push N (
|
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)
|
288
334
|
Calculating -------------------------------------
|
289
|
-
push N (bsearch)
|
290
|
-
push N (rb_heap)
|
291
|
-
push N (
|
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)
|
292
339
|
|
293
340
|
Comparison:
|
294
|
-
push N (c_dheap):
|
295
|
-
push N (
|
296
|
-
push N (
|
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
|
297
345
|
|
298
346
|
== push N then pop N (N=5461) ==================================================
|
299
347
|
Warming up --------------------------------------
|
300
|
-
push N + pop N (findmin) 12.
|
301
|
-
push N + pop N (bsearch)
|
302
|
-
push N + pop N (rb_heap)
|
303
|
-
push N + pop N (
|
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)
|
304
353
|
Calculating -------------------------------------
|
305
|
-
push N + pop N (findmin) 12.
|
306
|
-
push N + pop N (bsearch)
|
307
|
-
push N + pop N (rb_heap)
|
308
|
-
push N + pop N (
|
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)
|
309
359
|
|
310
360
|
Comparison:
|
311
|
-
push N + pop N (c_dheap):
|
312
|
-
push N + pop N (
|
313
|
-
push N + pop N (
|
314
|
-
push N + pop N (
|
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
|
315
366
|
|
316
367
|
== Push/pop with pre-filled queue (size=N) (N=5461) ============================
|
317
368
|
Warming up --------------------------------------
|
318
|
-
push + pop (findmin)
|
319
|
-
push + pop (bsearch) 1.
|
320
|
-
push + pop (rb_heap)
|
321
|
-
push + pop (
|
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)
|
322
374
|
Calculating -------------------------------------
|
323
|
-
push + pop (findmin)
|
324
|
-
push + pop (bsearch) 1.
|
325
|
-
push + pop (rb_heap)
|
326
|
-
push + pop (
|
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)
|
327
380
|
|
328
381
|
Comparison:
|
329
|
-
push + pop (c_dheap):
|
330
|
-
push + pop (
|
331
|
-
push + pop (
|
332
|
-
push + pop (
|
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
|
333
387
|
|
334
388
|
################################################################################
|
335
389
|
# Benchmarks with N=21845 (t=10sec/benchmark)
|
@@ -337,54 +391,63 @@ push + pop (findmin): 122316.0 i/s - 22.22x slower
|
|
337
391
|
|
338
392
|
== push N (N=21845) ============================================================
|
339
393
|
Warming up --------------------------------------
|
340
|
-
push N (bsearch)
|
341
|
-
push N (rb_heap)
|
342
|
-
push N (
|
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)
|
343
398
|
Calculating -------------------------------------
|
344
|
-
push N (bsearch) 34.
|
345
|
-
push N (rb_heap)
|
346
|
-
push N (
|
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)
|
347
403
|
|
348
404
|
Comparison:
|
349
|
-
push N (c_dheap):
|
350
|
-
push N (
|
351
|
-
push N (
|
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
|
352
409
|
|
353
410
|
== push N then pop N (N=21845) ================================================
|
354
411
|
Warming up --------------------------------------
|
355
|
-
push N + pop N (findmin) 0.779 i/s - 2.000 times in 2.
|
356
|
-
push N + pop N (bsearch) 34.
|
357
|
-
push N + pop N (rb_heap)
|
358
|
-
push N + pop N (
|
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)
|
359
417
|
Calculating -------------------------------------
|
360
|
-
push N + pop N (findmin) 0.
|
361
|
-
push N + pop N (bsearch)
|
362
|
-
push N + pop N (rb_heap)
|
363
|
-
push N + pop N (
|
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)
|
364
423
|
|
365
424
|
Comparison:
|
366
|
-
push N + pop N (c_dheap):
|
367
|
-
push N + pop N (
|
368
|
-
push N + pop N (
|
369
|
-
push N + pop N (
|
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
|
370
430
|
|
371
431
|
== Push/pop with pre-filled queue (size=N) (N=21845) ==========================
|
372
432
|
Warming up --------------------------------------
|
373
|
-
push + pop (findmin)
|
374
|
-
push + pop (bsearch) 1.
|
375
|
-
push + pop (rb_heap)
|
376
|
-
push + pop (
|
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)
|
377
438
|
Calculating -------------------------------------
|
378
|
-
push + pop (findmin)
|
379
|
-
push + pop (bsearch) 1.
|
380
|
-
push + pop (rb_heap)
|
381
|
-
push + pop (
|
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)
|
382
444
|
|
383
445
|
Comparison:
|
384
|
-
push + pop (c_dheap):
|
385
|
-
push + pop (
|
386
|
-
push + pop (
|
387
|
-
push + pop (
|
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
|
388
451
|
|
389
452
|
################################################################################
|
390
453
|
# Benchmarks with N=87381 (t=10sec/benchmark)
|
@@ -392,52 +455,61 @@ push + pop (findmin): 15583.2 i/s - 145.30x slower
|
|
392
455
|
|
393
456
|
== push N (N=87381) ============================================================
|
394
457
|
Warming up --------------------------------------
|
395
|
-
push N (bsearch) 2.
|
396
|
-
push N (rb_heap)
|
397
|
-
push N (
|
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)
|
398
462
|
Calculating -------------------------------------
|
399
|
-
push N (bsearch) 2.
|
400
|
-
push N (rb_heap)
|
401
|
-
push N (
|
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)
|
402
467
|
|
403
468
|
Comparison:
|
404
|
-
push N (c_dheap):
|
405
|
-
push N (
|
406
|
-
push N (
|
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
|
407
473
|
|
408
474
|
== push N then pop N (N=87381) ================================================
|
409
475
|
Warming up --------------------------------------
|
410
|
-
push N + pop N (findmin)0.0 i/s - 0.0 times in 15.
|
411
|
-
push N + pop N (bsearch) 2.
|
412
|
-
push N + pop N (rb_heap)
|
413
|
-
push N + pop N (
|
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)
|
414
481
|
Calculating -------------------------------------
|
415
|
-
push N + pop N (findmin)0.0 i/s - 0.0 times in 15.
|
416
|
-
push N + pop N (bsearch) 2.
|
417
|
-
push N + pop N (rb_heap)
|
418
|
-
push N + pop N (
|
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)
|
419
487
|
|
420
488
|
Comparison:
|
421
|
-
push N + pop N (c_dheap):
|
422
|
-
push N + pop N (
|
423
|
-
push N + pop N (
|
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
|
424
493
|
push N + pop N (findmin): 0.0 i/s - Infx slower
|
425
494
|
|
426
495
|
== Push/pop with pre-filled queue (size=N) (N=87381) ==========================
|
427
496
|
Warming up --------------------------------------
|
428
|
-
push + pop (findmin)
|
429
|
-
push + pop (bsearch)
|
430
|
-
push + pop (rb_heap)
|
431
|
-
push + pop (
|
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)
|
432
502
|
Calculating -------------------------------------
|
433
|
-
push + pop (findmin)
|
434
|
-
push + pop (bsearch)
|
435
|
-
push + pop (rb_heap)
|
436
|
-
push + pop (
|
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)
|
437
508
|
|
438
509
|
Comparison:
|
439
|
-
push + pop (c_dheap):
|
440
|
-
push + pop (
|
441
|
-
push + pop (rb_heap):
|
442
|
-
push + pop (
|
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
|
443
515
|
|