[foreign-memaccess+abi] RFR: 8270376: Finalize API for memory copy [v14]

Maurizio Cimadamore mcimadamore at openjdk.java.net
Tue Aug 10 21:05:51 UTC 2021


On Tue, 10 Aug 2021 09:32:09 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> This patch ties up some loose ends with the MemoryCopy API, and it also prepares the ground for some other related refactorings in this area.
>> 
>> The meat of this patch is represented by the various changes in MemoryCopy, where all methods were renamed to simply `copy`, and the length parameter (now called `elementCount`) is always moved to the end.
>> 
>> I've also simplified naming of parameters, as I think distinguishing between `index` and `offset` is enough (e.g. an array has an index, a segment has an offset).
>> 
>> You will see that, at the very end of the class, three more copy methods have been added, which deal fully in terms of segments. I have also moved the complex layout-based memory segment copy operation (which does the swap) as a static method in this class, as I believe the static form makes the method more regular and usable.
>> 
>> I've made some changes to our uses of `copyFrom` in the linker, to use the new methods in `MemoryCopy` when the copy operation was performing slicing in the source/target segment, which I think makes the code more readable. Of course these changes are completely optional and could be omitted as well.
>
> Maurizio Cimadamore has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Tweak micro benchmarks
>  - Improve performance of generic copy methods

> > That said, if, one day, we'd like to rewrite those routines in Java, using memory access API + vector API, using an opaque object carrier can definitively be an issue (the vector API also likes to be sharp in its carrier type).
> 
> I am not too concerned about this. For memory copying it is important to choose the largest shape (i.e. largest vector register) so we could choose to use Vector or Vector etc. even when copying arrays of floats or doubles. That is sort of how vectorized mistmatch is implemented. It will become easier to do this when we enhance the Vector API to load/store from segments, which could be backed by primitive arrays or native regions.

True - I guess what I mean is that the vector shape won't be known statically in the code (while it could be if there were different overloads).

-------------

PR: https://git.openjdk.java.net/panama-foreign/pull/568


More information about the panama-dev mailing list