diff --git a/ConflictSet.cpp b/ConflictSet.cpp index d9d4408..3c583a4 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -4073,6 +4073,62 @@ struct __attribute__((visibility("default"))) PeakPrinter { #ifdef ENABLE_MAIN +#define ANKERL_NANOBENCH_IMPLEMENT +#include "third_party/nanobench.h" + +template void benchRezero() { + static_assert(kN % 16 == 0); + ankerl::nanobench::Bench bench; + InternalVersionT vs[kN]; + InternalVersionT zero; + bench.run("rezero" + std::to_string(kN), [&]() { + bench.doNotOptimizeAway(vs); + bench.doNotOptimizeAway(zero); + for (int i = 0; i < kN; i += 16) { + rezero16(vs + i, zero); + } + }); +} + +template void benchScan1() { + static_assert(kN % 16 == 0); + ankerl::nanobench::Bench bench; + InternalVersionT vs[kN]; + uint8_t is[kN]; + uint8_t begin; + uint8_t end; + InternalVersionT v; + bench.run("scan" + std::to_string(kN), [&]() { + bench.doNotOptimizeAway(vs); + bench.doNotOptimizeAway(is); + bench.doNotOptimizeAway(begin); + bench.doNotOptimizeAway(end); + bench.doNotOptimizeAway(v); + for (int i = 0; i < kN; i += 16) { + scan16(vs + i, is + i, begin, end, v); + } + }); +} + +template void benchScan2() { + static_assert(kN % 16 == 0); + ankerl::nanobench::Bench bench; + InternalVersionT vs[kN]; + uint8_t is[kN]; + uint8_t begin; + uint8_t end; + InternalVersionT v; + bench.run("scan" + std::to_string(kN), [&]() { + bench.doNotOptimizeAway(vs); + bench.doNotOptimizeAway(begin); + bench.doNotOptimizeAway(end); + bench.doNotOptimizeAway(v); + for (int i = 0; i < kN; i += 16) { + scan16(vs + i, begin, end, v); + } + }); +} + void printTree() { int64_t writeVersion = 0; ConflictSet::Impl cs{writeVersion}; @@ -4094,7 +4150,7 @@ void printTree() { debugPrintDot(stdout, cs.root, &cs); } -int main(void) { printTree(); } +int main(void) { benchScan1<16>(); } #endif #ifdef ENABLE_FUZZ