MCPcopy Create free account
hub / github.com/cameron314/readerwriterqueue / runBenchmark

Function runBenchmark

benchmarks/bench.cpp:234–457  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

232
233template<typename TQueue>
234double runBenchmark(BenchmarkType benchmark, unsigned int randomSeed, double& out_Ops)
235{
236 typedef unsigned long long counter_t;
237
238 SystemTime start;
239 double result = 0;
240 volatile int forceNoOptimizeDummy;
241
242 switch (benchmark) {
243 case bench_raw_add: {
244 const counter_t MAX = 100 * 1000;
245 out_Ops = MAX;
246 TQueue q(MAX);
247 int num = 0;
248 start = getSystemTime();
249 for (counter_t i = 0; i != MAX; ++i) {
250 q.enqueue(num);
251 ++num;
252 }
253 result = getTimeDelta(start);
254
255 int temp = -1;
256 q.try_dequeue(temp);
257 forceNoOptimizeDummy = temp;
258 } break;
259 case bench_raw_remove: {
260 const counter_t MAX = 100 * 1000;
261 out_Ops = MAX;
262 TQueue q(MAX);
263 int num = 0;
264 for (counter_t i = 0; i != MAX; ++i) {
265 q.enqueue(num);
266 ++num;
267 }
268
269 int element = -1;
270 int total = 0;
271 num = 0;
272 start = getSystemTime();
273 for (counter_t i = 0; i != MAX; ++i) {
274 bool success = q.try_dequeue(element);
275 assert(success && num++ == element);
276 UNUSED(success);
277 total += element;
278 }
279 result = getTimeDelta(start);
280 assert(!q.try_dequeue(element));
281 forceNoOptimizeDummy = total;
282 } break;
283 case bench_empty_remove: {
284 const counter_t MAX = 2000 * 1000;
285 out_Ops = MAX;
286 TQueue q(MAX);
287 int total = 0;
288 start = getSystemTime();
289 SimpleThread consumer([&]() {
290 int element;
291 for (counter_t i = 0; i != MAX; ++i) {

Callers

nothing calls this directly

Calls 5

getSystemTimeFunction · 0.85
getTimeDeltaFunction · 0.85
joinMethod · 0.80
enqueueMethod · 0.45
try_dequeueMethod · 0.45

Tested by

no test coverage detected