| 77 | |
| 78 | |
| 79 | int 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 |
nothing calls this directly
no test coverage detected