Skip to content

Commit 2fb0c1d

Browse files
committed
8343844: Add benchmarks for superword/autovectorization in FFM BulkOperations
Reviewed-by: mcimadamore
1 parent 72f67fb commit 2fb0c1d

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

test/micro/org/openjdk/bench/java/lang/foreign/SegmentBulkFill.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
import java.lang.foreign.Arena;
4040
import java.lang.foreign.MemorySegment;
41+
import java.lang.foreign.ValueLayout;
4142
import java.nio.ByteBuffer;
4243
import java.util.Arrays;
4344
import java.util.concurrent.TimeUnit;
@@ -74,6 +75,20 @@ public void arraysFill() {
7475
Arrays.fill(array, (byte) 0);
7576
}
7677

78+
@Benchmark
79+
public void arraysFillLoop() {
80+
for (int i = 0; i < array.length; i++) {
81+
array[i] = 0;
82+
}
83+
}
84+
85+
@Benchmark
86+
public void bufferFillLoop() {
87+
for (int i = 0; i < array.length; i++) {
88+
buffer.put(i, (byte)0);
89+
}
90+
}
91+
7792
@Fork(value = 3, jvmArgs = {"-Djava.lang.foreign.native.threshold.power.fill=31"})
7893
@Benchmark
7994
public void heapSegmentFillJava() {
@@ -86,6 +101,13 @@ public void heapSegmentFillUnsafe() {
86101
heapSegment.fill((byte) 0);
87102
}
88103

104+
@Benchmark
105+
public void heapSegmentFillLoop() {
106+
for (long i = 0; i < heapSegment.byteSize(); i++) {
107+
heapSegment.set(ValueLayout.JAVA_BYTE, i, (byte) 0);
108+
}
109+
}
110+
89111
@Fork(value = 3, jvmArgs = {"-Djava.lang.foreign.native.threshold.power.fill=31"})
90112
@Benchmark
91113
public void nativeSegmentFillJava() {
@@ -98,6 +120,13 @@ public void nativeSegmentFillUnsafe() {
98120
nativeSegment.fill((byte) 0);
99121
}
100122

123+
@Benchmark
124+
public void nativeSegmentFillLoop() {
125+
for (long i = 0; i < nativeSegment.byteSize(); i++) {
126+
nativeSegment.set(ValueLayout.JAVA_BYTE, i, (byte) 0);
127+
}
128+
}
129+
101130
@Fork(value = 3, jvmArgs = {"-Djava.lang.foreign.native.threshold.power.fill=31"})
102131
@Benchmark
103132
public void unalignedSegmentFillJava() {
@@ -110,4 +139,11 @@ public void unalignedSegmentFillUnsafe() {
110139
unalignedSegment.fill((byte) 0);
111140
}
112141

142+
@Benchmark
143+
public void unalignedSegmentFillLoop() {
144+
for (long i = 0; i < unalignedSegment.byteSize(); i++) {
145+
unalignedSegment.set(ValueLayout.JAVA_BYTE, i, (byte) 0);
146+
}
147+
}
148+
113149
}

0 commit comments

Comments
 (0)