Неверно время отчета о тестах Google для процессора

Я использую benchmark::RegisterBenchmark для сравнения моего кода. Для простого примера у меня есть:

static void BM_Factorial(benchmark::State& state) {
  std::string x = "hello";
  for (auto _ : state) {
    uint64_t fact = 1;
    for(int i=4; i< 100000; i++)
        benchmark::DoNotOptimize(fact *= i);
  }
}

void fun(){
  // Call this multiple times
  benchmark::RegisterBenchmark("timer ", &BM_Factorial);
  // do some work
  benchmark::RunSpecifiedBenchmarks();
}

Функция init выполняет:

 int dummy = 4;
  std::string arg0 = "--help";
  std::string arg1 = "--benchmark_report_aggregates_only=true";
  std::string arg2 = "--benchmark_display_aggregates_only=true";
  std::string arg3 = "--benchmark_repetitions=10000";
  char *args[4] = {
      const_cast<char *>(arg0.c_str()), const_cast<char *>(arg1.c_str()),
      const_cast<char *>(arg2.c_str()), const_cast<char *>(arg3.c_str())};
  benchmark::Initialize(&dummy, args);

Я хочу несколько раз вызывать мою тестовую функцию из fun() с некоторыми дополнительными аргументами. Я заменил функцию эталона на факториал для простоты прямо сейчас. При этом сообщаемое время всегда равно 0. Чего мне здесь не хватает? Другое дело, если я не пишу for (auto _ : state) он выдает ошибку во время выполнения и завершает работу. Количество сообщаемых итераций всегда равно 1000000000.

0 ответов

Другие вопросы по тегам