From 710c35c35f775dbf94adef0c354d0801aefed68b Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Mon, 9 Feb 2026 16:33:36 +0800 Subject: [PATCH 1/2] Add BiomeLookupBenchmark --- build.gradle.kts | 3 ++ .../benchmarks/jmh/BiomeLookupBenchmark.java | 43 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java diff --git a/build.gradle.kts b/build.gradle.kts index d8f91a2..3eb3994 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,6 +32,9 @@ tasks { val compilerArgs = options.compilerArgs options.encoding = Charsets.UTF_8.name() compilerArgs.add("--add-modules=jdk.incubator.vector") // Gale - Pufferfish - SIMD support + compilerArgs.add("-Xlint:-deprecation") + compilerArgs.add("-Xlint:-unchecked") + compilerArgs.add("-Xlint:-removal") } build.configure { diff --git a/src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java b/src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java new file mode 100644 index 0000000..596058e --- /dev/null +++ b/src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java @@ -0,0 +1,43 @@ +package cn.dreeam.sunbox.benchmarks.jmh; + +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@State(Scope.Thread) +public class BiomeLookupBenchmark { + + private static final double[] QUART_OFFSETS = {0.0D, 0.25D, 0.5D, 0.75D}; + + private int[] inputData; + private static final int SIZE = 4096; // Size of input array + private static final Random rand = new Random(12345L); + + @Setup + public void setup() { + inputData = new int[SIZE]; + for (int i = 0; i < SIZE; i++) { + inputData[i] = rand.nextInt(); + } + } + + @Benchmark + public void testFpDivision(Blackhole bh) { + for (int i = 0; i < SIZE; i++) { + int val = inputData[i]; + bh.consume((double) (val & 3) / 4.0); + } + } + + @Benchmark + public void testTableLookup(Blackhole bh) { + for (int i = 0; i < SIZE; i++) { + int val = inputData[i]; + bh.consume(QUART_OFFSETS[val & 3]); + } + } +} \ No newline at end of file From cf6d1818e69e4e622d66258fca8606ffd786e380 Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Mon, 9 Feb 2026 16:44:04 +0800 Subject: [PATCH 2/2] Reduce noise --- src/main/java/cn/dreeam/sunbox/SunBox.java | 2 +- .../benchmarks/jmh/BiomeLookupBenchmark.java | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/dreeam/sunbox/SunBox.java b/src/main/java/cn/dreeam/sunbox/SunBox.java index 8afd5f5..98c54a7 100644 --- a/src/main/java/cn/dreeam/sunbox/SunBox.java +++ b/src/main/java/cn/dreeam/sunbox/SunBox.java @@ -19,7 +19,7 @@ public static void main(String[] args) { private static void runJMH() throws Exception { Options opt = new OptionsBuilder() // TODO: Notice: Include benchmark class name you want - .include("NonNullListGetBenchmark") + .include("BiomeLookupBenchmark") .forks(1) .warmupIterations(4) .measurementIterations(10) diff --git a/src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java b/src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java index 596058e..66faaf4 100644 --- a/src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java +++ b/src/main/java/cn/dreeam/sunbox/benchmarks/jmh/BiomeLookupBenchmark.java @@ -2,7 +2,6 @@ import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole; - import java.util.Random; import java.util.concurrent.TimeUnit; @@ -14,12 +13,12 @@ public class BiomeLookupBenchmark { private static final double[] QUART_OFFSETS = {0.0D, 0.25D, 0.5D, 0.75D}; private int[] inputData; - private static final int SIZE = 4096; // Size of input array - private static final Random rand = new Random(12345L); + private static final int SIZE = 4096; @Setup public void setup() { inputData = new int[SIZE]; + Random rand = new Random(12345L); for (int i = 0; i < SIZE; i++) { inputData[i] = rand.nextInt(); } @@ -27,17 +26,19 @@ public void setup() { @Benchmark public void testFpDivision(Blackhole bh) { + double sum = 0; for (int i = 0; i < SIZE; i++) { - int val = inputData[i]; - bh.consume((double) (val & 3) / 4.0); + sum += (double) (inputData[i] & 3) / 4.0; } + bh.consume(sum); } @Benchmark public void testTableLookup(Blackhole bh) { + double sum = 0; for (int i = 0; i < SIZE; i++) { - int val = inputData[i]; - bh.consume(QUART_OFFSETS[val & 3]); + sum += QUART_OFFSETS[inputData[i] & 3]; } + bh.consume(sum); } } \ No newline at end of file