В проекте я начинаю использовать Google / Benchmark из https://github.com/google/benchmark.git тег 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.
Я пробовал мастер и старые теги, но я всегда получаю это утверждение. Я использую gcc 5.4.0 в debian / testing как для библиотеки тестов производительности, так и для исполняемого файла simple-benchmark.
Мне кажется, что он не может определить конец списка аргументов и утверждает. Но что не так? Как это предотвратить?
Вы регистрируете бенчмарк дважды (звонки на BENCHMARK
) но во второй раз вы не предоставите Arg
, То есть вы вызываете это без установки диапазона, как утверждает утверждение.
Других решений пока нет …