|
@ -4,33 +4,69 @@ |
|
|
#include "ranges/ranges.h" |
|
|
#include "ranges/ranges.h" |
|
|
#include "all_cases/all_cases.h" |
|
|
#include "all_cases/all_cases.h" |
|
|
|
|
|
|
|
|
|
|
|
using klotski::cases::Ranges; |
|
|
using klotski::cases::AllCases; |
|
|
using klotski::cases::AllCases; |
|
|
using klotski::cases::BasicRanges; |
|
|
using klotski::cases::BasicRanges; |
|
|
|
|
|
using klotski::cases::RangesUnion; |
|
|
|
|
|
|
|
|
static void SpawnRanges(benchmark::State &state) { |
|
|
using klotski::group::BLOCK_NUM; |
|
|
// constexpr auto nums = target_nums();
|
|
|
using klotski::cases::ALL_CASES_NUM; |
|
|
|
|
|
using klotski::cases::BASIC_RANGES_NUM_; |
|
|
for (auto _ : state) { |
|
|
|
|
|
|
|
|
|
|
|
klotski::cases::Ranges kk {}; |
|
|
Ranges ranges_samples(const size_t num) { |
|
|
kk.reserve(7311921); |
|
|
auto &ranges = BasicRanges::instance().fetch(); |
|
|
|
|
|
const size_t part_size = ranges.size() / num; |
|
|
|
|
|
const size_t offset = part_size / 2; |
|
|
|
|
|
|
|
|
// for (uint32_t type_id = 0; type_id < klotski::cases::TYPE_ID_LIMIT; ++type_id) {
|
|
|
Ranges result; |
|
|
for (auto [n, n_2x1, n_1x1] : klotski::group::BLOCK_NUM) { |
|
|
for (size_t i = 0; i < num; ++i) { |
|
|
kk.spawn(n, n_2x1, n_1x1); |
|
|
result.emplace_back(ranges[i * part_size + offset]); |
|
|
} |
|
|
} |
|
|
// }
|
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void CheckRanges(benchmark::State &state) { |
|
|
|
|
|
auto ranges = ranges_samples(state.range(0)); |
|
|
|
|
|
ranges.reverse(); |
|
|
|
|
|
for (auto _ : state) { |
|
|
|
|
|
for (const auto range : ranges) { |
|
|
|
|
|
for (const auto head : RangesUnion::Heads) { |
|
|
|
|
|
benchmark::DoNotOptimize(Ranges::check(static_cast<int>(head), range)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
state.SetItemsProcessed(state.iterations() * state.range(0) * 12); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static void RangesReverse(benchmark::State &state) { |
|
|
static void ReverseRanges(benchmark::State &state) { |
|
|
auto ranges = BasicRanges::instance().fetch(); |
|
|
auto ranges = BasicRanges::instance().fetch(); |
|
|
for (auto _ : state) { |
|
|
for (auto _ : state) { |
|
|
ranges.reverse(); |
|
|
ranges.reverse(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void SpawnRanges(benchmark::State &state) { |
|
|
|
|
|
for (auto _ : state) { |
|
|
|
|
|
Ranges ranges {}; |
|
|
|
|
|
ranges.reserve(BASIC_RANGES_NUM_); |
|
|
|
|
|
for (const auto [n, n_2x1, n_1x1] : BLOCK_NUM) { |
|
|
|
|
|
ranges.spawn(n, n_2x1, n_1x1); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void DeriveRanges(benchmark::State &state) { |
|
|
|
|
|
auto ranges = BasicRanges::instance().fetch(); |
|
|
|
|
|
ranges.reverse(); |
|
|
|
|
|
for (auto _ : state) { |
|
|
|
|
|
RangesUnion cases; |
|
|
|
|
|
for (const auto head : RangesUnion::Heads) { |
|
|
|
|
|
cases.ranges(head).reserve(ALL_CASES_NUM[head]); |
|
|
|
|
|
ranges.derive(static_cast<int>(head), cases.ranges(head)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
static void RangesUnionExport(benchmark::State &state) { |
|
|
static void RangesUnionExport(benchmark::State &state) { |
|
|
auto &all_cases = AllCases::instance().fetch(); |
|
|
auto &all_cases = AllCases::instance().fetch(); |
|
|
for (auto _ : state) { |
|
|
for (auto _ : state) { |
|
@ -77,14 +113,18 @@ static void RangesAt(benchmark::State &state) { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
BENCHMARK(CheckRanges)->Unit(benchmark::kMicrosecond)->Range(16, 256); |
|
|
|
|
|
|
|
|
|
|
|
// BENCHMARK(ReverseRanges)->Unit(benchmark::kMillisecond);
|
|
|
|
|
|
|
|
|
// BENCHMARK(SpawnRanges)->Unit(benchmark::kMillisecond);
|
|
|
// BENCHMARK(SpawnRanges)->Unit(benchmark::kMillisecond);
|
|
|
|
|
|
|
|
|
// BENCHMARK(RangesReverse)->Unit(benchmark::kMillisecond);
|
|
|
// BENCHMARK(DeriveRanges)->Unit(benchmark::kMillisecond);
|
|
|
|
|
|
|
|
|
// BENCHMARK(RangesUnionExport)->Unit(benchmark::kMillisecond);
|
|
|
// BENCHMARK(RangesUnionExport)->Unit(benchmark::kMillisecond);
|
|
|
|
|
|
|
|
|
// BENCHMARK(RangesSize);
|
|
|
// BENCHMARK(RangesSize);
|
|
|
|
|
|
|
|
|
BENCHMARK(RangesAt); |
|
|
// BENCHMARK(RangesAt);
|
|
|
|
|
|
|
|
|
BENCHMARK_MAIN(); |
|
|
BENCHMARK_MAIN(); |
|
|