On Mon, 25 Nov 2024 15:27:13 GMT, Per Minborg <pminb...@openjdk.org> wrote:
> 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. This pull request has now been integrated. Changeset: a1473ec3 Author: Per Minborg <pminb...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/a1473ec302f1e9d22ebb2417fff3bee21134d6f5 Stats: 338 lines in 3 files changed: 338 ins; 0 del; 0 mod 8294432: Add provisions to calculate hash values from MemorySegments Reviewed-by: mcimadamore ------------- PR: https://git.openjdk.org/jdk/pull/22364