diff options
| author | Eric Fiselier <eric@efcs.ca> | 2016-11-05 00:30:27 +0000 |
|---|---|---|
| committer | Eric Fiselier <eric@efcs.ca> | 2016-11-05 00:30:27 +0000 |
| commit | fbc9ff244c0da5a8e4e566b70a8fec3a50d88532 (patch) | |
| tree | 4143967ceb2630a5493a109e7a41e237bb34e422 /libcxx/utils/google-benchmark/test/benchmark_test.cc | |
| parent | 3a6f331d2d044e15f2e3b54bd776ba882ad06e52 (diff) | |
| download | bcm5719-llvm-fbc9ff244c0da5a8e4e566b70a8fec3a50d88532.tar.gz bcm5719-llvm-fbc9ff244c0da5a8e4e566b70a8fec3a50d88532.zip | |
Upgrade in-tree google benchmark to v1.1
llvm-svn: 286029
Diffstat (limited to 'libcxx/utils/google-benchmark/test/benchmark_test.cc')
| -rw-r--r-- | libcxx/utils/google-benchmark/test/benchmark_test.cc | 93 |
1 files changed, 55 insertions, 38 deletions
diff --git a/libcxx/utils/google-benchmark/test/benchmark_test.cc b/libcxx/utils/google-benchmark/test/benchmark_test.cc index fe7d82c6a84..d832f81ae43 100644 --- a/libcxx/utils/google-benchmark/test/benchmark_test.cc +++ b/libcxx/utils/google-benchmark/test/benchmark_test.cc @@ -4,6 +4,7 @@ #include <math.h> #include <stdint.h> +#include <chrono> #include <cstdlib> #include <iostream> #include <limits> @@ -13,15 +14,14 @@ #include <set> #include <sstream> #include <string> -#include <vector> -#include <chrono> #include <thread> #include <utility> +#include <vector> #if defined(__GNUC__) -# define BENCHMARK_NOINLINE __attribute__((noinline)) +#define BENCHMARK_NOINLINE __attribute__((noinline)) #else -# define BENCHMARK_NOINLINE +#define BENCHMARK_NOINLINE #endif namespace { @@ -42,8 +42,7 @@ double CalculatePi(int depth) { std::set<int> ConstructRandomSet(int size) { std::set<int> s; - for (int i = 0; i < size; ++i) - s.insert(i); + for (int i = 0; i < size; ++i) s.insert(i); return s; } @@ -54,8 +53,7 @@ std::vector<int>* test_vector = nullptr; static void BM_Factorial(benchmark::State& state) { int fac_42 = 0; - while (state.KeepRunning()) - fac_42 = Factorial(8); + while (state.KeepRunning()) fac_42 = Factorial(8); // Prevent compiler optimizations std::stringstream ss; ss << fac_42; @@ -66,8 +64,7 @@ BENCHMARK(BM_Factorial)->UseRealTime(); static void BM_CalculatePiRange(benchmark::State& state) { double pi = 0.0; - while (state.KeepRunning()) - pi = CalculatePi(state.range(0)); + while (state.KeepRunning()) pi = CalculatePi(state.range(0)); std::stringstream ss; ss << pi; state.SetLabel(ss.str()); @@ -89,27 +86,27 @@ static void BM_SetInsert(benchmark::State& state) { state.PauseTiming(); std::set<int> data = ConstructRandomSet(state.range(0)); state.ResumeTiming(); - for (int j = 0; j < state.range(1); ++j) - data.insert(rand()); + for (int j = 0; j < state.range(1); ++j) data.insert(rand()); } state.SetItemsProcessed(state.iterations() * state.range(1)); state.SetBytesProcessed(state.iterations() * state.range(1) * sizeof(int)); } -BENCHMARK(BM_SetInsert)->Ranges({{1<<10,8<<10}, {1,10}}); +BENCHMARK(BM_SetInsert)->Ranges({{1 << 10, 8 << 10}, {1, 10}}); -template<typename Container, typename ValueType = typename Container::value_type> +template <typename Container, + typename ValueType = typename Container::value_type> static void BM_Sequential(benchmark::State& state) { ValueType v = 42; while (state.KeepRunning()) { Container c; - for (int i = state.range(0); --i; ) - c.push_back(v); + for (int i = state.range(0); --i;) c.push_back(v); } const size_t items_processed = state.iterations() * state.range(0); state.SetItemsProcessed(items_processed); state.SetBytesProcessed(items_processed * sizeof(v)); } -BENCHMARK_TEMPLATE2(BM_Sequential, std::vector<int>, int)->Range(1 << 0, 1 << 10); +BENCHMARK_TEMPLATE2(BM_Sequential, std::vector<int>, int) + ->Range(1 << 0, 1 << 10); BENCHMARK_TEMPLATE(BM_Sequential, std::list<int>)->Range(1 << 0, 1 << 10); // Test the variadic version of BENCHMARK_TEMPLATE in C++11 and beyond. #if __cplusplus >= 201103L @@ -119,10 +116,9 @@ BENCHMARK_TEMPLATE(BM_Sequential, std::vector<int>, int)->Arg(512); static void BM_StringCompare(benchmark::State& state) { std::string s1(state.range(0), '-'); std::string s2(state.range(0), '-'); - while (state.KeepRunning()) - benchmark::DoNotOptimize(s1.compare(s2)); + while (state.KeepRunning()) benchmark::DoNotOptimize(s1.compare(s2)); } -BENCHMARK(BM_StringCompare)->Range(1, 1<<20); +BENCHMARK(BM_StringCompare)->Range(1, 1 << 20); static void BM_SetupTeardown(benchmark::State& state) { if (state.thread_index == 0) { @@ -132,7 +128,7 @@ static void BM_SetupTeardown(benchmark::State& state) { int i = 0; while (state.KeepRunning()) { std::lock_guard<std::mutex> l(test_vector_mu); - if (i%2 == 0) + if (i % 2 == 0) test_vector->push_back(i); else test_vector->pop_back(); @@ -151,7 +147,7 @@ static void BM_LongTest(benchmark::State& state) { benchmark::DoNotOptimize(tracker += i); } } -BENCHMARK(BM_LongTest)->Range(1<<16,1<<28); +BENCHMARK(BM_LongTest)->Range(1 << 16, 1 << 28); static void BM_ParallelMemset(benchmark::State& state) { int size = state.range(0) / sizeof(int); @@ -180,20 +176,18 @@ BENCHMARK(BM_ParallelMemset)->Arg(10 << 20)->ThreadRange(1, 4); static void BM_ManualTiming(benchmark::State& state) { size_t slept_for = 0; int microseconds = state.range(0); - std::chrono::duration<double, std::micro> sleep_duration { - static_cast<double>(microseconds) - }; + std::chrono::duration<double, std::micro> sleep_duration{ + static_cast<double>(microseconds)}; while (state.KeepRunning()) { - auto start = std::chrono::high_resolution_clock::now(); + auto start = std::chrono::high_resolution_clock::now(); // Simulate some useful workload with a sleep - std::this_thread::sleep_for(std::chrono::duration_cast< - std::chrono::nanoseconds>(sleep_duration)); - auto end = std::chrono::high_resolution_clock::now(); + std::this_thread::sleep_for( + std::chrono::duration_cast<std::chrono::nanoseconds>(sleep_duration)); + auto end = std::chrono::high_resolution_clock::now(); auto elapsed = - std::chrono::duration_cast<std::chrono::duration<double>>( - end - start); + std::chrono::duration_cast<std::chrono::duration<double>>(end - start); state.SetIterationTime(elapsed.count()); slept_for += microseconds; @@ -205,20 +199,43 @@ BENCHMARK(BM_ManualTiming)->Range(1, 1 << 14)->UseManualTime(); #if __cplusplus >= 201103L -template <class ...Args> +template <class... Args> void BM_with_args(benchmark::State& state, Args&&...) { - while (state.KeepRunning()) {} + while (state.KeepRunning()) { + } } BENCHMARK_CAPTURE(BM_with_args, int_test, 42, 43, 44); -BENCHMARK_CAPTURE(BM_with_args, string_and_pair_test, - std::string("abc"), std::pair<int, double>(42, 3.8)); +BENCHMARK_CAPTURE(BM_with_args, string_and_pair_test, std::string("abc"), + std::pair<int, double>(42, 3.8)); void BM_non_template_args(benchmark::State& state, int, double) { - while(state.KeepRunning()) {} + while (state.KeepRunning()) { + } } BENCHMARK_CAPTURE(BM_non_template_args, basic_test, 0, 0); -#endif // __cplusplus >= 201103L +#endif // __cplusplus >= 201103L + +static void BM_DenseThreadRanges(benchmark::State& st) { + switch (st.range(0)) { + case 1: + assert(st.threads == 1 || st.threads == 2 || st.threads == 3); + break; + case 2: + assert(st.threads == 1 || st.threads == 3 || st.threads == 4); + break; + case 3: + assert(st.threads == 5 || st.threads == 8 || st.threads == 11 || + st.threads == 14); + break; + default: + assert(false && "Invalid test case number"); + } + while (st.KeepRunning()) { + } +} +BENCHMARK(BM_DenseThreadRanges)->Arg(1)->DenseThreadRange(1, 3); +BENCHMARK(BM_DenseThreadRanges)->Arg(2)->DenseThreadRange(1, 4, 2); +BENCHMARK(BM_DenseThreadRanges)->Arg(3)->DenseThreadRange(5, 14, 3); BENCHMARK_MAIN() - |

