On Mon, 11 Nov 2024 14:50:57 GMT, Per Minborg <[email protected]> wrote:
>> This PR proposes to add a new `MemorySegment::fill" benchmark where the byte
>> size of the segments varies.
>
> Per Minborg has updated the pull request with a new target base due to a
> merge or a rebase. The incremental webrev excludes the unrelated changes
> brought in by the merge/rebase. The pull request contains six additional
> commits since the last revision:
>
> - Add mixed test
> - Merge branch 'master' into ms-fill-bench-sizes
> - Use static arrays
> - Revert changes from other branch
> - Add benchmark
> - Add benchmarks
test/micro/org/openjdk/bench/java/lang/foreign/SegmentBulkRandomFill.java line
169:
> 167: public void mixedSegmentFillUnsafe() {
> 168: for (int i = 0; i < INSTANCES; i++) {
> 169: MIXED_SEGMENTS[i].fill((byte) 0);
loop unrolling can defeat a bit the purpose of messing up with branch
misprediction here so...one solution is to avoid loop unrolling OR
create a
@CompilerControl(DONTINLINE)
static void fillSegment(MemorySegment ms, byte value) {
memorySegment.fill(value);
}
which makes sure (at the cost of a very predictable call to the `fillSegment`
method) that:
- the inlining depth of fill is controlled and not dependent by the depth of
the JMH infra caller
- the call site for fill is always the same (in term of the address in the
compiled blob)
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/22010#discussion_r1836806492