rust/library/alloc/src
Mara Bos c013dc01f1
Rollup merge of #81127 - hanmertens:binary_heap_sift_down_perf, r=dtolnay
Improve sift_down performance in BinaryHeap

Replacing `child < end - 1` with `child <= end.saturating_sub(2)` in `BinaryHeap::sift_down_range` (surprisingly) results in a significant speedup of `BinaryHeap::into_sorted_vec`. The same substitution can be done for `BinaryHeap::sift_down_to_bottom`, which causes a slight but probably statistically insignificant speedup for `BinaryHeap::pop`. It's interesting that benchmarks aside from `bench_into_sorted_vec` are barely affected, even those that do use `sift_down_*` methods internally.

| Benchmark                | Before (ns/iter) | After (ns/iter) | Speedup |
|--------------------------|------------------|-----------------|---------|
| bench_find_smallest_1000<sup>1</sup> | 392,617          | 385,200         |    1.02 |
| bench_from_vec<sup>1</sup>           | 506,016          | 504,444         |    1.00 |
| bench_into_sorted_vec<sup>1</sup>    | 476,869          | 384,458         |    1.24 |
| bench_peek_mut_deref_mut<sup>3</sup> | 518,753          | 519,792         |    1.00 |
| bench_pop<sup>2</sup>                | 446,718          | 444,409         |    1.01 |
| bench_push<sup>3</sup>               | 772,481          | 770,208         |    1.00 |

<sup>1</sup>: internally calls `sift_down_range`
<sup>2</sup>: internally calls `sift_down_to_bottom`
<sup>3</sup>: should not be affected
2021-03-09 09:05:18 +00:00
..
alloc Rename AllocRef to Allocator and (de)alloc to (de)allocate 2020-12-04 14:47:15 +01:00
collections Rollup merge of #81127 - hanmertens:binary_heap_sift_down_perf, r=dtolnay 2021-03-09 09:05:18 +00:00
prelude mv std libs to library/ 2020-07-27 19:51:13 -05:00
raw_vec Rename AllocRef to Allocator and (de)alloc to (de)allocate 2020-12-04 14:47:15 +01:00
rc Re-stabilize Weak::as_ptr &friends for unsized T 2021-01-06 19:30:22 -05:00
sync Rollup merge of #80764 - CAD97:weak-unsized-as-ptr-again, r=RalfJung 2021-01-16 17:29:56 +00:00
vec Rollup merge of #82564 - WaffleLapkin:revert_spare_mut, r=RalfJung 2021-03-04 20:01:06 +09:00
alloc.rs move WriteCloneIntoRaw into alloc::alloc 2021-01-12 12:24:28 -08:00
borrow.rs a few more diagnostic items 2021-02-16 02:32:21 +00:00
boxed.rs Remove unnecessary lint allow attrs on example 2021-02-12 12:46:02 +03:00
fmt.rs Improve grammar in documentation of format strings 2021-01-01 23:07:35 +01:00
lib.rs Rollup merge of #80189 - jyn514:convert-primitives, r=poliorcetics 2021-03-02 21:23:12 +09:00
macros.rs Only define rustc_diagnostic_item format_macro in not(test). 2021-02-14 20:03:13 +01:00
raw_vec.rs Auto merge of #79113 - andjo403:raw_vec_ptr, r=m-ou-se 2021-01-26 02:56:37 +00:00
rc.rs Add docs for shared_from_slice From impls 2021-02-12 14:02:23 -07:00
slice.rs Convert primitives to use intra-doc links 2021-02-25 20:31:53 -05:00
str.rs Convert primitives to use intra-doc links 2021-02-25 20:31:53 -05:00
string.rs Add documentation for string->Cow conversions 2021-03-07 20:36:43 -07:00
sync.rs Add docs for shared_from_slice From impls 2021-02-12 14:02:23 -07:00
task.rs Update the bootstrap compiler 2021-02-20 17:19:30 -05:00
tests.rs mv std libs to library/ 2020-07-27 19:51:13 -05:00