2016-08-02 1 views
1

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?

+0

Ne vous devez définir la plage comme: BENCHMARK (BM_memcpy) -> Gamme (8, 8 << 10); ??? –

+0

En fait, selon la documentation cela devrait être à peu près le même. Je reçois la même assertion. –

+0

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. –

Répondre

1

Vous enregistrez le test de performances deux fois (les appels à BENCHMARK) mais la deuxième fois vous ne fournissez pas un Arg. C'est-à-dire que vous l'appelez sans définir de plage, tout comme l'assertion l'affirme.