brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · 62b5b95 Raw
186 lines · plain
1 2#undef NDEBUG3 4#include <chrono>5#include <thread>6 7#include "../src/timers.h"8#include "benchmark/benchmark.h"9#include "output_test.h"10 11static const std::chrono::duration<double, std::milli> time_frame(50);12static const double time_frame_in_sec(13    std::chrono::duration_cast<std::chrono::duration<double, std::ratio<1, 1>>>(14        time_frame)15        .count());16 17void MyBusySpinwait() {18  const auto start = benchmark::ChronoClockNow();19 20  while (true) {21    const auto now = benchmark::ChronoClockNow();22    const auto elapsed = now - start;23 24    if (std::chrono::duration<double, std::chrono::seconds::period>(elapsed) >=25        time_frame)26      return;27  }28}29 30// ========================================================================= //31// --------------------------- TEST CASES BEGIN ---------------------------- //32// ========================================================================= //33 34// ========================================================================= //35// BM_MainThread36 37void BM_MainThread(benchmark::State& state) {38  for (auto _ : state) {39    MyBusySpinwait();40    state.SetIterationTime(time_frame_in_sec);41  }42  state.counters["invtime"] =43      benchmark::Counter{1, benchmark::Counter::kIsRate};44}45 46BENCHMARK(BM_MainThread)->Iterations(1)->Threads(1);47BENCHMARK(BM_MainThread)->Iterations(1)->Threads(1)->UseRealTime();48BENCHMARK(BM_MainThread)->Iterations(1)->Threads(1)->UseManualTime();49BENCHMARK(BM_MainThread)->Iterations(1)->Threads(1)->MeasureProcessCPUTime();50BENCHMARK(BM_MainThread)51    ->Iterations(1)52    ->Threads(1)53    ->MeasureProcessCPUTime()54    ->UseRealTime();55BENCHMARK(BM_MainThread)56    ->Iterations(1)57    ->Threads(1)58    ->MeasureProcessCPUTime()59    ->UseManualTime();60 61BENCHMARK(BM_MainThread)->Iterations(1)->Threads(2);62BENCHMARK(BM_MainThread)->Iterations(1)->Threads(2)->UseRealTime();63BENCHMARK(BM_MainThread)->Iterations(1)->Threads(2)->UseManualTime();64BENCHMARK(BM_MainThread)->Iterations(1)->Threads(2)->MeasureProcessCPUTime();65BENCHMARK(BM_MainThread)66    ->Iterations(1)67    ->Threads(2)68    ->MeasureProcessCPUTime()69    ->UseRealTime();70BENCHMARK(BM_MainThread)71    ->Iterations(1)72    ->Threads(2)73    ->MeasureProcessCPUTime()74    ->UseManualTime();75 76// ========================================================================= //77// BM_WorkerThread78 79void BM_WorkerThread(benchmark::State& state) {80  for (auto _ : state) {81    std::thread Worker(&MyBusySpinwait);82    Worker.join();83    state.SetIterationTime(time_frame_in_sec);84  }85  state.counters["invtime"] =86      benchmark::Counter{1, benchmark::Counter::kIsRate};87}88 89BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(1);90BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(1)->UseRealTime();91BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(1)->UseManualTime();92BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(1)->MeasureProcessCPUTime();93BENCHMARK(BM_WorkerThread)94    ->Iterations(1)95    ->Threads(1)96    ->MeasureProcessCPUTime()97    ->UseRealTime();98BENCHMARK(BM_WorkerThread)99    ->Iterations(1)100    ->Threads(1)101    ->MeasureProcessCPUTime()102    ->UseManualTime();103 104BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(2);105BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(2)->UseRealTime();106BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(2)->UseManualTime();107BENCHMARK(BM_WorkerThread)->Iterations(1)->Threads(2)->MeasureProcessCPUTime();108BENCHMARK(BM_WorkerThread)109    ->Iterations(1)110    ->Threads(2)111    ->MeasureProcessCPUTime()112    ->UseRealTime();113BENCHMARK(BM_WorkerThread)114    ->Iterations(1)115    ->Threads(2)116    ->MeasureProcessCPUTime()117    ->UseManualTime();118 119// ========================================================================= //120// BM_MainThreadAndWorkerThread121 122void BM_MainThreadAndWorkerThread(benchmark::State& state) {123  for (auto _ : state) {124    std::thread Worker(&MyBusySpinwait);125    MyBusySpinwait();126    Worker.join();127    state.SetIterationTime(time_frame_in_sec);128  }129  state.counters["invtime"] =130      benchmark::Counter{1, benchmark::Counter::kIsRate};131}132 133BENCHMARK(BM_MainThreadAndWorkerThread)->Iterations(1)->Threads(1);134BENCHMARK(BM_MainThreadAndWorkerThread)135    ->Iterations(1)136    ->Threads(1)137    ->UseRealTime();138BENCHMARK(BM_MainThreadAndWorkerThread)139    ->Iterations(1)140    ->Threads(1)141    ->UseManualTime();142BENCHMARK(BM_MainThreadAndWorkerThread)143    ->Iterations(1)144    ->Threads(1)145    ->MeasureProcessCPUTime();146BENCHMARK(BM_MainThreadAndWorkerThread)147    ->Iterations(1)148    ->Threads(1)149    ->MeasureProcessCPUTime()150    ->UseRealTime();151BENCHMARK(BM_MainThreadAndWorkerThread)152    ->Iterations(1)153    ->Threads(1)154    ->MeasureProcessCPUTime()155    ->UseManualTime();156 157BENCHMARK(BM_MainThreadAndWorkerThread)->Iterations(1)->Threads(2);158BENCHMARK(BM_MainThreadAndWorkerThread)159    ->Iterations(1)160    ->Threads(2)161    ->UseRealTime();162BENCHMARK(BM_MainThreadAndWorkerThread)163    ->Iterations(1)164    ->Threads(2)165    ->UseManualTime();166BENCHMARK(BM_MainThreadAndWorkerThread)167    ->Iterations(1)168    ->Threads(2)169    ->MeasureProcessCPUTime();170BENCHMARK(BM_MainThreadAndWorkerThread)171    ->Iterations(1)172    ->Threads(2)173    ->MeasureProcessCPUTime()174    ->UseRealTime();175BENCHMARK(BM_MainThreadAndWorkerThread)176    ->Iterations(1)177    ->Threads(2)178    ->MeasureProcessCPUTime()179    ->UseManualTime();180 181// ========================================================================= //182// ---------------------------- TEST CASES END ----------------------------- //183// ========================================================================= //184 185int main(int argc, char* argv[]) { RunOutputTests(argc, argv); }186