-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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
Compress RWU from at least 32 bits to 4 bits #79727
Conversation
@bors try @rust-timer queue |
Awaiting bors try build completion |
⌛ Trying commit 02778c8c9a364c52053545d46089a428ccb4024e with merge b47bf19739a8e6218a9b76d6e157bc0d76ff9d91... |
☀️ Try build successful - checks-actions |
Queued b47bf19739a8e6218a9b76d6e157bc0d76ff9d91 with parent 0781b44, future comparison URL. |
Finished benchmarking try commit (b47bf19739a8e6218a9b76d6e157bc0d76ff9d91): comparison url. Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. Please note that if the perf results are neutral, you should likely undo the rollup=never given below by specifying Importantly, though, if the results of this run are non-neutral do not roll this PR up -- it will mask other regressions or improvements in the roll up. @bors rollup=never |
|
1b0f854
to
9d12e73
Compare
r? @lcnr |
@bors try @rust-timer queue |
Awaiting bors try build completion |
⌛ Trying commit 84c38d870bc93bd269e843152866b91bdcb80551 with merge 16eae4b989421e982b659f3043d7a012f3f03861... |
The current implementation trades some memory for simplicity by performing row operations using complete words. To do that it has to round up the size of a row up to the whole word. As a result it has average memory overhead of |
☀️ Try build successful - checks-actions |
Queued 16eae4b989421e982b659f3043d7a012f3f03861 with parent 551a2c6, future comparison URL. |
Finished benchmarking try commit (16eae4b989421e982b659f3043d7a012f3f03861): comparison url. Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. Please note that if the perf results are neutral, you should likely undo the rollup=never given below by specifying Importantly, though, if the results of this run are non-neutral do not roll this PR up -- it will mask other regressions or improvements in the roll up. @bors rollup=never |
|
The liveness uses a mixed representation of RWUs based on the observation that most of them have invalid reader and invalid writer. The packed variant uses 32 bits and unpacked 96 bits. Unpacked data contains reader live node and writer live node. Since live nodes are used only to determine their validity, RWUs can always be stored in a packed form with four bits for each: reader bit, writer bit, used bit, and one extra padding bit to simplify packing and unpacking operations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
surprised that we didn't use the node kind stored in the rwu_table
.
It might make sense to move the implementation of the rwu table into a separate file so it's clearer what is part of it's API and what's only used for its implementation, but I don't have a strong opinion about this.
Good job 👍
@bors try @rust-timer queue |
Awaiting bors try build completion |
⌛ Trying commit bc8317a with merge b017cc71b863fb1e4859d1de21889e95c01cc85b... |
☀️ Try build successful - checks-actions |
Queued b017cc71b863fb1e4859d1de21889e95c01cc85b with parent 0f6f2d6, future comparison URL. |
Finished benchmarking try commit (b017cc71b863fb1e4859d1de21889e95c01cc85b): comparison url. Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. Please note that if the perf results are neutral, you should likely undo the rollup=never given below by specifying Importantly, though, if the results of this run are non-neutral do not roll this PR up -- it will mask other regressions or improvements in the roll up. @bors rollup=never |
It does look like using |
Yep, I think we should land this last version with |
@bors r+ rollup=never |
📌 Commit bc8317a has been approved by |
⌛ Testing commit bc8317a with merge 5109b2e4f231cdf82b91ac04ae3c8631d4a347f6... |
💥 Test timed out |
@bors retry |
☀️ Test successful - checks-actions |
The liveness uses a mixed representation of RWUs based on the
observation that most of them have invalid reader and invalid
writer. The packed variant uses 32 bits and unpacked 96 bits.
Unpacked data contains reader live node and writer live node.
Since live nodes are used only to determine their validity,
RWUs can always be stored in a packed form with four bits for
each: reader bit, writer bit, used bit, and one extra padding
bit to simplify packing and unpacking operations.