From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martijn Muijsers Date: Thu, 24 Nov 2022 01:19:12 +0100 Subject: [PATCH] SIMD support License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org This patch is based on the following patch: "Add SIMD utilities" By: Kevin Raneri As part of: Pufferfish (https://github.com/pufferfish-gg/Pufferfish) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/build.gradle.kts b/build.gradle.kts index ebe3f85542004002713dd327e8a423f2570695ed..f3287cea49ee7352a1065dc65927ab9922d0a9c4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,6 +62,7 @@ tasks.withType { compilerArgs.add("-Xlint:-module") compilerArgs.add("-Xlint:-removal") compilerArgs.add("-Xlint:-dep-ann") + compilerArgs.add("--add-modules=jdk.incubator.vector") // Gale - Pufferfish - SIMD support } // Gale end - hide irrelevant compilation warnings diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 9c3ccbbd657d1605b8fabb6e01c11ff31f39a17e..1d1db89362b78ac34d46cdd71b9ab27404b98e48 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -14,6 +14,8 @@ import java.util.Locale; import java.util.Optional; import java.util.function.BooleanSupplier; import javax.annotation.Nullable; + +import gg.pufferfish.pufferfish.simd.SIMDDetection; import net.minecraft.DefaultUncaughtExceptionHandler; import net.minecraft.DefaultUncaughtExceptionHandlerWithName; import net.minecraft.SharedConstants; @@ -46,6 +48,7 @@ import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.entity.SkullBlockEntity; import net.minecraft.world.level.storage.LevelStorageSource; import org.galemc.gale.command.GaleCommands; +import org.galemc.gale.configuration.GaleGlobalConfiguration; import org.slf4j.Logger; // CraftBukkit start @@ -223,6 +226,21 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider // Paper end + // Gale start - Pufferfish - SIMD support + // Attempt to detect vectorization + try { + SIMDDetection.isEnabled = SIMDDetection.canEnable(LOGGER, GaleGlobalConfiguration.get().smallOptimizations.simd.logVectorSizesToConsole); + } catch (NoClassDefFoundError | Exception ignored) {} + + if (!SIMDDetection.isEnabled && !SIMDDetection.unsupportingLaneSize && GaleGlobalConfiguration.get().smallOptimizations.simd.warnIfDisabled) { + LOGGER.warn("SIMD operations are available for your server, but are not configured!"); + LOGGER.warn("To enable additional optimizations, add \"--add-modules=jdk.incubator.vector\" to your startup flags, BEFORE the \"-jar\"."); + LOGGER.warn("If you have already added this flag, then SIMD operations are not supported on your JVM or CPU."); + LOGGER.warn("Debug: Java: " + System.getProperty("java.version") + ", test run: " + SIMDDetection.testRun); + LOGGER.warn("If you would like to disable this message, set simd.warn-if-disabled to false in gale-global.yml"); + } + // Gale start - Pufferfish - SIMD support + this.setPvpAllowed(dedicatedserverproperties.pvp); this.setFlightAllowed(dedicatedserverproperties.allowFlight); this.setMotd(dedicatedserverproperties.motd); diff --git a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java index 2a3cd1baab364126d10a42c8ab59f3da8ca9bdfb..5ade5d2ff3a68cf9e0240fc86e4b63432cb899c0 100644 --- a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java +++ b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java @@ -25,6 +25,14 @@ public class GaleGlobalConfiguration extends ConfigurationPart { public int dummyValue = 0; + // Gale start - Pufferfish - SIMD support + public Simd simd; + public class Simd extends ConfigurationPart { + public boolean warnIfDisabled = true; + public boolean logVectorSizesToConsole = false; + } + // Gale end - Pufferfish - SIMD support + } public Misc misc;