diff options
author | 2021-01-11 15:31:56 +0000 | |
---|---|---|
committer | 2021-01-11 15:31:56 +0000 | |
commit | 16ff81ed8b1ed9aa06fb1a731a2446b66cc49bef (patch) | |
tree | 1a7dd8152b94f6f8cd318bfaf85aa40882854583 /lib/libcxx/benchmarks/ordered_set.bench.cpp | |
parent | sync (diff) | |
download | wireguard-openbsd-16ff81ed8b1ed9aa06fb1a731a2446b66cc49bef.tar.xz wireguard-openbsd-16ff81ed8b1ed9aa06fb1a731a2446b66cc49bef.zip |
Remove libc++ and libc++abi 8.0.0 now that we switched to version 10.0.1
in the gnu/ directory.
Diffstat (limited to 'lib/libcxx/benchmarks/ordered_set.bench.cpp')
-rw-r--r-- | lib/libcxx/benchmarks/ordered_set.bench.cpp | 249 |
1 files changed, 0 insertions, 249 deletions
diff --git a/lib/libcxx/benchmarks/ordered_set.bench.cpp b/lib/libcxx/benchmarks/ordered_set.bench.cpp deleted file mode 100644 index b2ef0725b7b..00000000000 --- a/lib/libcxx/benchmarks/ordered_set.bench.cpp +++ /dev/null @@ -1,249 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include <algorithm> -#include <cstdint> -#include <memory> -#include <random> -#include <set> -#include <string> -#include <vector> - -#include "CartesianBenchmarks.hpp" -#include "benchmark/benchmark.h" -#include "test_macros.h" - -namespace { - -enum class HitType { Hit, Miss }; - -struct AllHitTypes : EnumValuesAsTuple<AllHitTypes, HitType, 2> { - static constexpr const char* Names[] = {"Hit", "Miss"}; -}; - -enum class AccessPattern { Ordered, Random }; - -struct AllAccessPattern - : EnumValuesAsTuple<AllAccessPattern, AccessPattern, 2> { - static constexpr const char* Names[] = {"Ordered", "Random"}; -}; - -void sortKeysBy(std::vector<uint64_t>& Keys, AccessPattern AP) { - if (AP == AccessPattern::Random) { - std::random_device R; - std::mt19937 M(R()); - std::shuffle(std::begin(Keys), std::end(Keys), M); - } -} - -struct TestSets { - std::vector<std::set<uint64_t> > Sets; - std::vector<uint64_t> Keys; -}; - -TestSets makeTestingSets(size_t TableSize, size_t NumTables, HitType Hit, - AccessPattern Access) { - TestSets R; - R.Sets.resize(1); - - for (uint64_t I = 0; I < TableSize; ++I) { - R.Sets[0].insert(2 * I); - R.Keys.push_back(Hit == HitType::Hit ? 2 * I : 2 * I + 1); - } - R.Sets.resize(NumTables, R.Sets[0]); - sortKeysBy(R.Keys, Access); - - return R; -} - -struct Base { - size_t TableSize; - size_t NumTables; - Base(size_t T, size_t N) : TableSize(T), NumTables(N) {} - - bool skip() const { - size_t Total = TableSize * NumTables; - return Total < 100 || Total > 1000000; - } - - std::string baseName() const { - return "_TableSize" + std::to_string(TableSize) + "_NumTables" + - std::to_string(NumTables); - } -}; - -template <class Access> -struct Create : Base { - using Base::Base; - - void run(benchmark::State& State) const { - std::vector<uint64_t> Keys(TableSize); - std::iota(Keys.begin(), Keys.end(), uint64_t{0}); - sortKeysBy(Keys, Access()); - - while (State.KeepRunningBatch(TableSize * NumTables)) { - std::vector<std::set<uint64_t>> Sets(NumTables); - for (auto K : Keys) { - for (auto& Set : Sets) { - benchmark::DoNotOptimize(Set.insert(K)); - } - } - } - } - - std::string name() const { - return "BM_Create" + Access::name() + baseName(); - } -}; - -template <class Hit, class Access> -struct Find : Base { - using Base::Base; - - void run(benchmark::State& State) const { - auto Data = makeTestingSets(TableSize, NumTables, Hit(), Access()); - - while (State.KeepRunningBatch(TableSize * NumTables)) { - for (auto K : Data.Keys) { - for (auto& Set : Data.Sets) { - benchmark::DoNotOptimize(Set.find(K)); - } - } - } - } - - std::string name() const { - return "BM_Find" + Hit::name() + Access::name() + baseName(); - } -}; - -template <class Hit, class Access> -struct FindNeEnd : Base { - using Base::Base; - - void run(benchmark::State& State) const { - auto Data = makeTestingSets(TableSize, NumTables, Hit(), Access()); - - while (State.KeepRunningBatch(TableSize * NumTables)) { - for (auto K : Data.Keys) { - for (auto& Set : Data.Sets) { - benchmark::DoNotOptimize(Set.find(K) != Set.end()); - } - } - } - } - - std::string name() const { - return "BM_FindNeEnd" + Hit::name() + Access::name() + baseName(); - } -}; - -template <class Access> -struct InsertHit : Base { - using Base::Base; - - void run(benchmark::State& State) const { - auto Data = makeTestingSets(TableSize, NumTables, HitType::Hit, Access()); - - while (State.KeepRunningBatch(TableSize * NumTables)) { - for (auto K : Data.Keys) { - for (auto& Set : Data.Sets) { - benchmark::DoNotOptimize(Set.insert(K)); - } - } - } - } - - std::string name() const { - return "BM_InsertHit" + Access::name() + baseName(); - } -}; - -template <class Access> -struct InsertMissAndErase : Base { - using Base::Base; - - void run(benchmark::State& State) const { - auto Data = makeTestingSets(TableSize, NumTables, HitType::Miss, Access()); - - while (State.KeepRunningBatch(TableSize * NumTables)) { - for (auto K : Data.Keys) { - for (auto& Set : Data.Sets) { - benchmark::DoNotOptimize(Set.erase(Set.insert(K).first)); - } - } - } - } - - std::string name() const { - return "BM_InsertMissAndErase" + Access::name() + baseName(); - } -}; - -struct IterateRangeFor : Base { - using Base::Base; - - void run(benchmark::State& State) const { - auto Data = makeTestingSets(TableSize, NumTables, HitType::Miss, - AccessPattern::Ordered); - - while (State.KeepRunningBatch(TableSize * NumTables)) { - for (auto& Set : Data.Sets) { - for (auto& V : Set) { - benchmark::DoNotOptimize(V); - } - } - } - } - - std::string name() const { return "BM_IterateRangeFor" + baseName(); } -}; - -struct IterateBeginEnd : Base { - using Base::Base; - - void run(benchmark::State& State) const { - auto Data = makeTestingSets(TableSize, NumTables, HitType::Miss, - AccessPattern::Ordered); - - while (State.KeepRunningBatch(TableSize * NumTables)) { - for (auto& Set : Data.Sets) { - for (auto it = Set.begin(); it != Set.end(); ++it) { - benchmark::DoNotOptimize(*it); - } - } - } - } - - std::string name() const { return "BM_IterateBeginEnd" + baseName(); } -}; - -} // namespace - -int main(int argc, char** argv) { - benchmark::Initialize(&argc, argv); - if (benchmark::ReportUnrecognizedArguments(argc, argv)) - return 1; - - const std::vector<size_t> TableSize{1, 10, 100, 1000, 10000, 100000, 1000000}; - const std::vector<size_t> NumTables{1, 10, 100, 1000, 10000, 100000, 1000000}; - - makeCartesianProductBenchmark<Create, AllAccessPattern>(TableSize, NumTables); - makeCartesianProductBenchmark<Find, AllHitTypes, AllAccessPattern>( - TableSize, NumTables); - makeCartesianProductBenchmark<FindNeEnd, AllHitTypes, AllAccessPattern>( - TableSize, NumTables); - makeCartesianProductBenchmark<InsertHit, AllAccessPattern>( - TableSize, NumTables); - makeCartesianProductBenchmark<InsertMissAndErase, AllAccessPattern>( - TableSize, NumTables); - makeCartesianProductBenchmark<IterateRangeFor>(TableSize, NumTables); - makeCartesianProductBenchmark<IterateBeginEnd>(TableSize, NumTables); - benchmark::RunSpecifiedBenchmarks(); -} |