c++ - 谷歌基准测试 : Assertion `has_range_x_' failed

标签 c++ gcc benchmarking microbenchmark google-benchmark

在一个项目中,我从 https://github.com/google/benchmark.git 开始使用 google/benchmark标签 v1.0.0.

我运行了非常简单的测试

#include <benchmark/benchmark.h>
#include <cstring>

static void BM_memcpy(benchmark::State& state) {
  char* src = new char[state.range_x()]; char* dst = new char[state.range_x()];
  memset(src, 'x', state.range_x());
  while (state.KeepRunning())
    memcpy(dst, src, state.range_x());
  state.SetBytesProcessed(int64_t(state.iterations()) *
                          int64_t(state.range_x()));
  delete[] src;
  delete[] dst;
}
BENCHMARK(BM_memcpy)->Arg(8)->Arg(64)->Arg(512)->Arg(1<<10)->Arg(8<<10);

// Register the function as a benchmark
BENCHMARK(BM_memcpy);

BENCHMARK_MAIN();

但是我得到了错误

./bench/simple-benchmark 
Run on (8 X 4000 MHz CPU s)
2016-08-02 18:22:30
Benchmark               Time           CPU Iterations
-----------------------------------------------------
BM_memcpy/8             9 ns          9 ns   79545455       877MB/s
BM_memcpy/64            9 ns          9 ns   56451613   6.67615GB/s
BM_memcpy/512          21 ns         21 ns   33018868   23.0185GB/s
BM_memcpy/1024         30 ns         29 ns   23648649   32.4039GB/s
BM_memcpy/8k          516 ns        514 ns    1346154   14.8415GB/s
simple-idl-benchmark: /usr/local/include/benchmark/benchmark_api.h:417: int benchmark::State::range_x() const: Assertion `has_range_x_' failed.

我尝试了 master 和 older 标签,但我总是得到这个断言。我在 debian/testing 上使用 gcc 5.4.0 作为基准库和 simple-benchmark 可执行文件。

在我看来,它无法检测到参数列表的末尾并断言。但是有什么问题呢?如何预防?

最佳答案

您要注册基准测试两次(调用 BENCHMARK),但第二次您没有提供 Arg。也就是说,您在调用它时没有设置范围,就像断言所断言的那样。

关于c++ - 谷歌基准测试 : Assertion `has_range_x_' failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38725937/

相关文章:

c - 测试算法速度。如何?

c++ - Make - 无所事事(另一个)

c++ - 我可以使用另一种方式从 C++ 获取时间吗?

c++ - gcc thunk hack 用于多重继承

java - 为什么 Go 这么慢(与 Java 相比)?

java - JMH 中的操作数到底是多少?

C++ 容器-如果为类型定义了运算符<<,则列出成员?

c++ - 为什么我只需要在我将开发使用 ffmpeg 库的应用程序的 PC 上直接编译 ffmpeg?

c++ - 在 gcc 中禁用 "if(0)"消除

c - 尝试了解 GCC 和 Windows 的主要功能