brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 9f6db4a Raw
80 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710 11#include <algorithm>12#include <deque>13#include <ranges>14 15#include "benchmark/benchmark.h"16 17namespace {18void run_sizes(auto benchmark) {19  benchmark->Arg(0)20      ->Arg(1)21      ->Arg(2)22      ->Arg(64)23      ->Arg(512)24      ->Arg(1024)25      ->Arg(4000)26      ->Arg(4096)27      ->Arg(5500)28      ->Arg(64000)29      ->Arg(65536)30      ->Arg(70000);31}32 33void BM_join_view_in_vectors(benchmark::State& state) {34  auto size = state.range(0);35  std::vector<std::vector<int>> input(size, std::vector<int>(32));36  std::ranges::fill(input | std::views::join, 10);37  std::vector<int> output;38  output.resize(size * 32);39 40  for (auto _ : state) {41    benchmark::DoNotOptimize(input);42    benchmark::DoNotOptimize(output);43    std::ranges::copy(input | std::views::join, output.begin());44  }45}46BENCHMARK(BM_join_view_in_vectors)->Apply(run_sizes);47 48void BM_join_view_out_vectors(benchmark::State& state) {49  auto size = state.range(0);50  std::vector<std::vector<int>> output(size, std::vector<int>(32));51  std::vector<int> input;52  input.resize(size * 32);53  std::ranges::fill(input, 10);54 55  for (auto _ : state) {56    benchmark::DoNotOptimize(output);57    benchmark::DoNotOptimize(input);58    std::ranges::copy(input, (output | std::views::join).begin());59  }60}61BENCHMARK(BM_join_view_out_vectors)->Apply(run_sizes);62 63void BM_join_view_deques(benchmark::State& state) {64  auto size = state.range(0);65  std::deque<std::deque<int>> deque(size, std::deque<int>(32));66  std::ranges::fill(deque | std::views::join, 10);67  std::vector<int> output;68  output.resize(size * 32);69 70  for (auto _ : state) {71    benchmark::DoNotOptimize(deque);72    benchmark::DoNotOptimize(output);73    std::ranges::copy(deque | std::views::join, output.begin());74  }75}76BENCHMARK(BM_join_view_deques)->Apply(run_sizes);77} // namespace78 79BENCHMARK_MAIN();80