Dans un projet que je commence à utiliser Google/référence de https://github.com/google/benchmark.git v1.0.0 tag.référence google: Assertion `has_range_x_ » a échoué
je lance le test très simple
#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();
mais je reçois l'erreur
./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.
J'ai essayé balises maître et plus, mais je reçois toujours cette affirmation. J'utilise gcc 5.4.0 sur debian/testing pour la bibliothèque de référence et l'exécutable simple-benchmark.
Il semble pour moi, qu'il ne peut pas détecter la fin de la liste des arguments et affirme. Mais qu'est-ce qui ne va pas? Comment l'éviter?
Ne vous devez définir la plage comme: BENCHMARK (BM_memcpy) -> Gamme (8, 8 << 10); ??? –
En fait, selon la documentation cela devrait être à peu près le même. Je reçois la même assertion. –
Vous incluez l'allocation et la réduction à zéro dans votre timing. Vous pourriez obtenir des résultats précis avec un intervalle plus court si vous n'aviez pas ce frais généraux, esp. si vous envisagez de tester avec de très grands tampons. –