Skip to content

Make unsound opt-in feature - #101

Open
JackThomson2 wants to merge 1 commit into
SoftbearStudios:mainfrom
JackThomson2:feat/opt_out_ub
Open

Make unsound opt-in feature#101
JackThomson2 wants to merge 1 commit into
SoftbearStudios:mainfrom
JackThomson2:feat/opt_out_ub

Conversation

@JackThomson2

Copy link
Copy Markdown

Description

Updating of the PR: #51
Rebased against current main and re-ran the performance tests to compare the difference.

Unsure if the unsound should be opt-in or opt-out, but left match previous PR for now

Tested on c7g (Graviton 3)

 name safe ns/iter unsound ns/iter diff ns/iter diff % speedup benches::bench_bincode_deserialize 182,927 178,688 -4,239 -2.32% x 1.02 benches::bench_bincode_serialize 24,170 24,311 141 0.58% x 0.99 benches::bench_bitcode_decode 131,508 131,705 197 0.15% x 1.00 benches::bench_bitcode_encode 16,323 14,305 -2,018 -12.36% x 1.14 benches_borrowed::bench_bincode_deserialize 91,928 91,571 -357 -0.39% x 1.00 benches_borrowed::bench_bincode_serialize 23,047 23,035 -12 -0.05% x 1.00 benches_borrowed::bench_bitcode_decode 12,158 12,179 21 0.17% x 1.00 benches_borrowed::bench_bitcode_encode 16,477 14,599 -1,878 -11.40% x 1.13 bool::test2::bench_bool_vecs_decode 4,988 4,968 -20 -0.40% x 1.00 bool::test2::bench_bool_vecs_encode 365 226 -139 -38.08% x 1.62 bool::test::bench_bool_vec_decode 92 91 -1 -1.09% x 1.01 bool::test::bench_bool_vec_encode 61 61 0 0.00% x 1.00 buffer::tests::bench_registry100_get 19 19 0 0.00% x 1.00 buffer::tests::bench_registry10_get 14 14 0 0.00% x 1.00 buffer::tests::bench_registry1_get 1 1 0 0.00% x 1.00 derive::array::tests::bench_u8_array_vecs_decode 4,480 4,512 32 0.71% x 0.99 derive::array::tests::bench_u8_array_vecs_encode 431 436 5 1.16% x 0.99 derive::duration::tests::bench_duration_vec_decode 833 837 4 0.48% x 1.00 derive::duration::tests::bench_duration_vec_encode 1,094 1,099 5 0.46% x 1.00 derive::empty::tests::bench_phantom_data_vec_decode 8 8 0 0.00% x 1.00 derive::empty::tests::bench_phantom_data_vec_encode 12 12 0 0.00% x 1.00 derive::impls::tests::bench_tuple_vec_decode 10,250 10,248 -2 -0.02% x 1.00 derive::impls::tests::bench_tuple_vec_encode 8,975 8,976 1 0.01% x 1.00 derive::map::test::bench_btree_map_decode 2,009 2,012 3 0.15% x 1.00 derive::map::test::bench_btree_map_encode 661 662 1 0.15% x 1.00 derive::map::test::bench_hash_map_decode 3,434 3,486 52 1.51% x 0.99 derive::map::test::bench_hash_map_encode 655 660 5 0.76% x 0.99 derive::option::tests2::bench_option_u16_vec_decode 769 762 -7 -0.91% x 1.01 derive::option::tests2::bench_option_u16_vec_encode 703 703 0 0.00% x 1.00 derive::option::tests::bench_option_vec_decode 7,257 7,261 4 0.06% x 1.00 derive::option::tests::bench_option_vec_encode 6,349 6,344 -5 -0.08% x 1.00 derive::result::tests::bench_result_vec_decode 907 912 5 0.55% x 0.99 derive::result::tests::bench_result_vec_encode 2,193 2,229 36 1.64% x 0.98 derive::variant::tests::bench_bool_enum_vec_decode 105 102 -3 -2.86% x 1.03 derive::variant::tests::bench_bool_enum_vec_encode 89 89 0 0.00% x 1.00 derive::vec::test::bench_binary_heap_decode 208 209 1 0.48% x 1.00 derive::vec::test::bench_btree_set_decode 1,436 1,435 -1 -0.07% x 1.00 derive::vec::test::bench_btree_set_encode 368 370 2 0.54% x 0.99 derive::vec::test::bench_hash_set_decode 3,234 3,236 2 0.06% x 1.00 derive::vec::test::bench_hash_set_encode 310 310 0 0.00% x 1.00 derive::vec::test::bench_linked_list_decode 5,481 5,467 -14 -0.26% x 1.00 derive::vec::test::bench_linked_list_encode 458 458 0 0.00% x 1.00 derive::vec::test::bench_vec_decode 41 41 0 0.00% x 1.00 derive::vec::test::bench_vec_deque_decode 41 41 0 0.00% x 1.00 derive::vec::test::bench_vec_deque_encode 43 43 0 0.00% x 1.00 derive::vec::test::bench_vec_encode 41 41 0 0.00% x 1.00 f32::tests2::bench_f32_vecs_decode 4,582 4,595 13 0.28% x 1.00 f32::tests2::bench_f32_vecs_encode 650 681 31 4.77% x 0.95 f32::tests::bench_f32_vec_decode 454,806 456,517 1,711 0.38% x 1.00 f32::tests::bench_f32_vec_encode 715,469 715,775 306 0.04% x 1.00 fast::tests::bench_next_unchecked 3,465 3,465 0 0.00% x 1.00 fast::tests::bench_next_unchecked_fast 1,930 1,931 1 0.05% x 1.00 fast::tests::bench_push 2,445 2,455 10 0.41% x 1.00 fast::tests::bench_push_fast 4,285 4,288 3 0.07% x 1.00 fast::tests::bench_push_unchecked 2,813 2,864 51 1.81% x 0.98 fast::tests::bench_push_unchecked_fast 3,728 3,721 -7 -0.19% x 1.00 fast::tests::bench_reserve 691 692 1 0.14% x 1.00 fast::tests::bench_reserve_fast 585 584 -1 -0.17% x 1.00 histogram::tests::bench_histogram_parallel_10 185 185 0 0.00% x 1.00 histogram::tests::bench_histogram_parallel_100 247 246 -1 -0.40% x 1.00 histogram::tests::bench_histogram_parallel_1000 847 846 -1 -0.12% x 1.00 histogram::tests::bench_histogram_parallel_10000 6,864 6,865 1 0.01% x 1.00 histogram::tests::bench_histogram_simple_10 54 54 0 0.00% x 1.00 histogram::tests::bench_histogram_simple_100 162 162 0 0.00% x 1.00 histogram::tests::bench_histogram_simple_1000 1,193 1,191 -2 -0.17% x 1.00 histogram::tests::bench_histogram_simple_10000 11,403 11,402 -1 -0.01% x 1.00 int::test2::bench_u16_vecs_decode 3,962 3,964 2 0.05% x 1.00 int::test2::bench_u16_vecs_encode 290 201 -89 -30.69% x 1.44 int::tests::bench_u16_vec_decode 111 109 -2 -1.80% x 1.02 int::tests::bench_u16_vec_encode 94 95 1 1.06% x 0.99 pack::tests::bench_pack_arithmetic16 48 48 0 0.00% x 1.00 pack::tests::bench_pack_arithmetic2 26 26 0 0.00% x 1.00 pack::tests::bench_pack_arithmetic3 102 102 0 0.00% x 1.00 pack::tests::bench_pack_arithmetic4 44 44 0 0.00% x 1.00 pack::tests::bench_pack_arithmetic6 52 52 0 0.00% x 1.00 pack::tests::bench_unpack_arithmetic16 25 25 0 0.00% x 1.00 pack::tests::bench_unpack_arithmetic2 38 38 0 0.00% x 1.00 pack::tests::bench_unpack_arithmetic3 148 148 0 0.00% x 1.00 pack::tests::bench_unpack_arithmetic4 41 41 0 0.00% x 1.00 pack::tests::bench_unpack_arithmetic6 90 90 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than16 7 7 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than16_histogram 8 8 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than2 7 7 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than256 3 3 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than256_histogram 19 19 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than2_histogram 8 8 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than3 7 7 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than3_histogram 12 12 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than4 7 7 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than4_histogram 8 8 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than6 7 7 0 0.00% x 1.00 pack::tests::bench_unpack_bytes_less_than6_histogram 11 11 0 0.00% x 1.00 pack::tests::bench_unpack_histogram16 461 460 -1 -0.22% x 1.00 pack::tests::bench_unpack_histogram3 791 782 -9 -1.14% x 1.01 pack::tests::bench_unpack_histogram4 680 677 -3 -0.44% x 1.00 pack::tests::bench_unpack_histogram6 571 569 -2 -0.35% x 1.00 pack_ints::tests::bench_pack_u008_max 100 100 0 0.00% x 1.00 pack_ints::tests::bench_pack_u008_no_pack 35 35 0 0.00% x 1.00 pack_ints::tests::bench_pack_u008_random 74 74 0 0.00% x 1.00 pack_ints::tests::bench_pack_u008_zero 69 69 0 0.00% x 1.00 pack_ints::tests::bench_pack_u016_max 182 183 1 0.55% x 0.99 pack_ints::tests::bench_pack_u016_no_pack 59 59 0 0.00% x 1.00 pack_ints::tests::bench_pack_u016_random 67 68 1 1.49% x 0.99 pack_ints::tests::bench_pack_u016_zero 154 154 0 0.00% x 1.00 pack_ints::tests::bench_pack_u032_max 290 290 0 0.00% x 1.00 pack_ints::tests::bench_pack_u032_no_pack 112 112 0 0.00% x 1.00 pack_ints::tests::bench_pack_u032_random 121 122 1 0.83% x 0.99 pack_ints::tests::bench_pack_u032_zero 215 215 0 0.00% x 1.00 pack_ints::tests::bench_pack_u064_max 506 510 4 0.79% x 0.99 pack_ints::tests::bench_pack_u064_no_pack 216 211 -5 -2.31% x 1.02 pack_ints::tests::bench_pack_u064_random 224 220 -4 -1.79% x 1.02 pack_ints::tests::bench_pack_u064_zero 353 359 6 1.70% x 0.98 pack_ints::tests::bench_pack_u128_max 2,155 2,153 -2 -0.09% x 1.00 pack_ints::tests::bench_pack_u128_no_pack 477 450 -27 -5.66% x 1.06 pack_ints::tests::bench_pack_u128_random 476 474 -2 -0.42% x 1.00 pack_ints::tests::bench_pack_u128_zero 1,747 1,744 -3 -0.17% x 1.00 pack_ints::tests::bench_pack_usize_max 506 511 5 0.99% x 0.99 pack_ints::tests::bench_pack_usize_no_pack 211 211 0 0.00% x 1.00 pack_ints::tests::bench_pack_usize_random 225 220 -5 -2.22% x 1.02 pack_ints::tests::bench_pack_usize_zero 353 359 6 1.70% x 0.98 pack_ints::tests::bench_unpack_u008_max 62 62 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u008_random 3 3 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u008_zero 44 43 -1 -2.27% x 1.02 pack_ints::tests::bench_unpack_u016_max 111 111 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u016_random 4 4 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u016_zero 81 81 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u032_max 190 189 -1 -0.53% x 1.01 pack_ints::tests::bench_unpack_u032_random 4 4 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u032_zero 106 105 -1 -0.94% x 1.01 pack_ints::tests::bench_unpack_u064_max 313 313 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u064_random 4 4 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u064_zero 152 152 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u128_max 1,185 1,184 -1 -0.08% x 1.00 pack_ints::tests::bench_unpack_u128_random 4 4 0 0.00% x 1.00 pack_ints::tests::bench_unpack_u128_zero 769 769 0 0.00% x 1.00 pack_ints::tests::bench_unpack_usize_max 313 313 0 0.00% x 1.00 pack_ints::tests::bench_unpack_usize_random 4 4 0 0.00% x 1.00 pack_ints::tests::bench_unpack_usize_zero 152 152 0 0.00% x 1.00 str::tests2::bench_str_vec_decode 1,374,455 1,369,288 -5,167 -0.38% x 1.00 str::tests2::bench_str_vec_encode 96,575 57,505 -39,070 -40.46% x 1.68 str::tests::bench_is_ascii 405 405 0 0.00% x 1.00 str::tests::bench_is_ascii_simd 421 416 -5 -1.19% x 1.01 str::tests::bench_str_tuple_decode 59 59 0 0.00% x 1.00 str::tests::bench_str_tuple_encode 92 92 0 0.00% x 1.00 

Add feature to opt in to the unsound implementation of
`copy_to_nonoverlapping` which can improve performance.
@JackThomson2JackThomson2 changed the title feat: Add unsound featureMake unsound opt-in featureJan 27, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@JackThomson2