[vectorIntrinsics] RFR: Optimize mem barriers for ByteBuffer cases [v9]

Radoslaw Smogura github.com+7535718+rsmogura at openjdk.java.net
Wed Aug 4 21:00:14 UTC 2021


> # Description
> This change tries to remove mem bars for byte buffer cases.
> 
> Previously mem bars were inserted almost unconditionally if attemp to native memory acees where detected. This patch tries to follow up inline_unsafe_access and insert bar only if can't determine if it's heap or off-heap (type missmatch cases are not ported).
> 
> # Testing
> Memory tests should include rollbacking JDK changes, and leaving only hotspot, as intrinsics should be well guarded
> 
> # Notes
> Polluted cases to be addressed later
> 
> # Benchmarks
> 
> Benchmark                                (size)  Mode  Cnt    Score   Error  Units
> ByteBufferVectorAccess.arrays              1024  avgt   10   12.585 ? 0.409  ns/op
> ByteBufferVectorAccess.directBuffers       1024  avgt   10   19.962 ? 0.080  ns/op
> ByteBufferVectorAccess.heapBuffers         1024  avgt   10   15.878 ? 0.187  ns/op
> ByteBufferVectorAccess.pollutedBuffers2    1024  avgt   10  123.702 ? 0.723  ns/op
> ByteBufferVectorAccess.pollutedBuffers3    1024  avgt   10  223.928 ? 1.906  ns/op
> 
> Before
> 
> Benchmark                                (size)  Mode  Cnt    Score   Error  Units
> ByteBufferVectorAccess.arrays              1024  avgt   10   14.730 ? 0.061  ns/op
> ByteBufferVectorAccess.directBuffers       1024  avgt   10   77.707 ? 4.867  ns/op
> ByteBufferVectorAccess.heapBuffers         1024  avgt   10   76.530 ? 1.076  ns/op
> ByteBufferVectorAccess.pollutedBuffers2    1024  avgt   10  143.331 ? 1.096  ns/op
> ByteBufferVectorAccess.pollutedBuffers3    1024  avgt   10  286.645 ? 3.444  ns/op

Radoslaw Smogura has updated the pull request incrementally with one additional commit since the last revision:

  Code review changes:
  * make specied final static in test
  * use Unsafe to check if ByteBuffer is readOnly
  * remove if in X-ScopedMemory when loading / storing vectors,
     stay with byte[] cast
  * inline copyMemory in micro benchmark

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

Changes:
  - all: https://git.openjdk.java.net/panama-vector/pull/104/files
  - new: https://git.openjdk.java.net/panama-vector/pull/104/files/472f0a17..ccb7e68f

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=panama-vector&pr=104&range=08
 - incr: https://webrevs.openjdk.java.net/?repo=panama-vector&pr=104&range=07-08

  Stats: 70 lines in 11 files changed: 13 ins; 23 del; 34 mod
  Patch: https://git.openjdk.java.net/panama-vector/pull/104.diff
  Fetch: git fetch https://git.openjdk.java.net/panama-vector pull/104/head:pull/104

PR: https://git.openjdk.java.net/panama-vector/pull/104


More information about the panama-dev mailing list