Skip to content

Commit 04b1f16

Browse files
authored
Merge pull request #15 from bugparty/codex/add-benchmark-for-set_bit-functions
Add set_bit STL benchmark comparison
2 parents 9dd7f41 + 36833ed commit 04b1f16

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ set(CMAKE_CXX_STANDARD 17)
99
# benchmarks is configured with `BITVECTOR_BENCHMARK_MIN_TIME`.
1010
set(BITVECTOR_TEST_TIMEOUT 10 CACHE STRING "Timeout in seconds for each unit test")
1111
set(BITVECTOR_BENCHMARK_MIN_TIME 0.2 CACHE STRING "Minimum time in seconds for benchmark runs")
12+
1213
option(BITVECTOR_NO_BOUND_CHECK "Disable bounds checking in bitvector" ON)
1314
if(BITVECTOR_NO_BOUND_CHECK)
1415
add_compile_definitions(BITVECTOR_NO_BOUND_CHECK)

bitvector_benchmark.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,50 @@ static void BM_Std_Access(benchmark::State& state) {
7676
}
7777
}
7878

79+
static void BM_Bowen_SetBit(benchmark::State& state) {
80+
size_t n = state.range(0);
81+
for (auto _ : state) {
82+
bitvector<> bv(n);
83+
for (size_t i=0;i<n;++i) {
84+
bv.set_bit(i, static_cast<bool>(i & 1));
85+
}
86+
benchmark::ClobberMemory();
87+
}
88+
}
89+
90+
static void BM_Std_SetBit(benchmark::State& state) {
91+
size_t n = state.range(0);
92+
for (auto _ : state) {
93+
std::vector<bool> bv(n);
94+
for (size_t i=0;i<n;++i) {
95+
bv[i] = static_cast<bool>(i & 1);
96+
}
97+
benchmark::ClobberMemory();
98+
}
99+
}
100+
101+
static void BM_Bowen_SetBitTrueUnsafe(benchmark::State& state) {
102+
size_t n = state.range(0);
103+
for (auto _ : state) {
104+
bitvector<> bv(n);
105+
for (size_t i=0;i<n;++i) {
106+
bv.set_bit_true_unsafe(i);
107+
}
108+
benchmark::ClobberMemory();
109+
}
110+
}
111+
112+
static void BM_Std_SetBitTrueUnsafe(benchmark::State& state) {
113+
size_t n = state.range(0);
114+
for (auto _ : state) {
115+
std::vector<bool> bv(n);
116+
for (size_t i=0;i<n;++i) {
117+
bv[i] = true;
118+
}
119+
benchmark::ClobberMemory();
120+
}
121+
}
122+
79123

80124
static void BM_Bowen_SetBitTrue6(benchmark::State& state) {
81125
size_t n = state.range(0);
@@ -153,6 +197,10 @@ BENCHMARK(BM_Bowen_PushBack)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
153197
BENCHMARK(BM_Std_PushBack)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
154198
BENCHMARK(BM_Bowen_Access)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
155199
BENCHMARK(BM_Std_Access)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
200+
BENCHMARK(BM_Bowen_SetBit)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
201+
BENCHMARK(BM_Std_SetBit)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
202+
BENCHMARK(BM_Bowen_SetBitTrueUnsafe)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
203+
BENCHMARK(BM_Std_SetBitTrueUnsafe)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
156204
BENCHMARK(BM_Bowen_SetBitTrue6)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
157205
BENCHMARK(BM_Std_SetBitTrue6)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);
158206
BENCHMARK(BM_Bowen_QSetBitTrue6V2)->Arg(1<<20)->MinTime(BITVECTOR_BENCHMARK_MIN_TIME);

0 commit comments

Comments
 (0)