You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
value: special-case a bunch of primitive numeric types in from_bits
In practice it is overwhelmingly common to be parsing basic numeric
types like u64, and minor variations on these (e.g. options of them).
In particular this happens if your types come from the source or target
of pretty-much any jet.
In these cases we can just copy bits directly from the iterator (which
with BitIter is extremely fast; we actually copy bytes) and rather than
constructing types, we can just copy them from the precomp list.
This gives us a massive speedup for large bitstrings. In particular you
can see that to parse a 64k blob tow takes about 45us, where before it
took about 200milliseconds. This is about a 4700x speedup.
test value::benches::bench_value_create_64k ... bench: 875,039.00 ns/iter (+/- 5,007.70)
test value::benches::bench_value_create_64k_compact ... bench: 45,258.88 ns/iter (+/- 169.22)
test value::benches::bench_value_create_64k_padded ... bench: 45,291.30 ns/iter (+/- 120.04)
test value::benches::bench_value_create_deep_some ... bench: 517,785.20 ns/iter (+/- 5,332.20)
test value::benches::bench_value_create_deep_some_compact ... bench: 215,135.87 ns/iter (+/- 2,219.73)
test value::benches::bench_value_create_deep_some_padded ... bench: 215,144.95 ns/iter (+/- 2,020.55)
test value::benches::bench_value_create_u2048 ... bench: 548,674.60 ns/iter (+/- 4,192.62)
test value::benches::bench_value_create_u2048_compact ... bench: 2,915.23 ns/iter (+/- 14.31)
test value::benches::bench_value_create_u2048_padded ... bench: 2,916.31 ns/iter (+/- 13.82)
test value::benches::bench_value_create_u64 ... bench: 12.48 ns/iter (+/- 0.05)
test value::benches::bench_value_create_u64_compact ... bench: 72.94 ns/iter (+/- 0.89)
test value::benches::bench_value_create_u64_padded ... bench: 71.93 ns/iter (+/- 0.72)
test value::benches::bench_value_display_64k ... bench: 9,685,460.80 ns/iter (+/- 48,509.31)
test value::benches::bench_value_display_deep_some ... bench: 309,437.20 ns/iter (+/- 5,402.57)
test value::benches::bench_value_display_u2024 ... bench: 597,713.20 ns/iter (+/- 3,601.65)
test value::benches::bench_value_display_u64 ... bench: 2,437.24 ns/iter (+/- 16.67)
0 commit comments