Skip to content

Commit 8ac3a23

Browse files
committed
Add: Streaming hash benchmarks
1 parent 268af53 commit 8ac3a23

File tree

1 file changed

+44
-7
lines changed

1 file changed

+44
-7
lines changed

scripts/bench_token.cpp

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,60 @@ tracked_unary_functions_t bytesum_functions() {
3838
return result;
3939
}
4040

41-
tracked_unary_functions_t hashing_functions() {
41+
tracked_unary_functions_t hash_functions() {
4242
auto wrap_sz = [](auto function) -> unary_function_t {
4343
return unary_function_t([function](std::string_view s) { return function(s.data(), s.size(), 42); });
4444
};
4545
tracked_unary_functions_t result = {
46-
{"std::hash", [](std::string_view s) { return std::hash<std::string_view> {}(s); }},
4746
{"sz_hash_serial", wrap_sz(sz_hash_serial)},
4847
#if SZ_USE_HASWELL
49-
{"sz_hash_haswell", wrap_sz(sz_hash_haswell)},
48+
{"sz_hash_haswell", wrap_sz(sz_hash_haswell), true},
49+
#endif
50+
#if SZ_USE_SKYLAKE
51+
{"sz_hash_skylake", wrap_sz(sz_hash_skylake), true},
52+
#endif
53+
#if SZ_USE_ICE
54+
{"sz_hash_ice", wrap_sz(sz_hash_ice), true},
55+
#endif
56+
#if SZ_USE_NEON
57+
{"sz_hash_neon", wrap_sz(sz_hash_neon), true},
58+
#endif
59+
{"std::hash", [](std::string_view s) { return std::hash<std::string_view> {}(s); }},
60+
};
61+
return result;
62+
}
63+
64+
struct wrapped_incremental_hash {
65+
sz_hash_state_t state;
66+
sz_hash_state_stream_t stream;
67+
sz_hash_state_fold_t fold;
68+
69+
wrapped_incremental_hash(sz_hash_state_stream_t s, sz_hash_state_fold_t f) : stream(s), fold(f) {
70+
sz_hash_state_init(&state, 42);
71+
}
72+
73+
std::size_t operator()(std::string_view s) noexcept {
74+
stream(&state, s.data(), s.size());
75+
return fold(&state);
76+
}
77+
};
78+
79+
tracked_unary_functions_t hash_stream_functions() {
80+
tracked_unary_functions_t result = {
81+
{"sz_hash_stream_serial", wrapped_incremental_hash(sz_hash_state_stream_serial, sz_hash_state_fold_serial)},
82+
#if SZ_USE_HASWELL
83+
{"sz_hash_stream_haswell", wrapped_incremental_hash(sz_hash_state_stream_haswell, sz_hash_state_fold_haswell),
84+
true},
5085
#endif
5186
#if SZ_USE_SKYLAKE
52-
{"sz_hash_skylake", wrap_sz(sz_hash_skylake)},
87+
{"sz_hash_stream_skylake", wrapped_incremental_hash(sz_hash_state_stream_skylake, sz_hash_state_fold_skylake),
88+
true},
5389
#endif
5490
#if SZ_USE_ICE
55-
{"sz_hash_ice", wrap_sz(sz_hash_ice)},
91+
{"sz_hash_stream_ice", wrapped_incremental_hash(sz_hash_state_stream_ice, sz_hash_state_fold_ice), true},
5692
#endif
5793
#if SZ_USE_NEON
58-
{"sz_hash_neon", wrap_sz(sz_hash_neon)},
94+
{"sz_hash_stream_neon", wrapped_incremental_hash(sz_hash_state_stream_neon, sz_hash_state_fold_neon), true},
5995
#endif
6096
};
6197
return result;
@@ -152,7 +188,8 @@ void bench(strings_type &&strings) {
152188

153189
// Benchmark logical operations
154190
bench_unary_functions(strings, bytesum_functions());
155-
bench_unary_functions(strings, hashing_functions());
191+
bench_unary_functions(strings, hash_functions());
192+
bench_unary_functions(strings, hash_stream_functions());
156193
bench_binary_functions(strings, equality_functions());
157194
bench_binary_functions(strings, ordering_functions());
158195

0 commit comments

Comments
 (0)