4

我想使用 Google Benchmark 对各种排序算法进行基准测试。如果我使用

static void StdSort(benchmark::State& state) {
  auto v = generate_random_vector(state.range(0));
  for (auto _ : state)
    std::sort(std::begin(v), std::end(v));
}
BENCHMARK(StdSort)->Arg(10)->Arg(1000)->Arg(1'000'000);

大多数情况下,我最终都会对预先排序的向量进行排序。我在手册中读到我可以使用手动计时来仅对我关心的部分进行基准测试:

static void StdSort(benchmark::State& state) {
  auto v = generate_random_vector(state.range(0));
  std::default_random_engine gen;
  for (auto _ : state) {
    auto start = std::chrono::high_resolution_clock::now();
    std::sort(std::begin(v), std::end(v));
    auto end = std::chrono::high_resolution_clock::now();
    auto elapsed_seconds =
        std::chrono::duration_cast<std::chrono::duration<double>>(end - start);

    state.SetIterationTime(elapsed_seconds.count());
    std::shuffle(std::begin(v), std::end(v), gen);
  }
}
BENCHMARK(StdSort)->Arg(10)->Arg(1000)->Arg(1'000'000)->UseManualTime();

这是使用 Google Benchmark 对排序算法进行基准测试的正确方法吗?有更好的方法吗?

4

0 回答 0