Avoid array allocation for moving to equal domain #25896
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves #25741
chpl__coerceMove(_array)
already has the ability to omit an array copy when the source and destination arrays refer to the same domain.However, when the domains have equal value but are separate instances,
chpl__coerceMove
would allocate a separate array and then move elements into it from the original array.This leads to unnecessary memory usage in some cases; for example, a recursive function that returns an array and so declares the return type.
This commit adds a mechanism for array implementations to provide a way to steal the data buffers from another array which can be used in this scenario. In some ways this is similar to
doiOptimizedSwap
. Note thatdoiOptimizedSwap
cannot be used here because we want to avoid allocation for one of the arrays.Future Work:
doiBuildArrayMoving
for more array types (most notably, Block, Cyclic, and Stencil arrays)Reviewed by @benharsh - thanks!