about summary refs log tree commit diff
path: root/library/alloc/benches/vec.rs
AgeCommit message (Collapse)AuthorLines
2025-03-07Move all alloc integration tests to a new alloctests cratebjorn3-878/+0
2025-03-06library: Use size_of from the prelude instead of importedThalia Archibald-4/+4
Use `std::mem::{size_of, size_of_val, align_of, align_of_val}` from the prelude instead of importing or qualifying them. These functions were added to all preludes in Rust 1.80.
2025-01-24Fix testing of the standard library with Emscriptenbjorn3-0/+5
This does need EMCC_CFLAGS="-s MAXIMUM_MEMORY=2GB" avoid several OOMs.
2024-09-22Reformat using the new identifier sorting from rustfmtMichael Goulet-1/+1
2024-07-29Reformat `use` declarations.Nicholas Nethercote-1/+2
The previous commit updated `rustfmt.toml` appropriately. This commit is the outcome of running `x fmt --all` with the new formatting options.
2023-12-05Split `Vec::dedup_by` into 2 cyclesAngelicosPhosphoros-2/+3
First cycle runs until we found 2 same elements, second runs after if there any found in the first one. This allows to avoid any memory writes until we found an item which we want to remove. This leads to significant performance gains if all `Vec` items are kept: -40% on my benchmark with unique integers. Results of benchmarks before implementation (including new benchmark where nothing needs to be removed): * vec::bench_dedup_all_100 74.00ns/iter +/- 13.00ns * vec::bench_dedup_all_1000 572.00ns/iter +/- 272.00ns * vec::bench_dedup_all_100000 64.42µs/iter +/- 19.47µs * __vec::bench_dedup_none_100 67.00ns/iter +/- 17.00ns__ * __vec::bench_dedup_none_1000 662.00ns/iter +/- 86.00ns__ * __vec::bench_dedup_none_10000 9.16µs/iter +/- 2.71µs__ * __vec::bench_dedup_none_100000 91.25µs/iter +/- 1.82µs__ * vec::bench_dedup_random_100 105.00ns/iter +/- 11.00ns * vec::bench_dedup_random_1000 781.00ns/iter +/- 10.00ns * vec::bench_dedup_random_10000 9.00µs/iter +/- 5.62µs * vec::bench_dedup_random_100000 449.81µs/iter +/- 74.99µs * vec::bench_dedup_slice_truncate_100 105.00ns/iter +/- 16.00ns * vec::bench_dedup_slice_truncate_1000 2.65µs/iter +/- 481.00ns * vec::bench_dedup_slice_truncate_10000 18.33µs/iter +/- 5.23µs * vec::bench_dedup_slice_truncate_100000 501.12µs/iter +/- 46.97µs Results after implementation: * vec::bench_dedup_all_100 75.00ns/iter +/- 9.00ns * vec::bench_dedup_all_1000 494.00ns/iter +/- 117.00ns * vec::bench_dedup_all_100000 58.13µs/iter +/- 8.78µs * __vec::bench_dedup_none_100 52.00ns/iter +/- 22.00ns__ * __vec::bench_dedup_none_1000 417.00ns/iter +/- 116.00ns__ * __vec::bench_dedup_none_10000 4.11µs/iter +/- 546.00ns__ * __vec::bench_dedup_none_100000 40.47µs/iter +/- 5.36µs__ * vec::bench_dedup_random_100 77.00ns/iter +/- 15.00ns * vec::bench_dedup_random_1000 681.00ns/iter +/- 86.00ns * vec::bench_dedup_random_10000 11.66µs/iter +/- 2.22µs * vec::bench_dedup_random_100000 469.35µs/iter +/- 20.53µs * vec::bench_dedup_slice_truncate_100 100.00ns/iter +/- 5.00ns * vec::bench_dedup_slice_truncate_1000 2.55µs/iter +/- 224.00ns * vec::bench_dedup_slice_truncate_10000 18.95µs/iter +/- 2.59µs * vec::bench_dedup_slice_truncate_100000 492.85µs/iter +/- 72.84µs Resolves #77772
2023-11-25Add more benchmarks of `Vec::dedup`AngelicosPhosphoros-18/+105
They are for more specific cases than old benches. Also, better usage of blackbox
2023-04-12remove some unneeded importsKaDiWa-1/+1
2022-07-26Optimized vec::IntoIter::next_chunk implThe 8472-0/+20
``` test vec::bench_next_chunk ... bench: 696 ns/iter (+/- 22) x86_64v1, pr test vec::bench_next_chunk ... bench: 309 ns/iter (+/- 4) znver2, default test vec::bench_next_chunk ... bench: 17,272 ns/iter (+/- 117) znver2, pr test vec::bench_next_chunk ... bench: 211 ns/iter (+/- 3) ``` The znver2 default impl seems to be slow due to inlining decisions. It goes through `core::array::iter_next_chunk` which has a deeper call tree.
2022-05-02Avoid use of `rand::thread_rng` in stdlib benchmarksThom Chiovoloni-2/+2
2022-03-29Add debug assertions to some unsafe functionsBen Kimock-2/+2
These debug assertions are all implemented only at runtime using `const_eval_select`, and in the error path they execute `intrinsics::abort` instead of being a normal debug assertion to minimize the impact of these assertions on code size, when enabled. Of all these changes, the bounds checks for unchecked indexing are expected to be most impactful (case in point, they found a problem in rustc).
2021-12-04update vec::retain benchmarksThe 8472-2/+17
Add `into_iter().filter().collect()` as a comparison point since it was reported to be faster than `retain`. Remove clone inside benchmark loop to reduce allocator noise.
2021-09-17Add benchmark for Vec::retainTennyZhuang-0/+15
2021-07-24implement fold() on array::IntoIter to improve flatten().collect() perfThe8472-0/+6
``` # old test vec::bench_flat_map_collect ... bench: 2,244,024 ns/iter (+/- 18,903) # new test vec::bench_flat_map_collect ... bench: 172,863 ns/iter (+/- 2,141) ```
2021-06-02Update expressions where we can use array's IntoIterator implementationMuhammad Mominul Huque-8/+2
2021-05-19remove InPlaceIterable marker from Peekable due to unsoundnessThe8472-1/+0
The unsoundness is not in Peekable per se, it rather is due to the interaction between Peekable being able to hold an extra item and vec::IntoIter's clone implementation shortening the allocation. An alternative solution would be to change IntoIter's clone implementation to keep enough spare capacity available.
2021-03-25Try to make Vec benchmarks only run code they are benchmarkingBen Kimock-68/+25
Many of the Vec benchmarks assert what values should be produced by the benchmarked code. In some cases, these asserts dominate the runtime of the benchmarks they are in, causing the benchmarks to understate the impact of an optimization or regression.
2021-03-21add transmute-via-iterators benchThe8472-0/+16
2021-03-16Vec::dedup optimization - add benchesSoveu-0/+89
2020-09-29Reorder benches const variableIvan Tham-2/+2
Move LEN so it is is read in order.
2020-09-25Rust vec bench import specific rand::RngCoreIvan Tham-1/+1
2020-09-22Liballoc bench vec use mem take not replaceIvan Tham-3/+3
2020-09-21liballoc bench use imported path BencherIvan Tham-14/+14
test is already in scope, no need to use the full path
2020-09-06Clean up vec benches bench_in_place styleIvan Tham-22/+21
2020-09-03fix benchmark compile errorsThe8472-12/+9
2020-09-03add benchmark to cover in-place extendThe8472-0/+14
2020-09-03fix: bench didn't black_box its resultsThe8472-3/+1
2020-09-03bench larger allocationsThe8472-6/+6
2020-09-03bench in-place zipThe8472-0/+37
2020-09-03exercise more of the in-place pipeline in the benchThe8472-1/+8
2020-09-03bench in-place collect of droppablesThe8472-0/+15
2020-09-03cyclic in-place reuse benchThe8472-0/+20
2020-09-03return the things under test so they get black_box()'edThe8472-1/+10
2020-09-03add benches from bluss' gistsThe8472-0/+104
2020-09-03update benchesThe8472-3/+4
2020-09-03benchThe8472-1/+40
2020-08-20Liballoc bench rename push_all extend_from_sliceIvan Tham-15/+15
2020-08-20Remove duplicated alloc vec bench push_all_moveIvan Tham-49/+0
push_all_move is the same as extend
2020-07-27mv std libs to library/mark-0/+482