basic_test.cc 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "benchmark/benchmark.h"
  2. #define BASIC_BENCHMARK_TEST(x) BENCHMARK(x)->Arg(8)->Arg(512)->Arg(8192)
  3. void BM_empty(benchmark::State& state) {
  4. for (auto _ : state) {
  5. benchmark::DoNotOptimize(state.iterations());
  6. }
  7. }
  8. BENCHMARK(BM_empty);
  9. BENCHMARK(BM_empty)->ThreadPerCpu();
  10. void BM_spin_empty(benchmark::State& state) {
  11. for (auto _ : state) {
  12. for (int x = 0; x < state.range(0); ++x) {
  13. benchmark::DoNotOptimize(x);
  14. }
  15. }
  16. }
  17. BASIC_BENCHMARK_TEST(BM_spin_empty);
  18. BASIC_BENCHMARK_TEST(BM_spin_empty)->ThreadPerCpu();
  19. void BM_spin_pause_before(benchmark::State& state) {
  20. for (int i = 0; i < state.range(0); ++i) {
  21. benchmark::DoNotOptimize(i);
  22. }
  23. for (auto _ : state) {
  24. for (int i = 0; i < state.range(0); ++i) {
  25. benchmark::DoNotOptimize(i);
  26. }
  27. }
  28. }
  29. BASIC_BENCHMARK_TEST(BM_spin_pause_before);
  30. BASIC_BENCHMARK_TEST(BM_spin_pause_before)->ThreadPerCpu();
  31. void BM_spin_pause_during(benchmark::State& state) {
  32. for (auto _ : state) {
  33. state.PauseTiming();
  34. for (int i = 0; i < state.range(0); ++i) {
  35. benchmark::DoNotOptimize(i);
  36. }
  37. state.ResumeTiming();
  38. for (int i = 0; i < state.range(0); ++i) {
  39. benchmark::DoNotOptimize(i);
  40. }
  41. }
  42. }
  43. BASIC_BENCHMARK_TEST(BM_spin_pause_during);
  44. BASIC_BENCHMARK_TEST(BM_spin_pause_during)->ThreadPerCpu();
  45. void BM_pause_during(benchmark::State& state) {
  46. for (auto _ : state) {
  47. state.PauseTiming();
  48. state.ResumeTiming();
  49. }
  50. }
  51. BENCHMARK(BM_pause_during);
  52. BENCHMARK(BM_pause_during)->ThreadPerCpu();
  53. BENCHMARK(BM_pause_during)->UseRealTime();
  54. BENCHMARK(BM_pause_during)->UseRealTime()->ThreadPerCpu();
  55. void BM_spin_pause_after(benchmark::State& state) {
  56. for (auto _ : state) {
  57. for (int i = 0; i < state.range(0); ++i) {
  58. benchmark::DoNotOptimize(i);
  59. }
  60. }
  61. for (int i = 0; i < state.range(0); ++i) {
  62. benchmark::DoNotOptimize(i);
  63. }
  64. }
  65. BASIC_BENCHMARK_TEST(BM_spin_pause_after);
  66. BASIC_BENCHMARK_TEST(BM_spin_pause_after)->ThreadPerCpu();
  67. void BM_spin_pause_before_and_after(benchmark::State& state) {
  68. for (int i = 0; i < state.range(0); ++i) {
  69. benchmark::DoNotOptimize(i);
  70. }
  71. for (auto _ : state) {
  72. for (int i = 0; i < state.range(0); ++i) {
  73. benchmark::DoNotOptimize(i);
  74. }
  75. }
  76. for (int i = 0; i < state.range(0); ++i) {
  77. benchmark::DoNotOptimize(i);
  78. }
  79. }
  80. BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after);
  81. BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after)->ThreadPerCpu();
  82. void BM_empty_stop_start(benchmark::State& state) {
  83. for (auto _ : state) {
  84. }
  85. }
  86. BENCHMARK(BM_empty_stop_start);
  87. BENCHMARK(BM_empty_stop_start)->ThreadPerCpu();
  88. void BM_KeepRunning(benchmark::State& state) {
  89. size_t iter_count = 0;
  90. assert(iter_count == state.iterations());
  91. while (state.KeepRunning()) {
  92. ++iter_count;
  93. }
  94. assert(iter_count == state.iterations());
  95. }
  96. BENCHMARK(BM_KeepRunning);
  97. void BM_KeepRunningBatch(benchmark::State& state) {
  98. // Choose a prime batch size to avoid evenly dividing max_iterations.
  99. const size_t batch_size = 101;
  100. size_t iter_count = 0;
  101. while (state.KeepRunningBatch(batch_size)) {
  102. iter_count += batch_size;
  103. }
  104. assert(state.iterations() == iter_count);
  105. }
  106. BENCHMARK(BM_KeepRunningBatch);
  107. void BM_RangedFor(benchmark::State& state) {
  108. size_t iter_count = 0;
  109. for (auto _ : state) {
  110. ++iter_count;
  111. }
  112. assert(iter_count == state.max_iterations);
  113. }
  114. BENCHMARK(BM_RangedFor);
  115. // Ensure that StateIterator provides all the necessary typedefs required to
  116. // instantiate std::iterator_traits.
  117. static_assert(std::is_same<
  118. typename std::iterator_traits<benchmark::State::StateIterator>::value_type,
  119. typename benchmark::State::StateIterator::value_type>::value, "");
  120. BENCHMARK_MAIN();