diff options
Diffstat (limited to 'lib/libcxx/benchmarks')
-rw-r--r-- | lib/libcxx/benchmarks/CMakeLists.txt | 3 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/ContainerBenchmarks.hpp | 2 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/GenerateInput.hpp | 6 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/algorithms.bench.cpp | 4 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/filesystem.bench.cpp | 59 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/string.bench.cpp | 25 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/stringstream.bench.cpp | 4 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/unordered_set_operations.bench.cpp | 4 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/util_smartptr.bench.cpp | 4 | ||||
-rw-r--r-- | lib/libcxx/benchmarks/vector_operations.bench.cpp | 4 |
10 files changed, 82 insertions, 33 deletions
diff --git a/lib/libcxx/benchmarks/CMakeLists.txt b/lib/libcxx/benchmarks/CMakeLists.txt index 8211ebd009a..f557d4aea39 100644 --- a/lib/libcxx/benchmarks/CMakeLists.txt +++ b/lib/libcxx/benchmarks/CMakeLists.txt @@ -59,6 +59,7 @@ if (LIBCXX_BENCHMARK_NATIVE_STDLIB) -DBENCHMARK_ENABLE_TESTING:BOOL=OFF) endif() + #============================================================================== # Benchmark tests configuration #============================================================================== @@ -67,7 +68,7 @@ set(BENCHMARK_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(BENCHMARK_LIBCXX_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-libcxx) set(BENCHMARK_NATIVE_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-native) set(BENCHMARK_TEST_COMPILE_FLAGS - -std=c++14 -O2 + -std=c++17 -O2 -I${BENCHMARK_LIBCXX_INSTALL}/include -I${LIBCXX_SOURCE_DIR}/test/support ) diff --git a/lib/libcxx/benchmarks/ContainerBenchmarks.hpp b/lib/libcxx/benchmarks/ContainerBenchmarks.hpp index dc268e7ebca..509e3d23ed9 100644 --- a/lib/libcxx/benchmarks/ContainerBenchmarks.hpp +++ b/lib/libcxx/benchmarks/ContainerBenchmarks.hpp @@ -3,7 +3,7 @@ #include <cassert> -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" namespace ContainerBenchmarks { diff --git a/lib/libcxx/benchmarks/GenerateInput.hpp b/lib/libcxx/benchmarks/GenerateInput.hpp index 9d5adac4af4..8c97f5881f1 100644 --- a/lib/libcxx/benchmarks/GenerateInput.hpp +++ b/lib/libcxx/benchmarks/GenerateInput.hpp @@ -29,14 +29,16 @@ inline std::default_random_engine& getRandomEngine() { return RandEngine; } + inline char getRandomChar() { std::uniform_int_distribution<> LettersDist(0, LettersSize-1); return Letters[LettersDist(getRandomEngine())]; } template <class IntT> -inline IntT getRandomInteger() { - std::uniform_int_distribution<IntT> dist; +inline IntT getRandomInteger(IntT Min = 0, + IntT Max = std::numeric_limits<IntT>::max()) { + std::uniform_int_distribution<IntT> dist(Min, Max); return dist(getRandomEngine()); } diff --git a/lib/libcxx/benchmarks/algorithms.bench.cpp b/lib/libcxx/benchmarks/algorithms.bench.cpp index 745cc172718..86315390e0d 100644 --- a/lib/libcxx/benchmarks/algorithms.bench.cpp +++ b/lib/libcxx/benchmarks/algorithms.bench.cpp @@ -2,7 +2,7 @@ #include <vector> #include <cstdint> -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" #include "GenerateInput.hpp" constexpr std::size_t TestNumInputs = 1024; @@ -59,4 +59,4 @@ BENCHMARK_CAPTURE(BM_Sort, single_element_strings, getDuplicateStringInputs)->Arg(TestNumInputs); -BENCHMARK_MAIN() +BENCHMARK_MAIN(); diff --git a/lib/libcxx/benchmarks/filesystem.bench.cpp b/lib/libcxx/benchmarks/filesystem.bench.cpp index f7949a163a7..3e495605915 100644 --- a/lib/libcxx/benchmarks/filesystem.bench.cpp +++ b/lib/libcxx/benchmarks/filesystem.bench.cpp @@ -1,17 +1,14 @@ -#include <experimental/filesystem> - -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" #include "GenerateInput.hpp" #include "test_iterators.h" - -namespace fs = std::experimental::filesystem; +#include "filesystem_include.hpp" static const size_t TestNumInputs = 1024; template <class GenInputs> void BM_PathConstructString(benchmark::State &st, GenInputs gen) { - using namespace fs; + using fs::path; const auto in = gen(st.range(0)); path PP; for (auto& Part : in) @@ -21,14 +18,15 @@ void BM_PathConstructString(benchmark::State &st, GenInputs gen) { const path P(PP.native()); benchmark::DoNotOptimize(P.native().data()); } + st.SetComplexityN(st.range(0)); } BENCHMARK_CAPTURE(BM_PathConstructString, large_string, - getRandomStringInputs)->Arg(TestNumInputs); + getRandomStringInputs)->Range(8, TestNumInputs)->Complexity(); template <class GenInputs> void BM_PathConstructCStr(benchmark::State &st, GenInputs gen) { - using namespace fs; + using fs::path; const auto in = gen(st.range(0)); path PP; for (auto& Part : in) @@ -45,7 +43,7 @@ BENCHMARK_CAPTURE(BM_PathConstructCStr, large_string, template <template <class...> class ItType, class GenInputs> void BM_PathConstructIter(benchmark::State &st, GenInputs gen) { - using namespace fs; + using fs::path; using Iter = ItType<std::string::const_iterator>; const auto in = gen(st.range(0)); path PP; @@ -60,6 +58,7 @@ void BM_PathConstructIter(benchmark::State &st, GenInputs gen) { const path P(Start, End); benchmark::DoNotOptimize(P.native().data()); } + st.SetComplexityN(st.range(0)); } template <class GenInputs> void BM_PathConstructInputIter(benchmark::State &st, GenInputs gen) { @@ -70,14 +69,14 @@ void BM_PathConstructForwardIter(benchmark::State &st, GenInputs gen) { BM_PathConstructIter<forward_iterator>(st, gen); } BENCHMARK_CAPTURE(BM_PathConstructInputIter, large_string, - getRandomStringInputs)->Arg(TestNumInputs); + getRandomStringInputs)->Range(8, TestNumInputs)->Complexity(); BENCHMARK_CAPTURE(BM_PathConstructForwardIter, large_string, - getRandomStringInputs)->Arg(TestNumInputs); + getRandomStringInputs)->Range(8, TestNumInputs)->Complexity(); template <class GenInputs> void BM_PathIterateMultipleTimes(benchmark::State &st, GenInputs gen) { - using namespace fs; + using fs::path; const auto in = gen(st.range(0)); path PP; for (auto& Part : in) @@ -89,14 +88,15 @@ void BM_PathIterateMultipleTimes(benchmark::State &st, GenInputs gen) { } benchmark::ClobberMemory(); } + st.SetComplexityN(st.range(0)); } BENCHMARK_CAPTURE(BM_PathIterateMultipleTimes, iterate_elements, - getRandomStringInputs)->Arg(TestNumInputs); + getRandomStringInputs)->Range(8, TestNumInputs)->Complexity(); template <class GenInputs> void BM_PathIterateOnce(benchmark::State &st, GenInputs gen) { - using namespace fs; + using fs::path; const auto in = gen(st.range(0)); path PP; for (auto& Part : in) @@ -109,13 +109,14 @@ void BM_PathIterateOnce(benchmark::State &st, GenInputs gen) { } benchmark::ClobberMemory(); } + st.SetComplexityN(st.range(0)); } BENCHMARK_CAPTURE(BM_PathIterateOnce, iterate_elements, - getRandomStringInputs)->Arg(TestNumInputs); + getRandomStringInputs)->Range(8, TestNumInputs)->Complexity(); template <class GenInputs> void BM_PathIterateOnceBackwards(benchmark::State &st, GenInputs gen) { - using namespace fs; + using fs::path; const auto in = gen(st.range(0)); path PP; for (auto& Part : in) @@ -135,4 +136,28 @@ void BM_PathIterateOnceBackwards(benchmark::State &st, GenInputs gen) { BENCHMARK_CAPTURE(BM_PathIterateOnceBackwards, iterate_elements, getRandomStringInputs)->Arg(TestNumInputs); -BENCHMARK_MAIN() +static fs::path getRandomPaths(int NumParts, int PathLen) { + fs::path Result; + while (NumParts--) { + std::string Part = getRandomString(PathLen); + Result /= Part; + } + return Result; +} + +template <class GenInput> +void BM_LexicallyNormal(benchmark::State &st, GenInput gen, size_t PathLen) { + using fs::path; + auto In = gen(st.range(0), PathLen); + benchmark::DoNotOptimize(&In); + while (st.KeepRunning()) { + benchmark::DoNotOptimize(In.lexically_normal()); + } + st.SetComplexityN(st.range(0)); +} +BENCHMARK_CAPTURE(BM_LexicallyNormal, small_path, + getRandomPaths, /*PathLen*/5)->RangeMultiplier(2)->Range(2, 256)->Complexity(); +BENCHMARK_CAPTURE(BM_LexicallyNormal, large_path, + getRandomPaths, /*PathLen*/32)->RangeMultiplier(2)->Range(2, 256)->Complexity(); + +BENCHMARK_MAIN(); diff --git a/lib/libcxx/benchmarks/string.bench.cpp b/lib/libcxx/benchmarks/string.bench.cpp index ef892391688..8a09e738d9b 100644 --- a/lib/libcxx/benchmarks/string.bench.cpp +++ b/lib/libcxx/benchmarks/string.bench.cpp @@ -2,7 +2,7 @@ #include <vector> #include <cstdint> -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" #include "GenerateInput.hpp" constexpr std::size_t MAX_STRING_LEN = 8 << 14; @@ -46,4 +46,25 @@ static void BM_StringFindMatch2(benchmark::State &state) { } BENCHMARK(BM_StringFindMatch2)->Range(1, MAX_STRING_LEN / 4); -BENCHMARK_MAIN() +static void BM_StringCtorDefault(benchmark::State &state) { + while (state.KeepRunning()) { + for (unsigned I=0; I < 1000; ++I) { + std::string Default; + benchmark::DoNotOptimize(Default.c_str()); + } + } +} +BENCHMARK(BM_StringCtorDefault); + +static void BM_StringCtorCStr(benchmark::State &state) { + std::string Input = getRandomString(state.range(0)); + const char *Str = Input.c_str(); + benchmark::DoNotOptimize(Str); + while (state.KeepRunning()) { + std::string Tmp(Str); + benchmark::DoNotOptimize(Tmp.c_str()); + } +} +BENCHMARK(BM_StringCtorCStr)->Arg(1)->Arg(8)->Range(16, MAX_STRING_LEN / 4); + +BENCHMARK_MAIN(); diff --git a/lib/libcxx/benchmarks/stringstream.bench.cpp b/lib/libcxx/benchmarks/stringstream.bench.cpp index 6023cf775bc..75a7a284e07 100644 --- a/lib/libcxx/benchmarks/stringstream.bench.cpp +++ b/lib/libcxx/benchmarks/stringstream.bench.cpp @@ -1,4 +1,4 @@ -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" #include <sstream> double __attribute__((noinline)) istream_numbers(); @@ -35,4 +35,4 @@ static void BM_Istream_numbers(benchmark::State &state) { } BENCHMARK(BM_Istream_numbers)->RangeMultiplier(2)->Range(1024, 4096); -BENCHMARK_MAIN() +BENCHMARK_MAIN(); diff --git a/lib/libcxx/benchmarks/unordered_set_operations.bench.cpp b/lib/libcxx/benchmarks/unordered_set_operations.bench.cpp index e2afdde56dc..ee0ea29b8d2 100644 --- a/lib/libcxx/benchmarks/unordered_set_operations.bench.cpp +++ b/lib/libcxx/benchmarks/unordered_set_operations.bench.cpp @@ -5,7 +5,7 @@ #include <cstdlib> #include <cstring> -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" #include "ContainerBenchmarks.hpp" #include "GenerateInput.hpp" @@ -303,4 +303,4 @@ BENCHMARK_CAPTURE(BM_EmplaceDuplicate, std::unordered_set<std::string>{}, getRandomCStringInputs)->Arg(TestNumInputs); -BENCHMARK_MAIN() +BENCHMARK_MAIN(); diff --git a/lib/libcxx/benchmarks/util_smartptr.bench.cpp b/lib/libcxx/benchmarks/util_smartptr.bench.cpp index ad3f03a0448..c984b2ca666 100644 --- a/lib/libcxx/benchmarks/util_smartptr.bench.cpp +++ b/lib/libcxx/benchmarks/util_smartptr.bench.cpp @@ -9,7 +9,7 @@ #include <memory> -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" static void BM_SharedPtrCreateDestroy(benchmark::State& st) { while (st.KeepRunning()) { @@ -39,4 +39,4 @@ static void BM_WeakPtrIncDecRef(benchmark::State& st) { } BENCHMARK(BM_WeakPtrIncDecRef); -BENCHMARK_MAIN() +BENCHMARK_MAIN(); diff --git a/lib/libcxx/benchmarks/vector_operations.bench.cpp b/lib/libcxx/benchmarks/vector_operations.bench.cpp index 004e801f0be..a2c4e5dbbc0 100644 --- a/lib/libcxx/benchmarks/vector_operations.bench.cpp +++ b/lib/libcxx/benchmarks/vector_operations.bench.cpp @@ -4,7 +4,7 @@ #include <cstdlib> #include <cstring> -#include "benchmark/benchmark_api.h" +#include "benchmark/benchmark.h" #include "ContainerBenchmarks.hpp" #include "GenerateInput.hpp" @@ -29,4 +29,4 @@ BENCHMARK_CAPTURE(BM_ConstructIterIter, getRandomStringInputs)->Arg(TestNumInputs); -BENCHMARK_MAIN() +BENCHMARK_MAIN(); |