Skip to content

Conversation

@JackThomson2
Copy link

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.
@JackThomson2 JackThomson2 changed the title feat: Add unsound feature Make unsound opt-in feature Jan 27, 2026
Sign up for free to 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