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.
After JuliaLang/julia#44941
permute!
andinvpermute!
no longer call theBase.permute!!
andBase.invpermute!!
methods. This ensures thatpermute!
andinvpermute!
stay optimized forPooledArray
s, otherwise they get a suboptimal fallback (see benchmark below).The improvement is much more substantial for
invpermute!
, but I imagine it makes sense to have both methods fully optimized. I was actually surprised that thepermute!
fallback was already almost optimal. EDIT: that was just due to it calling the optimizedgetindex(v::PooledArray, i::AbstractVector)
andcopyto!(dst::PooledArray, src::PooledArray)
methods, whereasinvpermute!
has to callsetindex!
, which is more costly.