@@ -33,6 +33,7 @@ enum Scenario {
33
33
MULTIMAP,
34
34
HASH_MAP,
35
35
STD_MAP,
36
+ STD_MULTIMAP,
36
37
};
37
38
38
39
using payload_t = int ;
@@ -48,7 +49,13 @@ using TestIndex = typename std::conditional_t<
48
49
typename std::conditional_t <
49
50
SCENARIO == HASH_MAP,
50
51
b_plus_tree_hash_map<key_t , payload_t >,
51
- std::map<key_t , payload_t >>>>;
52
+ typename std::conditional_t <
53
+ SCENARIO == STD_MAP,
54
+ std::map<key_t , payload_t >,
55
+ typename std::conditional_t <
56
+ SCENARIO == STD_MULTIMAP,
57
+ std::multimap<key_t , payload_t >,
58
+ void >>>>>;
52
59
53
60
/*
54
61
* Benchmark for adding entries to the index.
@@ -110,19 +117,7 @@ void IndexBenchmark<DIM, TYPE>::SetupWorld(benchmark::State& state) {
110
117
template <dimension_t DIM, Scenario TYPE>
111
118
void IndexBenchmark<DIM, TYPE>::Insert(benchmark::State& state, Index& tree) {
112
119
switch (TYPE) {
113
- case MAP: {
114
- for (size_t i = 0 ; i < num_entities_; ++i) {
115
- tree.emplace (points_[i][0 ], (payload_t )i);
116
- }
117
- break ;
118
- }
119
- case MULTIMAP: {
120
- for (size_t i = 0 ; i < num_entities_; ++i) {
121
- tree.emplace (points_[i][0 ], (payload_t )i);
122
- }
123
- break ;
124
- }
125
- case HASH_MAP: {
120
+ default : {
126
121
for (size_t i = 0 ; i < num_entities_; ++i) {
127
122
tree.emplace (points_[i][0 ], (payload_t )i);
128
123
}
@@ -137,79 +132,90 @@ void IndexBenchmark<DIM, TYPE>::Insert(benchmark::State& state, Index& tree) {
137
132
} // namespace
138
133
139
134
template <typename ... Arguments>
140
- void PhTree3D_MAP_INS_3 (benchmark::State& state, Arguments&&... arguments) {
135
+ void BPT_MAP_INS_3D (benchmark::State& state, Arguments&&... arguments) {
141
136
IndexBenchmark<3 , MAP> benchmark{state, arguments...};
142
137
benchmark.Benchmark (state);
143
138
}
144
139
145
140
template <typename ... Arguments>
146
- void PhTree4D_MAP_INS_4 (benchmark::State& state, Arguments&&... arguments) {
141
+ void BPT_MAP_INS_4D (benchmark::State& state, Arguments&&... arguments) {
147
142
IndexBenchmark<4 , MAP> benchmark{state, arguments...};
148
143
benchmark.Benchmark (state);
149
144
}
150
145
151
146
template <typename ... Arguments>
152
- void PhTree6D_MAP_INS_6 (benchmark::State& state, Arguments&&... arguments) {
147
+ void BPT_MAP_INS_6D (benchmark::State& state, Arguments&&... arguments) {
153
148
IndexBenchmark<6 , MAP> benchmark{state, arguments...};
154
149
benchmark.Benchmark (state);
155
150
}
156
151
157
152
template <typename ... Arguments>
158
- void PhTree3D_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
153
+ void BPT_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
159
154
IndexBenchmark<3 , MAP> benchmark{state, arguments...};
160
155
benchmark.Benchmark (state);
161
156
}
162
157
163
158
template <typename ... Arguments>
164
- void PhTree3D_MM_INS (benchmark::State& state, Arguments&&... arguments) {
159
+ void BPT_MM_INS (benchmark::State& state, Arguments&&... arguments) {
165
160
IndexBenchmark<3 , MULTIMAP> benchmark{state, arguments...};
166
161
benchmark.Benchmark (state);
167
162
}
168
163
169
164
template <typename ... Arguments>
170
- void PhTree3D_HM_INS (benchmark::State& state, Arguments&&... arguments) {
165
+ void BPT_HM_INS (benchmark::State& state, Arguments&&... arguments) {
171
166
IndexBenchmark<3 , HASH_MAP> benchmark{state, arguments...};
172
167
benchmark.Benchmark (state);
173
168
}
174
169
175
170
template <typename ... Arguments>
176
- void PhTree3D_STD_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
177
- IndexBenchmark<3 , HASH_MAP> benchmark{state, arguments...};
171
+ void STD_MAP_INS (benchmark::State& state, Arguments&&... arguments) {
172
+ IndexBenchmark<3 , STD_MAP> benchmark{state, arguments...};
173
+ benchmark.Benchmark (state);
174
+ }
175
+
176
+ template <typename ... Arguments>
177
+ void STD_MULTIMAP_INS (benchmark::State& state, Arguments&&... arguments) {
178
+ IndexBenchmark<3 , STD_MULTIMAP> benchmark{state, arguments...};
178
179
benchmark.Benchmark (state);
179
180
}
180
181
181
182
// index type, scenario name, data_generator, num_entities, function_to_call
182
- BENCHMARK_CAPTURE (PhTree3D_MAP_INS_3 , MAP, 0.0 )
183
+ BENCHMARK_CAPTURE (BPT_MAP_INS_3D , MAP, 0.0 )
183
184
->RangeMultiplier(2 )
184
185
->Ranges({{2 , 8 }, {TestGenerator::CUBE, TestGenerator::CUBE}})
185
186
->Unit(benchmark::kMillisecond );
186
187
187
- BENCHMARK_CAPTURE (PhTree4D_MAP_INS_4 , MAP, 0.0 )
188
+ BENCHMARK_CAPTURE (BPT_MAP_INS_4D , MAP, 0.0 )
188
189
->RangeMultiplier(2 )
189
190
->Ranges({{2 , 16 }, {TestGenerator::CUBE, TestGenerator::CUBE}})
190
191
->Unit(benchmark::kMillisecond );
191
192
192
- BENCHMARK_CAPTURE (PhTree6D_MAP_INS_6 , MAP, 0.0 )
193
+ BENCHMARK_CAPTURE (BPT_MAP_INS_6D , MAP, 0.0 )
193
194
->RangeMultiplier(2 )
194
195
->Ranges({{2 , 32 }, {TestGenerator::CUBE, TestGenerator::CUBE}})
195
196
->Unit(benchmark::kMillisecond );
196
197
197
- BENCHMARK_CAPTURE (PhTree3D_MAP_INS, MAP, 0.0 )
198
+ BENCHMARK_CAPTURE (BPT_MAP_INS, MAP, 0.0 )
199
+ ->RangeMultiplier(10 )
200
+ ->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER, TestGenerator::CUBE}})
201
+ ->Unit(benchmark::kMillisecond );
202
+
203
+ BENCHMARK_CAPTURE (BPT_MM_INS, MULTIMAP, 0.0 )
198
204
->RangeMultiplier(10 )
199
205
->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER, TestGenerator::CUBE}})
200
206
->Unit(benchmark::kMillisecond );
201
207
202
- BENCHMARK_CAPTURE (PhTree3D_MM_INS, MULTIMAP , 0.0 )
208
+ BENCHMARK_CAPTURE (BPT_HM_INS, HASH_MAP , 0.0 )
203
209
->RangeMultiplier(10 )
204
210
->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER, TestGenerator::CUBE}})
205
211
->Unit(benchmark::kMillisecond );
206
212
207
- BENCHMARK_CAPTURE (PhTree3D_HM_INS, HASH_MAP , 0.0 )
213
+ BENCHMARK_CAPTURE (STD_MULTIMAP_INS, STD_MULTIMAP , 0.0 )
208
214
->RangeMultiplier(10 )
209
215
->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER, TestGenerator::CUBE}})
210
216
->Unit(benchmark::kMillisecond );
211
217
212
- BENCHMARK_CAPTURE (PhTree3D_STD_MAP_INS , STD_MAP, 0.0 )
218
+ BENCHMARK_CAPTURE (STD_MAP_INS , STD_MAP, 0.0 )
213
219
->RangeMultiplier(10 )
214
220
->Ranges({{100 , 100 * 1000 }, {TestGenerator::CLUSTER, TestGenerator::CUBE}})
215
221
->Unit(benchmark::kMillisecond );
0 commit comments