Changeset View
Changeset View
Standalone View
Standalone View
src/bench/gcs_filter.cpp
// Copyright (c) 2018 The Bitcoin Core developers | // Copyright (c) 2018 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <bench/bench.h> | #include <bench/bench.h> | ||||
#include <blockfilter.h> | #include <blockfilter.h> | ||||
static void ConstructGCSFilter(benchmark::State &state) { | static void ConstructGCSFilter(benchmark::Bench &bench) { | ||||
GCSFilter::ElementSet elements; | GCSFilter::ElementSet elements; | ||||
for (int i = 0; i < 10000; ++i) { | for (int i = 0; i < 10000; ++i) { | ||||
GCSFilter::Element element(32); | GCSFilter::Element element(32); | ||||
element[0] = static_cast<uint8_t>(i); | element[0] = static_cast<uint8_t>(i); | ||||
element[1] = static_cast<uint8_t>(i >> 8); | element[1] = static_cast<uint8_t>(i >> 8); | ||||
elements.insert(std::move(element)); | elements.insert(std::move(element)); | ||||
} | } | ||||
uint64_t siphash_k0 = 0; | uint64_t siphash_k0 = 0; | ||||
while (state.KeepRunning()) { | bench.batch(elements.size()).unit("elem").run([&] { | ||||
GCSFilter filter({siphash_k0, 0, 20, 1 << 20}, elements); | GCSFilter filter({siphash_k0, 0, 20, 1 << 20}, elements); | ||||
siphash_k0++; | siphash_k0++; | ||||
} | }); | ||||
} | } | ||||
static void MatchGCSFilter(benchmark::State &state) { | static void MatchGCSFilter(benchmark::Bench &bench) { | ||||
GCSFilter::ElementSet elements; | GCSFilter::ElementSet elements; | ||||
for (int i = 0; i < 10000; ++i) { | for (int i = 0; i < 10000; ++i) { | ||||
GCSFilter::Element element(32); | GCSFilter::Element element(32); | ||||
element[0] = static_cast<uint8_t>(i); | element[0] = static_cast<uint8_t>(i); | ||||
element[1] = static_cast<uint8_t>(i >> 8); | element[1] = static_cast<uint8_t>(i >> 8); | ||||
elements.insert(std::move(element)); | elements.insert(std::move(element)); | ||||
} | } | ||||
GCSFilter filter({0, 0, 20, 1 << 20}, elements); | GCSFilter filter({0, 0, 20, 1 << 20}, elements); | ||||
while (state.KeepRunning()) { | bench.unit("elem").run([&] { filter.Match(GCSFilter::Element()); }); | ||||
filter.Match(GCSFilter::Element()); | |||||
} | |||||
} | } | ||||
BENCHMARK(ConstructGCSFilter, 1000); | BENCHMARK(ConstructGCSFilter); | ||||
BENCHMARK(MatchGCSFilter, 50 * 1000); | BENCHMARK(MatchGCSFilter); |