Benchmark different strides

This commit is contained in:
2025-05-22 19:24:14 -04:00
parent 41c8fcc30c
commit 493e6aec31

View File

@@ -266,12 +266,22 @@ TEST_CASE("bench3") {
ankerl::nanobench::Bench bench; ankerl::nanobench::Bench bench;
bench.batch(json.size()); bench.batch(json.size());
bench.unit("byte"); bench.unit("byte");
bench.run("parser3", [&]() { for (int stride = 1; stride <= json.size(); stride *= 2) {
auto copy = json; bench.run("parser3 (stride: " + std::to_string(stride) + ")", [&]() {
parser3::Parser3 parser(&c, nullptr); auto copy = json;
bench.doNotOptimizeAway(parser.parse(copy.data(), copy.length())); parser3::Parser3 parser(&c, nullptr);
bench.doNotOptimizeAway(parser.parse(nullptr, 0) == WeaselJson_OK); for (int i = 0; i < copy.size(); i += stride) {
}); if (parser.parse(copy.data() + i,
std::min<int>(copy.size() - i, stride)) !=
WeaselJson_AGAIN) {
abort();
}
}
if (parser.parse(nullptr, 0) != WeaselJson_OK) {
abort();
}
});
}
} }
TEST_CASE("bench4") { TEST_CASE("bench4") {
@@ -279,7 +289,7 @@ TEST_CASE("bench4") {
ankerl::nanobench::Bench bench; ankerl::nanobench::Bench bench;
bench.batch(json.size()); bench.batch(json.size());
bench.unit("byte"); bench.unit("byte");
bench.run("parser4", [&]() { bench.run("simdjson dom", [&]() {
simdjson::padded_string my_padded_data(json.data(), json.size()); simdjson::padded_string my_padded_data(json.data(), json.size());
simdjson::dom::parser parser; simdjson::dom::parser parser;
auto doc = parser.parse(my_padded_data); auto doc = parser.parse(my_padded_data);
@@ -292,7 +302,7 @@ TEST_CASE("bench5") {
ankerl::nanobench::Bench bench; ankerl::nanobench::Bench bench;
bench.batch(json.size()); bench.batch(json.size());
bench.unit("byte"); bench.unit("byte");
bench.run("parser5", [&]() { bench.run("simdjson on demand", [&]() {
padded_string my_padded_data(json.data(), json.size()); padded_string my_padded_data(json.data(), json.size());
ondemand::parser parser; ondemand::parser parser;
auto doc = parser.iterate(my_padded_data); auto doc = parser.iterate(my_padded_data);