6

Optimize unnecessary check in VecDeque::retain by Xuanwo · Pull Request #88075 ·...

 2 years ago
source link: https://github.com/rust-lang/rust/pull/88075
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Copy link

Contributor

Xuanwo commented 12 days ago

This pr is highly inspired by #88060 which shared the same idea: we can split the for loop into stages so that we can remove unnecessary checks like del > 0.

Benchmarks

Before

test collections::vec_deque::tests::bench_retain_half_10000  ... bench:     290,125 ns/iter (+/- 8,717)
test collections::vec_deque::tests::bench_retain_odd_10000   ... bench:     291,588 ns/iter (+/- 9,621)
test collections::vec_deque::tests::bench_retain_whole_10000 ... bench:     287,426 ns/iter (+/- 9,009)

After

test collections::vec_deque::tests::bench_retain_half_10000  ... bench:     243,940 ns/iter (+/- 8,563)
test collections::vec_deque::tests::bench_retain_odd_10000   ... bench:     242,768 ns/iter (+/- 3,903)
test collections::vec_deque::tests::bench_retain_whole_10000 ... bench:     202,926 ns/iter (+/- 6,332)

Based on the current benchmark, this PR will improve the perf of VecDeque::retain by around 16%. For special cases, the improvement will be up to 30%.

Signed-off-by: Xuanwo [email protected]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK