Commit 01b35d8
authored
Auto merge of #36072 - arthurprs:binary_heap_opt, r=Aatch
Optimize BinaryHeap bounds checking
I was experimenting with d-ary binary heaps during the weekend (dead end) and I found that we could get some good improvements by removing bounds checking. Specially due to the panic-safe additional code, llvm can't really optimize them out.
```
name d_ary_heap:: ns/iter std___heap:: ns/iter diff ns/iter diff %
bench_build_insert 148,610 236,960 88,350 59.45%
bench_from_vec 243,846 299,719 55,873 22.91%
bench_insert_2000_empty 4,512 7,517 3,005 66.60%
bench_insert_2000_prefilled 28,665 32,605 3,940 13.74%
bench_pop_2000 111,515 128,005 16,490 14.79%
bench_pop_all 2,759,945 3,317,626 557,681 20.21%
peek_mut 23,186 23,635 449 1.94%
pop_modify_push 41,573 43,822 2,249 5.41%
test d_ary_heap::bench_build_insert ... bench: 148,610 ns/iter (+/- 10,687)
test d_ary_heap::bench_from_vec ... bench: 243,846 ns/iter (+/- 16,500)
test d_ary_heap::bench_insert_2000_empty ... bench: 4,512 ns/iter (+/- 136)
test d_ary_heap::bench_insert_2000_prefilled ... bench: 28,665 ns/iter (+/- 1,347)
test d_ary_heap::bench_pop_2000 ... bench: 111,515 ns/iter (+/- 104,677)
test d_ary_heap::bench_pop_all ... bench: 2,759,945 ns/iter (+/- 173,838)
test d_ary_heap::peek_mut ... bench: 23,186 ns/iter (+/- 106,254)
test d_ary_heap::pop_modify_push ... bench: 41,573 ns/iter (+/- 3,313)
test std___heap::bench_build_insert ... bench: 236,960 ns/iter (+/- 16,955)
test std___heap::bench_from_vec ... bench: 299,719 ns/iter (+/- 6,354)
test std___heap::bench_insert_2000_empty ... bench: 7,517 ns/iter (+/- 372)
test std___heap::bench_insert_2000_prefilled ... bench: 32,605 ns/iter (+/- 2,433)
test std___heap::bench_pop_2000 ... bench: 128,005 ns/iter (+/- 11,787)
test std___heap::bench_pop_all ... bench: 3,317,626 ns/iter (+/- 238,968)
test std___heap::peek_mut ... bench: 23,635 ns/iter (+/- 1,420)
test std___heap::pop_modify_push ... bench: 43,822 ns/iter (+/- 3,788)
```
Test code: https://github.com/arthurprs/heap-experiments1 file changed
+23
-20
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
884 | 884 | | |
885 | 885 | | |
886 | 886 | | |
887 | | - | |
888 | | - | |
889 | | - | |
890 | | - | |
891 | | - | |
892 | | - | |
893 | | - | |
894 | | - | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
895 | 897 | | |
896 | 898 | | |
897 | 899 | | |
898 | | - | |
| 900 | + | |
899 | 901 | | |
900 | 902 | | |
901 | 903 | | |
902 | 904 | | |
903 | 905 | | |
904 | | - | |
| 906 | + | |
905 | 907 | | |
906 | 908 | | |
907 | 909 | | |
908 | 910 | | |
909 | 911 | | |
910 | 912 | | |
911 | | - | |
912 | | - | |
913 | | - | |
914 | | - | |
| 913 | + | |
| 914 | + | |
915 | 915 | | |
916 | 916 | | |
917 | | - | |
| 917 | + | |
| 918 | + | |
918 | 919 | | |
919 | 920 | | |
920 | 921 | | |
921 | 922 | | |
922 | | - | |
923 | | - | |
| 923 | + | |
| 924 | + | |
924 | 925 | | |
925 | 926 | | |
926 | | - | |
927 | | - | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
928 | 930 | | |
929 | 931 | | |
930 | 932 | | |
931 | 933 | | |
932 | 934 | | |
933 | 935 | | |
| 936 | + | |
934 | 937 | | |
935 | 938 | | |
936 | 939 | | |
937 | 940 | | |
938 | | - | |
| 941 | + | |
939 | 942 | | |
940 | 943 | | |
941 | 944 | | |
| |||
0 commit comments