summaryrefslogtreecommitdiffstats
path: root/lib/libcxx/benchmarks
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2019-02-04 16:55:44 +0000
committerpatrick <patrick@openbsd.org>2019-02-04 16:55:44 +0000
commit76c648e7a477ffb2a882ad5ffe523269bd9a3f6a (patch)
tree29d319d598650bab04e4f58e5e8769567e33091e /lib/libcxx/benchmarks
parentImport libc++abi 7.0.1. (diff)
downloadwireguard-openbsd-76c648e7a477ffb2a882ad5ffe523269bd9a3f6a.tar.xz
wireguard-openbsd-76c648e7a477ffb2a882ad5ffe523269bd9a3f6a.zip
Import libc++ 7.0.1.
Diffstat (limited to 'lib/libcxx/benchmarks')
-rw-r--r--lib/libcxx/benchmarks/CMakeLists.txt3
-rw-r--r--lib/libcxx/benchmarks/ContainerBenchmarks.hpp2
-rw-r--r--lib/libcxx/benchmarks/GenerateInput.hpp6
-rw-r--r--lib/libcxx/benchmarks/algorithms.bench.cpp4
-rw-r--r--lib/libcxx/benchmarks/filesystem.bench.cpp59
-rw-r--r--lib/libcxx/benchmarks/string.bench.cpp25
-rw-r--r--lib/libcxx/benchmarks/stringstream.bench.cpp4
-rw-r--r--lib/libcxx/benchmarks/unordered_set_operations.bench.cpp4
-rw-r--r--lib/libcxx/benchmarks/util_smartptr.bench.cpp4
-rw-r--r--lib/libcxx/benchmarks/vector_operations.bench.cpp4
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();