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

Function main

benchmarks/bench.cpp:79–230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

77
78
79int main(int argc, char** argv)
80{
81#ifdef NDEBUG
82 const int TEST_COUNT = 25;
83#else
84 const int TEST_COUNT = 2;
85#endif
86 assert(TEST_COUNT >= 2);
87
88 const double FASTEST_PERCENT_CONSIDERED = 20; // Consider only the fastest runs in the top 20%
89
90 double rwqResults[BENCHMARK_COUNT][TEST_COUNT];
91 double brwcbResults[BENCHMARK_COUNT][TEST_COUNT];
92 double spscResults[BENCHMARK_COUNT][TEST_COUNT];
93 double follyResults[BENCHMARK_COUNT][TEST_COUNT];
94
95 // Also calculate a rough heuristic of "ops/s" (across all runs, not just fastest)
96 double rwqOps[BENCHMARK_COUNT][TEST_COUNT];
97 double brwcbOps[BENCHMARK_COUNT][TEST_COUNT];
98 double spscOps[BENCHMARK_COUNT][TEST_COUNT];
99 double follyOps[BENCHMARK_COUNT][TEST_COUNT];
100
101 // Make sure the randomness of each benchmark run is identical
102 unsigned int randSeeds[BENCHMARK_COUNT];
103 for (unsigned int i = 0; i != BENCHMARK_COUNT; ++i) {
104 randSeeds[i] = ((unsigned int)time(NULL)) * i;
105 }
106
107 // Run benchmarks
108 for (int benchmark = 0; benchmark < BENCHMARK_COUNT; ++benchmark) {
109 for (int i = 0; i < TEST_COUNT; ++i) {
110 rwqResults[benchmark][i] = runBenchmark<ReaderWriterQueue<int>>((BenchmarkType)benchmark, randSeeds[benchmark], rwqOps[benchmark][i]);
111 }
112#ifndef NO_CIRCULAR_BUFFER_SUPPORT
113 for (int i = 0; i < TEST_COUNT; ++i) {
114 brwcbResults[benchmark][i] = runBenchmark<BlockingReaderWriterCircularBufferAdapter<int>>((BenchmarkType)benchmark, randSeeds[benchmark], brwcbOps[benchmark][i]);
115 }
116#else
117 for (int i = 0; i < TEST_COUNT; ++i) {
118 brwcbResults[benchmark][i] = 0;
119 brwcbOps[benchmark][i] = 0;
120 }
121#endif
122#ifndef NO_SPSC_SUPPORT
123 for (int i = 0; i < TEST_COUNT; ++i) {
124 spscResults[benchmark][i] = runBenchmark<spsc_queue<int>>((BenchmarkType)benchmark, randSeeds[benchmark], spscOps[benchmark][i]);
125 }
126#else
127 for (int i = 0; i < TEST_COUNT; ++i) {
128 spscResults[benchmark][i] = 0;
129 spscOps[benchmark][i] = 0;
130 }
131#endif
132#ifndef NO_FOLLY_SUPPORT
133 for (int i = 0; i < TEST_COUNT; ++i) {
134 follyResults[benchmark][i] = runBenchmark<ProducerConsumerQueue<int>>((BenchmarkType)benchmark, randSeeds[benchmark], follyOps[benchmark][i]);
135 }
136#else

Callers

nothing calls this directly

Calls 1

benchmarkNameFunction · 0.85

Tested by

no test coverage detected