2016-08-02 8 views
1

プロジェクトでは、https://github.com/google/benchmark.gitタグv1.0.0からgoogle/benchmarkを使い始めました。 Googleベンチマーク:アサーション 'has_range_x_'が失敗しました

は、私は非常に簡単なテスト

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

エラーが発生します。私は、ベンチマークライブラリとシンプルベンチマーク実行可能ファイルの両方について、debian/testingでgcc 5.4.0を使用しています。

引数リストの終わりを検出できないと思われます。しかし、何が間違っていますか?それを防ぐ方法は?

+0

範囲を定義する必要はありません。BENCHMARK(BM_memcpy) - >範囲(8,8 <10); ??? –

+0

実際には、文書によれば、これはほぼ同じでなければなりません。私は同じ主張を得る。 –

+0

あなたのタイミングで割り当てとゼロ化が含まれています。そのオーバーヘッドがなければ、短い間隔で正確な結果を得ることができます。非常に大きなバッファを使用してテストする予定がある場合。 –

答えて

1

ベンチマークを2回登録しています(BENCHMARKへのコール)が、Argを2回入力しないと登録されていません。つまり、アサーションが主張するように範囲を設定せずに呼び出すことになります。

関連する問題