Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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)
- Loading branch information