Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix poor worst case performance of set intersection #57043

Merged
merged 4 commits into from
Jan 15, 2019

Conversation

ssomers
Copy link
Contributor

@ssomers ssomers commented Dec 21, 2018

Specifically, intersection of asymmetrically sized sets when the large set is on the left. See also the latest answer on stackoverflow.

Also applied to the union member, where the effect is much less but still measurable.

Formatted the changed code only, does not increase the error count reported by tidy check, and tried to adhere to the spirit of the unit tests.

…hat) on asymmetrically sized sets and extend unit tests slightly beyond that
@rust-highfive

This comment has been minimized.

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Dec 21, 2018
@Centril

This comment has been minimized.

@memoryruins
Copy link
Contributor

cc @rust-lang/libs

@Centril
Copy link
Contributor

Centril commented Jan 13, 2019

r? @bluss

@rust-highfive rust-highfive assigned bluss and unassigned TimNN Jan 13, 2019
@alexcrichton
Copy link
Member

@bors: r+

Thanks @ssomers!

@bors
Copy link
Contributor

bors commented Jan 14, 2019

📌 Commit cef2e2f has been approved by alexcrichton

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 14, 2019
Centril added a commit to Centril/rust that referenced this pull request Jan 14, 2019
Fix poor worst case performance of set intersection

Specifically, intersection of asymmetrically sized sets when the large set is on the left. See also the [latest answer on stackoverflow](https://stackoverflow.com/questions/35439376/python-set-intersection-is-faster-then-rust-hashset-intersection).

Also applied to the union member, where the effect is much less but still measurable.

Formatted the changed code only, does not increase the error count reported by tidy check, and tried to adhere to the spirit of the unit tests.
Centril added a commit to Centril/rust that referenced this pull request Jan 14, 2019
Fix poor worst case performance of set intersection

Specifically, intersection of asymmetrically sized sets when the large set is on the left. See also the [latest answer on stackoverflow](https://stackoverflow.com/questions/35439376/python-set-intersection-is-faster-then-rust-hashset-intersection).

Also applied to the union member, where the effect is much less but still measurable.

Formatted the changed code only, does not increase the error count reported by tidy check, and tried to adhere to the spirit of the unit tests.
bors added a commit that referenced this pull request Jan 14, 2019
Rollup of 8 pull requests

Successful merges:

 - #57043 (Fix poor worst case performance of set intersection)
 - #57480 (Clean up and fix a bug in query plumbing)
 - #57481 (provide suggestion for invalid boolean cast)
 - #57540 (Modify some parser diagnostics to continue evaluating beyond the parser)
 - #57570 (Querify local `plugin_registrar_fn` and `proc_macro_decls_static`)
 - #57572 (Unaccept `extern_in_paths`)
 - #57585 (Recover from item trailing semicolon)
 - #57589 (Add a debug_assert to Vec::set_len)

Failed merges:

r? @ghost
@bors bors merged commit cef2e2f into rust-lang:master Jan 15, 2019
Centril added a commit to Centril/rust that referenced this pull request Apr 5, 2019
improve worst-case performance of HashSet.is_subset

One more simple optimization opportunity for HashSet that was applied in BTreeSet in rust-lang#59186 (and wasn't in rust-lang#57043). Already covered by the existing unit test.

r? @KodrAus
@stepancheg
Copy link
Contributor

Union was actually deoptimization, see #66280

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

9 participants