On Mon, 11 Nov 2024 14:50:57 GMT, Per Minborg <pminb...@openjdk.org> 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

Reply via email to