From 5e06a303571ddbb04217988c5042e3daa3df16f4 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 29 Aug 2024 12:12:24 -0700 Subject: [PATCH] Add optional microbenchmarks for rezero/scan avx512 --- ConflictSet.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) 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