RFR: 8294432: Add provisions to calculate hash values from MemorySegments
Per Minborg
pminborg at openjdk.org
Tue Nov 26 12:01:21 UTC 2024
This PR proposes adding a _JDK-internal_ method for calculating hash codes for content in a `MemorySegment`.
The internal method uses a polynomial 32-bit hash function equivalent to `Arrays::hashCode`. The new method is almost two times faster than naïvely iterating over individual bytes for larger regions. Also, it is more lean on inlining space compared to a naïve loop.
Benchmark (ELEM_SIZE) Mode Cnt Score Error Units
SegmentBulkHash.array 8 avgt 30 2.645 ? 0.078 ns/op
SegmentBulkHash.array 64 avgt 30 6.062 ? 0.171 ns/op
SegmentBulkHash.heapSegment 8 avgt 30 4.181 ? 0.145 ns/op
SegmentBulkHash.heapSegment 64 avgt 30 25.716 ? 1.043 ns/op
SegmentBulkHash.nativeSegment 8 avgt 30 3.939 ? 0.150 ns/op
SegmentBulkHash.nativeSegment 64 avgt 30 23.262 ? 0.694 ns/op
SegmentBulkHash.nativeSegmentJava 8 avgt 30 5.219 ? 0.183 ns/op <- Naïve iteration
SegmentBulkHash.nativeSegmentJava 64 avgt 30 39.668 ? 1.040 ns/op <- Naïve iteration

If internal JDK code uses this method, it will automatically benefit from future performance improvements that can be implemented once the Vector API becomes available.
-------------
Commit messages:
- Chage type declarations in benchmark
- Clean up and add doc
- Add content hash method and tests
- Use parameter i tests
- Remove debug line
- Add an internal contentHash method
Changes: https://git.openjdk.org/jdk/pull/22364/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22364&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8294432
Stats: 338 lines in 3 files changed: 338 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/22364.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22364/head:pull/22364
PR: https://git.openjdk.org/jdk/pull/22364
More information about the core-libs-dev
mailing list