Repository navigation
Improve Sort Operator (DYOD 2025) - #2720
robert-oleynik wants to merge 186 commits into
Conversation
…d fix out of bounds vector accesses (#2700) The update to gcc15 introduced some issues with the <ciso646> header, which is used by boost spinsort. It also introduced bounds checking for operator[] of vectors, which we violated. This PR fixes the issues caused by the upgrade to gcc15.
…roup2 into parallel-sort-operator
…d fix out of bounds vector accesses (#2700) The update to gcc15 introduced some issues with the <ciso646> header, which is used by boost spinsort. It also introduced bounds checking for operator[] of vectors, which we violated. This PR fixes the issues caused by the upgrade to gcc15.
…roup2 into parallel-sort-operator
Noel-Bastubbe
left a comment
There was a problem hiding this comment.
The IPS4O algorithm is hard to follow, but you did a good job of structuring the code and adding useful comments. You followed the hyrise coding conventions very well.
| if (last_stripe == stripe_ranges.end()) { | ||
| last_stripe = --stripe_ranges.end(); | ||
| } | ||
| DebugAssert(last_stripe != stripe_ranges.end(), "Bucket should end in last stripe"); |
There was a problem hiding this comment.
This DebugAssert in combination with the if-condition before looks unintuitive. How can last_strip and stripe_ranges.end() be equal at that point?
|
Can you please merge the master? It's needed for full CI runs as a node crashed on our side and it will take some time to get it back online. |
Bouncner
left a comment
There was a problem hiding this comment.
Still haven't read all the code.
What would be help is a very brief high level description of IPSO. The paper has a very readable introduction of "buckets" and other terms.
Don't put too much effort in it, but a parapraph of the high level concept wiould be very helpful.
| if (column_info.nullable && segment_position.is_null()) { | ||
| *(normalized_key_start++) = normalized_null_value; | ||
| // Initialize actual key by setting all bytes to 0. | ||
| for (auto counter = size_t{0}; counter < column_info.width() - 1; ++counter) { |
| if (value.size() < STRING_CUTOFF) { | ||
| copy_uint_to_byte_array(normalized_key_start, uint64_t{0}, column_info.long_width); | ||
| } else { | ||
| const auto iter = std::ranges::lower_bound(column_info.long_strings, value); // NOLINT |
There was a problem hiding this comment.
Add the name of the silenced rule to NOLINT.
Co-authored-by: Bouncner <martin+github@boissier.de>
No description provided.