[foreign-memaccess+abi] RFR: Check for mixed access - remove mem barriers

Radoslaw Smogura github.com+7535718+rsmogura at openjdk.java.net
Tue Jul 27 17:29:45 UTC 2021


On Sat, 24 Jul 2021 16:07:09 GMT, Radoslaw Smogura <github.com+7535718+rsmogura at openjdk.org> wrote:

> That's for previous PR, which I destroyed with bad merge from master.
> 
> I wonder if this can look like this?
> 
> 
> Benchmark                               (size)  Mode  Cnt   Score    Error  Units
> ByteBufferVectorAccess.directBuffers      1024  avgt   10  27.119 ?  0.186  ns/op
> ByteBufferVectorAccess.heapBuffers        1024  avgt   10  28.501 ?  0.118  ns/op
> ByteBufferVectorAccess.pollutedBuffers    1024  avgt   10  64.354 ? 27.778  ns/op
> Finished running test 'micro:ByteBufferVectorAccess'
> 
> 
> https://github.com/openjdk/panama-foreign/pull/566

I did some deeper checks about polluted case and for some reason Unsafe works differently than "get filed". I can't answer  why so. It looks very related to JIT.

void intoByteBuffer0(ByteBuffer bb, int offset) {
if (!bb.isDirect()) {
  return fromByteArray0(bb.array(), offset);
}

change to 

if (!bb.isDirect()) {
  intoByteArray0((byte[]) ScopedMemoryAccess.BufferAccess.bufferBase(bb), offset);

makes such a huge difference.

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

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


More information about the panama-dev mailing list