diff --git a/CMakeLists.txt b/CMakeLists.txt index 70b13e3..1b3b072 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ set(CMAKE_CXX_STANDARD 17) # benchmarks is configured with `BITVECTOR_BENCHMARK_MIN_TIME`. set(BITVECTOR_TEST_TIMEOUT 10 CACHE STRING "Timeout in seconds for each unit test") set(BITVECTOR_BENCHMARK_MIN_TIME 0.2 CACHE STRING "Minimum time in seconds for benchmark runs") + option(BITVECTOR_NO_BOUND_CHECK "Disable bounds checking in bitvector" ON) if(BITVECTOR_NO_BOUND_CHECK) add_compile_definitions(BITVECTOR_NO_BOUND_CHECK) diff --git a/bitvector_benchmark.cpp b/bitvector_benchmark.cpp index acbb47b..9515f24 100644 --- a/bitvector_benchmark.cpp +++ b/bitvector_benchmark.cpp @@ -76,6 +76,50 @@ static void BM_Std_Access(benchmark::State& state) { } } +static void BM_Bowen_SetBit(benchmark::State& state) { + size_t n = state.range(0); + for (auto _ : state) { + bitvector<> bv(n); + for (size_t i=0;i(i & 1)); + } + benchmark::ClobberMemory(); + } +} + +static void BM_Std_SetBit(benchmark::State& state) { + size_t n = state.range(0); + for (auto _ : state) { + std::vector bv(n); + for (size_t i=0;i(i & 1); + } + benchmark::ClobberMemory(); + } +} + +static void BM_Bowen_SetBitTrueUnsafe(benchmark::State& state) { + size_t n = state.range(0); + for (auto _ : state) { + bitvector<> bv(n); + for (size_t i=0;i bv(n); + for (size_t i=0;iArg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); BENCHMARK(BM_Std_PushBack)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); BENCHMARK(BM_Bowen_Access)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); BENCHMARK(BM_Std_Access)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); +BENCHMARK(BM_Bowen_SetBit)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); +BENCHMARK(BM_Std_SetBit)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); +BENCHMARK(BM_Bowen_SetBitTrueUnsafe)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); +BENCHMARK(BM_Std_SetBitTrueUnsafe)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); BENCHMARK(BM_Bowen_SetBitTrue6)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); BENCHMARK(BM_Std_SetBitTrue6)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME); BENCHMARK(BM_Bowen_QSetBitTrue6V2)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);