d_heap 0.2.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +26 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +199 -0
- data/.yardopts +10 -0
- data/CHANGELOG.md +72 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +47 -1
- data/N +7 -0
- data/README.md +362 -125
- data/Rakefile +8 -2
- data/benchmarks/perf.rb +29 -0
- data/benchmarks/push_n.yml +35 -0
- data/benchmarks/push_n_pop_n.yml +52 -0
- data/benchmarks/push_pop.yml +32 -0
- data/benchmarks/stackprof.rb +31 -0
- data/bin/bench_charts +13 -0
- data/bin/bench_n +7 -0
- data/bin/benchmark-driver +29 -0
- data/bin/benchmarks +10 -0
- data/bin/console +1 -0
- data/bin/profile +10 -0
- data/bin/rubocop +29 -0
- data/d_heap.gemspec +12 -7
- data/docs/benchmarks-2.txt +75 -0
- data/docs/benchmarks-mem.txt +39 -0
- data/docs/benchmarks.txt +515 -0
- data/docs/profile.txt +392 -0
- data/ext/d_heap/d_heap.c +851 -226
- data/ext/d_heap/extconf.rb +19 -0
- data/images/push_n.png +0 -0
- data/images/push_n_pop_n.png +0 -0
- data/images/push_pop.png +0 -0
- data/images/wikipedia-min-heap.png +0 -0
- data/lib/benchmark_driver/runner/ips_zero_fail.rb +158 -0
- data/lib/d_heap.rb +103 -2
- data/lib/d_heap/benchmarks.rb +112 -0
- data/lib/d_heap/benchmarks/benchmarker.rb +116 -0
- data/lib/d_heap/benchmarks/implementations.rb +224 -0
- data/lib/d_heap/benchmarks/profiler.rb +71 -0
- data/lib/d_heap/benchmarks/rspec_matchers.rb +352 -0
- data/lib/d_heap/version.rb +4 -1
- metadata +63 -6
- data/ext/d_heap/d_heap.h +0 -74
data/docs/benchmarks.txt
ADDED
@@ -0,0 +1,515 @@
|
|
1
|
+
Benchmarking run at 2021-01-17 17:17:24 -0500
|
2
|
+
ruby v2.7.2, DHeap v0.5.0
|
3
|
+
|
4
|
+
################################################################################
|
5
|
+
# Benchmarks with N=5 (t=10sec/benchmark)
|
6
|
+
################################################################################
|
7
|
+
|
8
|
+
== push N (N=5) ================================================================
|
9
|
+
Warming up --------------------------------------
|
10
|
+
push N (bsearch) 921.113k i/s - 1.862M times in 2.021033s (1.09μs/i)
|
11
|
+
push N (rb_heap) 953.542k i/s - 1.933M times in 2.026956s (1.05μs/i)
|
12
|
+
push N (c++ stl) 989.247k i/s - 2.038M times in 2.060495s (1.01μs/i)
|
13
|
+
push N (c_dheap) 1.922M i/s - 3.928M times in 2.043907s (520.30ns/i)
|
14
|
+
Calculating -------------------------------------
|
15
|
+
push N (bsearch) 921.060k i/s - 5.527M times in 6.000346s (1.09μs/i)
|
16
|
+
push N (rb_heap) 928.435k i/s - 5.721M times in 6.162252s (1.08μs/i)
|
17
|
+
push N (c++ stl) 1.050M i/s - 5.935M times in 5.654249s (952.62ns/i)
|
18
|
+
push N (c_dheap) 1.970M i/s - 11.532M times in 5.854595s (507.69ns/i)
|
19
|
+
|
20
|
+
Comparison:
|
21
|
+
push N (c_dheap): 1969700.7 i/s
|
22
|
+
push N (c++ stl): 1049738.1 i/s - 1.88x slower
|
23
|
+
push N (rb_heap): 928435.2 i/s - 2.12x slower
|
24
|
+
push N (bsearch): 921060.0 i/s - 2.14x slower
|
25
|
+
|
26
|
+
== push N then pop N (N=5) ====================================================
|
27
|
+
Warming up --------------------------------------
|
28
|
+
push N + pop N (findmin) 812.905k i/s - 1.645M times in 2.023946s (1.23μs/i)
|
29
|
+
push N + pop N (bsearch) 756.655k i/s - 1.537M times in 2.031407s (1.32μs/i)
|
30
|
+
push N + pop N (rb_heap) 505.268k i/s - 1.051M times in 2.079579s (1.98μs/i)
|
31
|
+
push N + pop N (c++ stl) 1.159M i/s - 2.358M times in 2.035009s (863.13ns/i)
|
32
|
+
push N + pop N (c_dheap) 1.425M i/s - 2.889M times in 2.028016s (701.91ns/i)
|
33
|
+
Calculating -------------------------------------
|
34
|
+
push N + pop N (findmin) 862.913k i/s - 4.877M times in 5.652280s (1.16μs/i)
|
35
|
+
push N + pop N (bsearch) 762.887k i/s - 4.540M times in 5.950988s (1.31μs/i)
|
36
|
+
push N + pop N (rb_heap) 506.890k i/s - 3.032M times in 5.980790s (1.97μs/i)
|
37
|
+
push N + pop N (c++ stl) 1.135M i/s - 6.951M times in 6.124666s (881.06ns/i)
|
38
|
+
push N + pop N (c_dheap) 1.376M i/s - 8.548M times in 6.213139s (726.85ns/i)
|
39
|
+
|
40
|
+
Comparison:
|
41
|
+
push N + pop N (c_dheap): 1375805.0 i/s
|
42
|
+
push N + pop N (c++ stl): 1134997.5 i/s - 1.21x slower
|
43
|
+
push N + pop N (findmin): 862913.1 i/s - 1.59x slower
|
44
|
+
push N + pop N (bsearch): 762887.1 i/s - 1.80x slower
|
45
|
+
push N + pop N (rb_heap): 506890.4 i/s - 2.71x slower
|
46
|
+
|
47
|
+
== Push/pop with pre-filled queue (size=N) (N=5) ==============================
|
48
|
+
Warming up --------------------------------------
|
49
|
+
push + pop (findmin) 5.115M i/s - 10.399M times in 2.033134s (195.52ns/i, 504clocks/i)
|
50
|
+
push + pop (bsearch) 4.203M i/s - 8.569M times in 2.038788s (237.92ns/i, 627clocks/i)
|
51
|
+
push + pop (rb_heap) 2.362M i/s - 4.760M times in 2.014718s (423.30ns/i)
|
52
|
+
push + pop (c++ stl) 6.881M i/s - 13.910M times in 2.021416s (145.32ns/i, 269clocks/i)
|
53
|
+
push + pop (c_dheap) 8.354M i/s - 16.814M times in 2.012796s (119.71ns/i, 343clocks/i)
|
54
|
+
Calculating -------------------------------------
|
55
|
+
push + pop (findmin) 5.026M i/s - 30.687M times in 6.105509s (198.96ns/i, 532clocks/i)
|
56
|
+
push + pop (bsearch) 4.300M i/s - 25.219M times in 5.864447s (232.54ns/i, 607clocks/i)
|
57
|
+
push + pop (rb_heap) 2.299M i/s - 14.174M times in 6.164105s (434.88ns/i)
|
58
|
+
push + pop (c++ stl) 7.535M i/s - 41.288M times in 5.479760s (132.72ns/i, 350clocks/i)
|
59
|
+
push + pop (c_dheap) 9.044M i/s - 50.122M times in 5.541698s (110.57ns/i, 241clocks/i)
|
60
|
+
|
61
|
+
Comparison:
|
62
|
+
push + pop (c_dheap): 9044435.5 i/s
|
63
|
+
push + pop (c++ stl): 7534583.4 i/s - 1.20x slower
|
64
|
+
push + pop (findmin): 5026155.1 i/s - 1.80x slower
|
65
|
+
push + pop (bsearch): 4300260.0 i/s - 2.10x slower
|
66
|
+
push + pop (rb_heap): 2299499.7 i/s - 3.93x slower
|
67
|
+
|
68
|
+
################################################################################
|
69
|
+
# Benchmarks with N=21 (t=10sec/benchmark)
|
70
|
+
################################################################################
|
71
|
+
|
72
|
+
== push N (N=21) ==============================================================
|
73
|
+
Warming up --------------------------------------
|
74
|
+
push N (bsearch) 172.478k i/s - 359.942k times in 2.086881s (5.80μs/i)
|
75
|
+
push N (rb_heap) 206.237k i/s - 426.074k times in 2.065940s (4.85μs/i)
|
76
|
+
push N (c++ stl) 317.575k i/s - 652.828k times in 2.055665s (3.15μs/i)
|
77
|
+
push N (c_dheap) 488.947k i/s - 991.484k times in 2.027793s (2.05μs/i)
|
78
|
+
Calculating -------------------------------------
|
79
|
+
push N (bsearch) 168.679k i/s - 1.035M times in 6.135155s (5.93μs/i)
|
80
|
+
push N (rb_heap) 202.804k i/s - 1.237M times in 6.101584s (4.93μs/i)
|
81
|
+
push N (c++ stl) 305.547k i/s - 1.905M times in 6.236198s (3.27μs/i)
|
82
|
+
push N (c_dheap) 464.231k i/s - 2.934M times in 6.319441s (2.15μs/i)
|
83
|
+
|
84
|
+
Comparison:
|
85
|
+
push N (c_dheap): 464231.4 i/s
|
86
|
+
push N (c++ stl): 305546.7 i/s - 1.52x slower
|
87
|
+
push N (rb_heap): 202803.7 i/s - 2.29x slower
|
88
|
+
push N (bsearch): 168678.7 i/s - 2.75x slower
|
89
|
+
|
90
|
+
== push N then pop N (N=21) ====================================================
|
91
|
+
Warming up --------------------------------------
|
92
|
+
push N + pop N (findmin) 160.307k i/s - 331.191k times in 2.065978s (6.24μs/i)
|
93
|
+
push N + pop N (bsearch) 136.665k i/s - 280.830k times in 2.054882s (7.32μs/i)
|
94
|
+
push N + pop N (rb_heap) 77.997k i/s - 156.492k times in 2.006388s (12.82μs/i)
|
95
|
+
push N + pop N (c++ stl) 243.819k i/s - 489.279k times in 2.006731s (4.10μs/i)
|
96
|
+
push N + pop N (c_dheap) 295.254k i/s - 597.410k times in 2.023373s (3.39μs/i)
|
97
|
+
Calculating -------------------------------------
|
98
|
+
push N + pop N (findmin) 161.999k i/s - 961.842k times in 5.937343s (6.17μs/i)
|
99
|
+
push N + pop N (bsearch) 143.432k i/s - 819.988k times in 5.716901s (6.97μs/i)
|
100
|
+
push N + pop N (rb_heap) 79.622k i/s - 467.981k times in 5.877529s (12.56μs/i)
|
101
|
+
push N + pop N (c++ stl) 252.227k i/s - 1.463M times in 5.799983s (3.96μs/i)
|
102
|
+
push N + pop N (c_dheap) 298.350k i/s - 1.772M times in 5.937739s (3.35μs/i)
|
103
|
+
|
104
|
+
Comparison:
|
105
|
+
push N + pop N (c_dheap): 298350.3 i/s
|
106
|
+
push N + pop N (c++ stl): 252227.1 i/s - 1.18x slower
|
107
|
+
push N + pop N (findmin): 161998.7 i/s - 1.84x slower
|
108
|
+
push N + pop N (bsearch): 143432.3 i/s - 2.08x slower
|
109
|
+
push N + pop N (rb_heap): 79622.1 i/s - 3.75x slower
|
110
|
+
|
111
|
+
== Push/pop with pre-filled queue (size=N) (N=21) ==============================
|
112
|
+
Warming up --------------------------------------
|
113
|
+
push + pop (findmin) 4.383M i/s - 8.832M times in 2.014937s (228.13ns/i, 482clocks/i)
|
114
|
+
push + pop (bsearch) 3.357M i/s - 6.859M times in 2.042965s (297.84ns/i, 709clocks/i)
|
115
|
+
push + pop (rb_heap) 1.885M i/s - 3.852M times in 2.043333s (530.48ns/i, 698clocks/i)
|
116
|
+
push + pop (c++ stl) 6.362M i/s - 12.844M times in 2.018810s (157.18ns/i, 438clocks/i)
|
117
|
+
push + pop (c_dheap) 7.644M i/s - 15.337M times in 2.006451s (130.83ns/i, 350clocks/i)
|
118
|
+
Calculating -------------------------------------
|
119
|
+
push + pop (findmin) 4.543M i/s - 26.301M times in 5.789445s (220.12ns/i, 618clocks/i)
|
120
|
+
push + pop (bsearch) 3.462M i/s - 20.145M times in 5.819157s (288.87ns/i, 721clocks/i)
|
121
|
+
push + pop (rb_heap) 1.845M i/s - 11.310M times in 6.128707s (541.86ns/i)
|
122
|
+
push + pop (c++ stl) 7.223M i/s - 38.172M times in 5.284687s (138.45ns/i, 383clocks/i)
|
123
|
+
push + pop (c_dheap) 8.855M i/s - 45.863M times in 5.179255s (112.93ns/i, 331clocks/i)
|
124
|
+
|
125
|
+
Comparison:
|
126
|
+
push + pop (c_dheap): 8855093.4 i/s
|
127
|
+
push + pop (c++ stl): 7223079.5 i/s - 1.23x slower
|
128
|
+
push + pop (findmin): 4542913.7 i/s - 1.95x slower
|
129
|
+
push + pop (bsearch): 3461802.4 i/s - 2.56x slower
|
130
|
+
push + pop (rb_heap): 1845488.7 i/s - 4.80x slower
|
131
|
+
|
132
|
+
################################################################################
|
133
|
+
# Benchmarks with N=85 (t=10sec/benchmark)
|
134
|
+
################################################################################
|
135
|
+
|
136
|
+
== push N (N=85) ==============================================================
|
137
|
+
Warming up --------------------------------------
|
138
|
+
push N (bsearch) 33.725k i/s - 70.434k times in 2.088480s (29.65μs/i)
|
139
|
+
push N (rb_heap) 48.257k i/s - 97.041k times in 2.010935s (20.72μs/i)
|
140
|
+
push N (c++ stl) 89.473k i/s - 179.991k times in 2.011685s (11.18μs/i)
|
141
|
+
push N (c_dheap) 113.625k i/s - 229.362k times in 2.018582s (8.80μs/i)
|
142
|
+
Calculating -------------------------------------
|
143
|
+
push N (bsearch) 32.896k i/s - 202.350k times in 6.151202s (30.40μs/i)
|
144
|
+
push N (rb_heap) 45.078k i/s - 289.539k times in 6.423085s (22.18μs/i)
|
145
|
+
push N (c++ stl) 90.436k i/s - 536.836k times in 5.936116s (11.06μs/i)
|
146
|
+
push N (c_dheap) 115.218k i/s - 681.751k times in 5.917030s (8.68μs/i)
|
147
|
+
|
148
|
+
Comparison:
|
149
|
+
push N (c_dheap): 115218.4 i/s
|
150
|
+
push N (c++ stl): 90435.6 i/s - 1.27x slower
|
151
|
+
push N (rb_heap): 45077.9 i/s - 2.56x slower
|
152
|
+
push N (bsearch): 32896.0 i/s - 3.50x slower
|
153
|
+
|
154
|
+
== push N then pop N (N=85) ====================================================
|
155
|
+
Warming up --------------------------------------
|
156
|
+
push N + pop N (findmin) 28.014k i/s - 57.855k times in 2.065181s (35.70μs/i)
|
157
|
+
push N + pop N (bsearch) 28.759k i/s - 59.829k times in 2.080345s (34.77μs/i)
|
158
|
+
push N + pop N (rb_heap) 14.748k i/s - 29.500k times in 2.000302s (67.81μs/i)
|
159
|
+
push N + pop N (c++ stl) 58.058k i/s - 117.831k times in 2.029553s (17.22μs/i)
|
160
|
+
push N + pop N (c_dheap) 67.639k i/s - 139.587k times in 2.063705s (14.78μs/i)
|
161
|
+
Calculating -------------------------------------
|
162
|
+
push N + pop N (findmin) 27.713k i/s - 168.086k times in 6.065197s (36.08μs/i)
|
163
|
+
push N + pop N (bsearch) 29.110k i/s - 172.554k times in 5.927752s (34.35μs/i)
|
164
|
+
push N + pop N (rb_heap) 14.908k i/s - 88.486k times in 5.935373s (67.08μs/i)
|
165
|
+
push N + pop N (c++ stl) 54.774k i/s - 348.345k times in 6.359716s (18.26μs/i)
|
166
|
+
push N + pop N (c_dheap) 68.487k i/s - 405.834k times in 5.925729s (14.60μs/i)
|
167
|
+
|
168
|
+
Comparison:
|
169
|
+
push N + pop N (c_dheap): 68486.8 i/s
|
170
|
+
push N + pop N (c++ stl): 54773.7 i/s - 1.25x slower
|
171
|
+
push N + pop N (bsearch): 29109.5 i/s - 2.35x slower
|
172
|
+
push N + pop N (findmin): 27713.2 i/s - 2.47x slower
|
173
|
+
push N + pop N (rb_heap): 14908.2 i/s - 4.59x slower
|
174
|
+
|
175
|
+
== Push/pop with pre-filled queue (size=N) (N=85) ==============================
|
176
|
+
Warming up --------------------------------------
|
177
|
+
push + pop (findmin) 3.148M i/s - 6.329M times in 2.010240s (317.64ns/i, 872clocks/i)
|
178
|
+
push + pop (bsearch) 2.616M i/s - 5.241M times in 2.003260s (382.20ns/i)
|
179
|
+
push + pop (rb_heap) 1.537M i/s - 3.126M times in 2.033793s (650.57ns/i)
|
180
|
+
push + pop (c++ stl) 6.648M i/s - 13.314M times in 2.002850s (150.43ns/i, 396clocks/i)
|
181
|
+
push + pop (c_dheap) 7.902M i/s - 15.885M times in 2.010277s (126.55ns/i, 282clocks/i)
|
182
|
+
Calculating -------------------------------------
|
183
|
+
push + pop (findmin) 3.327M i/s - 18.889M times in 5.677677s (300.58ns/i, 809clocks/i)
|
184
|
+
push + pop (bsearch) 2.827M i/s - 15.699M times in 5.553113s (353.73ns/i, 891clocks/i)
|
185
|
+
push + pop (rb_heap) 1.465M i/s - 9.223M times in 6.293793s (682.42ns/i)
|
186
|
+
push + pop (c++ stl) 7.057M i/s - 39.885M times in 5.651789s (141.70ns/i, 418clocks/i)
|
187
|
+
push + pop (c_dheap) 8.422M i/s - 47.412M times in 5.629438s (118.73ns/i, 281clocks/i)
|
188
|
+
|
189
|
+
Comparison:
|
190
|
+
push + pop (c_dheap): 8422216.3 i/s
|
191
|
+
push + pop (c++ stl): 7057057.1 i/s - 1.19x slower
|
192
|
+
push + pop (findmin): 3326922.6 i/s - 2.53x slower
|
193
|
+
push + pop (bsearch): 2827025.2 i/s - 2.98x slower
|
194
|
+
push + pop (rb_heap): 1465369.7 i/s - 5.75x slower
|
195
|
+
|
196
|
+
################################################################################
|
197
|
+
# Benchmarks with N=341 (t=10sec/benchmark)
|
198
|
+
################################################################################
|
199
|
+
|
200
|
+
== push N (N=341) ==============================================================
|
201
|
+
Warming up --------------------------------------
|
202
|
+
push N (bsearch) 6.761k i/s - 13.860k times in 2.049946s (147.90μs/i)
|
203
|
+
push N (rb_heap) 11.284k i/s - 23.040k times in 2.041838s (88.62μs/i)
|
204
|
+
push N (c++ stl) 23.839k i/s - 49.266k times in 2.066605s (41.95μs/i)
|
205
|
+
push N (c_dheap) 30.654k i/s - 63.420k times in 2.068901s (32.62μs/i)
|
206
|
+
Calculating -------------------------------------
|
207
|
+
push N (bsearch) 6.624k i/s - 40.566k times in 6.123861s (150.96μs/i)
|
208
|
+
push N (rb_heap) 11.433k i/s - 67.703k times in 5.921638s (87.46μs/i)
|
209
|
+
push N (c++ stl) 23.055k i/s - 143.034k times in 6.204083s (43.37μs/i)
|
210
|
+
push N (c_dheap) 27.951k i/s - 183.923k times in 6.580153s (35.78μs/i)
|
211
|
+
|
212
|
+
Comparison:
|
213
|
+
push N (c_dheap): 27951.2 i/s
|
214
|
+
push N (c++ stl): 23054.8 i/s - 1.21x slower
|
215
|
+
push N (rb_heap): 11433.2 i/s - 2.44x slower
|
216
|
+
push N (bsearch): 6624.3 i/s - 4.22x slower
|
217
|
+
|
218
|
+
== push N then pop N (N=341) ==================================================
|
219
|
+
Warming up --------------------------------------
|
220
|
+
push N + pop N (findmin) 3.013k i/s - 6.040k times in 2.004514s (331.87μs/i)
|
221
|
+
push N + pop N (bsearch) 6.202k i/s - 12.684k times in 2.045306s (161.25μs/i)
|
222
|
+
push N + pop N (rb_heap) 3.028k i/s - 6.100k times in 2.014435s (330.24μs/i)
|
223
|
+
push N + pop N (c++ stl) 13.177k i/s - 27.006k times in 2.049544s (75.89μs/i)
|
224
|
+
push N + pop N (c_dheap) 15.142k i/s - 31.563k times in 2.084497s (66.04μs/i)
|
225
|
+
Calculating -------------------------------------
|
226
|
+
push N + pop N (findmin) 3.025k i/s - 18.079k times in 5.976274s (330.56μs/i)
|
227
|
+
push N + pop N (bsearch) 5.906k i/s - 37.209k times in 6.300596s (169.33μs/i)
|
228
|
+
push N + pop N (rb_heap) 3.008k i/s - 18.168k times in 6.039305s (332.41μs/i)
|
229
|
+
push N + pop N (c++ stl) 13.135k i/s - 79.059k times in 6.018814s (76.13μs/i)
|
230
|
+
push N + pop N (c_dheap) 15.142k i/s - 90.850k times in 5.999735s (66.04μs/i)
|
231
|
+
|
232
|
+
Comparison:
|
233
|
+
push N + pop N (c_dheap): 15142.3 i/s
|
234
|
+
push N + pop N (c++ stl): 13135.3 i/s - 1.15x slower
|
235
|
+
push N + pop N (bsearch): 5905.6 i/s - 2.56x slower
|
236
|
+
push N + pop N (findmin): 3025.1 i/s - 5.01x slower
|
237
|
+
push N + pop N (rb_heap): 3008.3 i/s - 5.03x slower
|
238
|
+
|
239
|
+
== Push/pop with pre-filled queue (size=N) (N=341) ============================
|
240
|
+
Warming up --------------------------------------
|
241
|
+
push + pop (findmin) 1.508M i/s - 3.048M times in 2.020819s (662.94ns/i)
|
242
|
+
push + pop (bsearch) 2.149M i/s - 4.337M times in 2.017794s (465.25ns/i)
|
243
|
+
push + pop (rb_heap) 1.144M i/s - 2.313M times in 2.021027s (873.78ns/i)
|
244
|
+
push + pop (c++ stl) 5.897M i/s - 11.981M times in 2.031688s (169.57ns/i, 484clocks/i)
|
245
|
+
push + pop (c_dheap) 7.452M i/s - 14.981M times in 2.010401s (134.20ns/i, 367clocks/i)
|
246
|
+
Calculating -------------------------------------
|
247
|
+
push + pop (findmin) 1.548M i/s - 9.051M times in 5.844950s (645.81ns/i)
|
248
|
+
push + pop (bsearch) 2.257M i/s - 12.896M times in 5.713856s (443.06ns/i)
|
249
|
+
push + pop (rb_heap) 1.220M i/s - 6.867M times in 5.628146s (819.63ns/i)
|
250
|
+
push + pop (c++ stl) 6.578M i/s - 35.384M times in 5.379298s (152.03ns/i, 399clocks/i)
|
251
|
+
push + pop (c_dheap) 8.225M i/s - 44.711M times in 5.435966s (121.58ns/i, 327clocks/i)
|
252
|
+
|
253
|
+
Comparison:
|
254
|
+
push + pop (c_dheap): 8225038.0 i/s
|
255
|
+
push + pop (c++ stl): 6577756.8 i/s - 1.25x slower
|
256
|
+
push + pop (bsearch): 2257028.3 i/s - 3.64x slower
|
257
|
+
push + pop (findmin): 1548450.8 i/s - 5.31x slower
|
258
|
+
push + pop (rb_heap): 1220067.2 i/s - 6.74x slower
|
259
|
+
|
260
|
+
################################################################################
|
261
|
+
# Benchmarks with N=1365 (t=10sec/benchmark)
|
262
|
+
################################################################################
|
263
|
+
|
264
|
+
== push N (N=1365) ============================================================
|
265
|
+
Warming up --------------------------------------
|
266
|
+
push N (bsearch) 1.394k i/s - 2.898k times in 2.079633s (717.61μs/i)
|
267
|
+
push N (rb_heap) 2.943k i/s - 5.920k times in 2.011565s (339.79μs/i)
|
268
|
+
push N (c++ stl) 5.621k i/s - 11.676k times in 2.077224s (177.91μs/i)
|
269
|
+
push N (c_dheap) 7.425k i/s - 15.582k times in 2.098509s (134.68μs/i)
|
270
|
+
Calculating -------------------------------------
|
271
|
+
push N (bsearch) 1.346k i/s - 8.361k times in 6.211667s (742.93μs/i)
|
272
|
+
push N (rb_heap) 2.908k i/s - 17.657k times in 6.072601s (343.92μs/i)
|
273
|
+
push N (c++ stl) 5.812k i/s - 33.725k times in 5.802474s (172.05μs/i)
|
274
|
+
push N (c_dheap) 7.406k i/s - 44.551k times in 6.015756s (135.03μs/i)
|
275
|
+
|
276
|
+
Comparison:
|
277
|
+
push N (c_dheap): 7405.7 i/s
|
278
|
+
push N (c++ stl): 5812.2 i/s - 1.27x slower
|
279
|
+
push N (rb_heap): 2907.7 i/s - 2.55x slower
|
280
|
+
push N (bsearch): 1346.0 i/s - 5.50x slower
|
281
|
+
|
282
|
+
== push N then pop N (N=1365) ==================================================
|
283
|
+
Warming up --------------------------------------
|
284
|
+
push N + pop N (findmin) 189.039 i/s - 380.000 times in 2.010168s (5.29ms/i)
|
285
|
+
push N + pop N (bsearch) 1.275k i/s - 2.667k times in 2.091317s (784.15μs/i)
|
286
|
+
push N + pop N (rb_heap) 629.327 i/s - 1.260k times in 2.002137s (1.59ms/i)
|
287
|
+
push N + pop N (c++ stl) 3.083k i/s - 6.280k times in 2.036843s (324.34μs/i)
|
288
|
+
push N + pop N (c_dheap) 3.434k i/s - 6.880k times in 2.003496s (291.21μs/i)
|
289
|
+
Calculating -------------------------------------
|
290
|
+
push N + pop N (findmin) 195.665 i/s - 1.134k times in 5.795620s (5.11ms/i)
|
291
|
+
push N + pop N (bsearch) 1.177k i/s - 7.651k times in 6.501332s (849.74μs/i)
|
292
|
+
push N + pop N (rb_heap) 624.066 i/s - 3.775k times in 6.049040s (1.60ms/i)
|
293
|
+
push N + pop N (c++ stl) 3.105k i/s - 18.499k times in 5.958037s (322.07μs/i)
|
294
|
+
push N + pop N (c_dheap) 3.475k i/s - 20.603k times in 5.928992s (287.77μs/i)
|
295
|
+
|
296
|
+
Comparison:
|
297
|
+
push N + pop N (c_dheap): 3475.0 i/s
|
298
|
+
push N + pop N (c++ stl): 3104.9 i/s - 1.12x slower
|
299
|
+
push N + pop N (bsearch): 1176.8 i/s - 2.95x slower
|
300
|
+
push N + pop N (rb_heap): 624.1 i/s - 5.57x slower
|
301
|
+
push N + pop N (findmin): 195.7 i/s - 17.76x slower
|
302
|
+
|
303
|
+
== Push/pop with pre-filled queue (size=N) (N=1365) ============================
|
304
|
+
Warming up --------------------------------------
|
305
|
+
push + pop (findmin) 496.816k i/s - 1.028M times in 2.069729s (2.01μs/i)
|
306
|
+
push + pop (bsearch) 1.964M i/s - 3.956M times in 2.014551s (509.28ns/i)
|
307
|
+
push + pop (rb_heap) 1.043M i/s - 2.150M times in 2.061288s (958.58ns/i)
|
308
|
+
push + pop (c++ stl) 5.289M i/s - 10.720M times in 2.026911s (189.07ns/i, 346clocks/i)
|
309
|
+
push + pop (c_dheap) 6.890M i/s - 13.979M times in 2.029039s (145.15ns/i, 411clocks/i)
|
310
|
+
Calculating -------------------------------------
|
311
|
+
push + pop (findmin) 498.357k i/s - 2.981M times in 5.981452s (2.01μs/i)
|
312
|
+
push + pop (bsearch) 2.016M i/s - 11.781M times in 5.844338s (496.07ns/i)
|
313
|
+
push + pop (rb_heap) 1.056M i/s - 6.259M times in 5.926221s (946.80ns/i)
|
314
|
+
push + pop (c++ stl) 6.149M i/s - 31.734M times in 5.160646s (162.62ns/i, 357clocks/i)
|
315
|
+
push + pop (c_dheap) 7.240M i/s - 41.337M times in 5.709252s (138.11ns/i, 365clocks/i)
|
316
|
+
|
317
|
+
Comparison:
|
318
|
+
push + pop (c_dheap): 7240436.4 i/s
|
319
|
+
push + pop (c++ stl): 6149299.4 i/s - 1.18x slower
|
320
|
+
push + pop (bsearch): 2015850.6 i/s - 3.59x slower
|
321
|
+
push + pop (rb_heap): 1056192.6 i/s - 6.86x slower
|
322
|
+
push + pop (findmin): 498356.6 i/s - 14.53x slower
|
323
|
+
|
324
|
+
################################################################################
|
325
|
+
# Benchmarks with N=5461 (t=10sec/benchmark)
|
326
|
+
################################################################################
|
327
|
+
|
328
|
+
== push N (N=5461) ============================================================
|
329
|
+
Warming up --------------------------------------
|
330
|
+
push N (bsearch) 269.520 i/s - 560.000 times in 2.077767s (3.71ms/i)
|
331
|
+
push N (rb_heap) 717.703 i/s - 1.440k times in 2.006402s (1.39ms/i)
|
332
|
+
push N (c++ stl) 1.462k i/s - 3.045k times in 2.082734s (683.99μs/i)
|
333
|
+
push N (c_dheap) 1.823k i/s - 3.780k times in 2.073303s (548.49μs/i)
|
334
|
+
Calculating -------------------------------------
|
335
|
+
push N (bsearch) 258.932 i/s - 1.617k times in 6.244873s (3.86ms/i)
|
336
|
+
push N (rb_heap) 723.029 i/s - 4.306k times in 5.955502s (1.38ms/i)
|
337
|
+
push N (c++ stl) 1.407k i/s - 8.772k times in 6.235747s (710.87μs/i)
|
338
|
+
push N (c_dheap) 1.853k i/s - 10.939k times in 5.904004s (539.72μs/i)
|
339
|
+
|
340
|
+
Comparison:
|
341
|
+
push N (c_dheap): 1852.8 i/s
|
342
|
+
push N (c++ stl): 1406.7 i/s - 1.32x slower
|
343
|
+
push N (rb_heap): 723.0 i/s - 2.56x slower
|
344
|
+
push N (bsearch): 258.9 i/s - 7.16x slower
|
345
|
+
|
346
|
+
== push N then pop N (N=5461) ==================================================
|
347
|
+
Warming up --------------------------------------
|
348
|
+
push N + pop N (findmin) 12.207 i/s - 26.000 times in 2.129850s (81.92ms/i)
|
349
|
+
push N + pop N (bsearch) 251.139 i/s - 525.000 times in 2.090473s (3.98ms/i)
|
350
|
+
push N + pop N (rb_heap) 137.157 i/s - 280.000 times in 2.041453s (7.29ms/i)
|
351
|
+
push N + pop N (c++ stl) 724.325 i/s - 1.460k times in 2.015670s (1.38ms/i)
|
352
|
+
push N + pop N (c_dheap) 794.655 i/s - 1.600k times in 2.013452s (1.26ms/i)
|
353
|
+
Calculating -------------------------------------
|
354
|
+
push N + pop N (findmin) 12.381 i/s - 73.000 times in 5.896102s (80.77ms/i)
|
355
|
+
push N + pop N (bsearch) 249.090 i/s - 1.506k times in 6.046014s (4.01ms/i)
|
356
|
+
push N + pop N (rb_heap) 136.820 i/s - 822.000 times in 6.007880s (7.31ms/i)
|
357
|
+
push N + pop N (c++ stl) 699.853 i/s - 4.345k times in 6.208445s (1.43ms/i)
|
358
|
+
push N + pop N (c_dheap) 779.676 i/s - 4.767k times in 6.114082s (1.28ms/i)
|
359
|
+
|
360
|
+
Comparison:
|
361
|
+
push N + pop N (c_dheap): 779.7 i/s
|
362
|
+
push N + pop N (c++ stl): 699.9 i/s - 1.11x slower
|
363
|
+
push N + pop N (bsearch): 249.1 i/s - 3.13x slower
|
364
|
+
push N + pop N (rb_heap): 136.8 i/s - 5.70x slower
|
365
|
+
push N + pop N (findmin): 12.4 i/s - 62.97x slower
|
366
|
+
|
367
|
+
== Push/pop with pre-filled queue (size=N) (N=5461) ============================
|
368
|
+
Warming up --------------------------------------
|
369
|
+
push + pop (findmin) 122.350k i/s - 245.280k times in 2.004736s (8.17μs/i)
|
370
|
+
push + pop (bsearch) 1.778M i/s - 3.633M times in 2.043729s (562.57ns/i)
|
371
|
+
push + pop (rb_heap) 918.753k i/s - 1.850M times in 2.013237s (1.09μs/i)
|
372
|
+
push + pop (c++ stl) 5.000M i/s - 10.088M times in 2.017440s (199.99ns/i, 445clocks/i)
|
373
|
+
push + pop (c_dheap) 6.520M i/s - 13.190M times in 2.023137s (153.39ns/i, 427clocks/i)
|
374
|
+
Calculating -------------------------------------
|
375
|
+
push + pop (findmin) 120.450k i/s - 734.101k times in 6.094657s (8.30μs/i)
|
376
|
+
push + pop (bsearch) 1.799M i/s - 10.665M times in 5.928598s (555.87ns/i)
|
377
|
+
push + pop (rb_heap) 870.024k i/s - 5.513M times in 6.336058s (1.15μs/i)
|
378
|
+
push + pop (c++ stl) 5.594M i/s - 30.001M times in 5.363045s (178.76ns/i, 451clocks/i)
|
379
|
+
push + pop (c_dheap) 6.991M i/s - 39.117M times in 5.595561s (143.05ns/i, 373clocks/i)
|
380
|
+
|
381
|
+
Comparison:
|
382
|
+
push + pop (c_dheap): 6990729.5 i/s
|
383
|
+
push + pop (c++ stl): 5594102.7 i/s - 1.25x slower
|
384
|
+
push + pop (bsearch): 1798974.6 i/s - 3.89x slower
|
385
|
+
push + pop (rb_heap): 870023.6 i/s - 8.04x slower
|
386
|
+
push + pop (findmin): 120449.9 i/s - 58.04x slower
|
387
|
+
|
388
|
+
################################################################################
|
389
|
+
# Benchmarks with N=21845 (t=10sec/benchmark)
|
390
|
+
################################################################################
|
391
|
+
|
392
|
+
== push N (N=21845) ============================================================
|
393
|
+
Warming up --------------------------------------
|
394
|
+
push N (bsearch) 29.500 i/s - 60.000 times in 2.033920s (33.90ms/i)
|
395
|
+
push N (rb_heap) 180.110 i/s - 378.000 times in 2.098720s (5.55ms/i)
|
396
|
+
push N (c++ stl) 341.267 i/s - 700.000 times in 2.051181s (2.93ms/i)
|
397
|
+
push N (c_dheap) 452.850 i/s - 920.000 times in 2.031579s (2.21ms/i)
|
398
|
+
Calculating -------------------------------------
|
399
|
+
push N (bsearch) 34.825 i/s - 176.000 times in 5.053771s (28.71ms/i)
|
400
|
+
push N (rb_heap) 178.444 i/s - 1.080k times in 6.052328s (5.60ms/i)
|
401
|
+
push N (c++ stl) 339.996 i/s - 2.047k times in 6.020652s (2.94ms/i)
|
402
|
+
push N (c_dheap) 471.606 i/s - 2.717k times in 5.761168s (2.12ms/i)
|
403
|
+
|
404
|
+
Comparison:
|
405
|
+
push N (c_dheap): 471.6 i/s
|
406
|
+
push N (c++ stl): 340.0 i/s - 1.39x slower
|
407
|
+
push N (rb_heap): 178.4 i/s - 2.64x slower
|
408
|
+
push N (bsearch): 34.8 i/s - 13.54x slower
|
409
|
+
|
410
|
+
== push N then pop N (N=21845) ================================================
|
411
|
+
Warming up --------------------------------------
|
412
|
+
push N + pop N (findmin) 0.779 i/s - 2.000 times in 2.567523s (1.28s/i)
|
413
|
+
push N + pop N (bsearch) 34.097 i/s - 72.000 times in 2.111648s (29.33ms/i)
|
414
|
+
push N + pop N (rb_heap) 30.004 i/s - 63.000 times in 2.099747s (33.33ms/i)
|
415
|
+
push N + pop N (c++ stl) 162.161 i/s - 340.000 times in 2.096682s (6.17ms/i)
|
416
|
+
push N + pop N (c_dheap) 174.422 i/s - 360.000 times in 2.063954s (5.73ms/i)
|
417
|
+
Calculating -------------------------------------
|
418
|
+
push N + pop N (findmin) 0.778 i/s - 4.000 times in 5.144549s (1.29s/i)
|
419
|
+
push N + pop N (bsearch) 32.991 i/s - 204.000 times in 6.183540s (30.31ms/i)
|
420
|
+
push N + pop N (rb_heap) 29.347 i/s - 180.000 times in 6.133559s (34.08ms/i)
|
421
|
+
push N + pop N (c++ stl) 164.692 i/s - 972.000 times in 5.901925s (6.07ms/i)
|
422
|
+
push N + pop N (c_dheap) 171.201 i/s - 1.046k times in 6.109760s (5.84ms/i)
|
423
|
+
|
424
|
+
Comparison:
|
425
|
+
push N + pop N (c_dheap): 171.2 i/s
|
426
|
+
push N + pop N (c++ stl): 164.7 i/s - 1.04x slower
|
427
|
+
push N + pop N (bsearch): 33.0 i/s - 5.19x slower
|
428
|
+
push N + pop N (rb_heap): 29.3 i/s - 5.83x slower
|
429
|
+
push N + pop N (findmin): 0.8 i/s - 220.19x slower
|
430
|
+
|
431
|
+
== Push/pop with pre-filled queue (size=N) (N=21845) ==========================
|
432
|
+
Warming up --------------------------------------
|
433
|
+
push + pop (findmin) 9.674k i/s - 19.701k times in 2.036569s (103.37μs/i)
|
434
|
+
push + pop (bsearch) 1.565M i/s - 3.181M times in 2.032390s (638.93ns/i)
|
435
|
+
push + pop (rb_heap) 830.840k i/s - 1.701M times in 2.047922s (1.20μs/i)
|
436
|
+
push + pop (c++ stl) 4.606M i/s - 9.338M times in 2.027286s (217.11ns/i, 525clocks/i)
|
437
|
+
push + pop (c_dheap) 5.854M i/s - 11.791M times in 2.014052s (170.81ns/i, 453clocks/i)
|
438
|
+
Calculating -------------------------------------
|
439
|
+
push + pop (findmin) 11.522k i/s - 58.041k times in 5.037203s (86.79μs/i)
|
440
|
+
push + pop (bsearch) 1.528M i/s - 9.391M times in 6.144507s (654.32ns/i)
|
441
|
+
push + pop (rb_heap) 802.621k i/s - 4.985M times in 6.210948s (1.25μs/i)
|
442
|
+
push + pop (c++ stl) 4.959M i/s - 27.636M times in 5.573344s (201.67ns/i, 561clocks/i)
|
443
|
+
push + pop (c_dheap) 6.275M i/s - 35.126M times in 5.597394s (159.35ns/i, 421clocks/i)
|
444
|
+
|
445
|
+
Comparison:
|
446
|
+
push + pop (c_dheap): 6275438.5 i/s
|
447
|
+
push + pop (c++ stl): 4958577.7 i/s - 1.27x slower
|
448
|
+
push + pop (bsearch): 1528297.6 i/s - 4.11x slower
|
449
|
+
push + pop (rb_heap): 802621.5 i/s - 7.82x slower
|
450
|
+
push + pop (findmin): 11522.5 i/s - 544.63x slower
|
451
|
+
|
452
|
+
################################################################################
|
453
|
+
# Benchmarks with N=87381 (t=10sec/benchmark)
|
454
|
+
################################################################################
|
455
|
+
|
456
|
+
== push N (N=87381) ============================================================
|
457
|
+
Warming up --------------------------------------
|
458
|
+
push N (bsearch) 2.860 i/s - 6.000 times in 2.097866s (349.64ms/i)
|
459
|
+
push N (rb_heap) 44.082 i/s - 90.000 times in 2.041662s (22.69ms/i)
|
460
|
+
push N (c++ stl) 87.951 i/s - 180.000 times in 2.046591s (11.37ms/i)
|
461
|
+
push N (c_dheap) 114.586 i/s - 240.000 times in 2.094502s (8.73ms/i)
|
462
|
+
Calculating -------------------------------------
|
463
|
+
push N (bsearch) 2.876 i/s - 17.000 times in 5.910605s (347.68ms/i)
|
464
|
+
push N (rb_heap) 44.019 i/s - 264.000 times in 5.997408s (22.72ms/i)
|
465
|
+
push N (c++ stl) 79.328 i/s - 527.000 times in 6.643283s (12.61ms/i)
|
466
|
+
push N (c_dheap) 115.006 i/s - 687.000 times in 5.973623s (8.70ms/i)
|
467
|
+
|
468
|
+
Comparison:
|
469
|
+
push N (c_dheap): 115.0 i/s
|
470
|
+
push N (c++ stl): 79.3 i/s - 1.45x slower
|
471
|
+
push N (rb_heap): 44.0 i/s - 2.61x slower
|
472
|
+
push N (bsearch): 2.9 i/s - 39.99x slower
|
473
|
+
|
474
|
+
== push N then pop N (N=87381) ================================================
|
475
|
+
Warming up --------------------------------------
|
476
|
+
push N + pop N (findmin)0.0 i/s - 0.0 times in 15.004015s (Infs/i)
|
477
|
+
push N + pop N (bsearch) 2.818 i/s - 6.000 times in 2.129230s (354.87ms/i)
|
478
|
+
push N + pop N (rb_heap) 6.587 i/s - 14.000 times in 2.125416s (151.82ms/i)
|
479
|
+
push N + pop N (c++ stl) 38.095 i/s - 80.000 times in 2.100037s (26.25ms/i)
|
480
|
+
push N + pop N (c_dheap) 39.934 i/s - 80.000 times in 2.003287s (25.04ms/i)
|
481
|
+
Calculating -------------------------------------
|
482
|
+
push N + pop N (findmin)0.0 i/s - 0.0 times in 15.004015s (Infs/i)
|
483
|
+
push N + pop N (bsearch) 2.905 i/s - 16.000 times in 5.507260s (344.20ms/i)
|
484
|
+
push N + pop N (rb_heap) 6.675 i/s - 39.000 times in 5.843054s (149.82ms/i)
|
485
|
+
push N + pop N (c++ stl) 38.576 i/s - 228.000 times in 5.910361s (25.92ms/i)
|
486
|
+
push N + pop N (c_dheap) 39.508 i/s - 239.000 times in 6.049426s (25.31ms/i)
|
487
|
+
|
488
|
+
Comparison:
|
489
|
+
push N + pop N (c_dheap): 39.5 i/s
|
490
|
+
push N + pop N (c++ stl): 38.6 i/s - 1.02x slower
|
491
|
+
push N + pop N (rb_heap): 6.7 i/s - 5.92x slower
|
492
|
+
push N + pop N (bsearch): 2.9 i/s - 13.60x slower
|
493
|
+
push N + pop N (findmin): 0.0 i/s - Infx slower
|
494
|
+
|
495
|
+
== Push/pop with pre-filled queue (size=N) (N=87381) ==========================
|
496
|
+
Warming up --------------------------------------
|
497
|
+
push + pop (findmin) 1.301k i/s - 2.646k times in 2.033177s (768.40μs/i)
|
498
|
+
push + pop (bsearch) 399.722k i/s - 802.368k times in 2.007313s (2.50μs/i)
|
499
|
+
push + pop (rb_heap) 693.504k i/s - 1.416M times in 2.042452s (1.44μs/i)
|
500
|
+
push + pop (c++ stl) 3.984M i/s - 7.970M times in 2.000250s (250.98ns/i, 578clocks/i)
|
501
|
+
push + pop (c_dheap) 5.101M i/s - 10.348M times in 2.028583s (196.05ns/i, 321clocks/i)
|
502
|
+
Calculating -------------------------------------
|
503
|
+
push + pop (findmin) 1.305k i/s - 7.808k times in 5.983727s (766.36μs/i)
|
504
|
+
push + pop (bsearch) 516.666k i/s - 2.398M times in 4.641947s (1.94μs/i)
|
505
|
+
push + pop (rb_heap) 695.029k i/s - 4.161M times in 5.986830s (1.44μs/i)
|
506
|
+
push + pop (c++ stl) 4.478M i/s - 23.906M times in 5.338832s (223.32ns/i, 577clocks/i)
|
507
|
+
push + pop (c_dheap) 5.968M i/s - 30.605M times in 5.128099s (167.56ns/i, 426clocks/i)
|
508
|
+
|
509
|
+
Comparison:
|
510
|
+
push + pop (c_dheap): 5968137.3 i/s
|
511
|
+
push + pop (c++ stl): 4477815.8 i/s - 1.33x slower
|
512
|
+
push + pop (rb_heap): 695029.1 i/s - 8.59x slower
|
513
|
+
push + pop (bsearch): 516665.5 i/s - 11.55x slower
|
514
|
+
push + pop (findmin): 1304.9 i/s - 4573.73x slower
|
515
|
+
|