VectorX
Векторизует определённые горячие пути Minecraft, чтобы ускорить их.
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 348
- Подписчиков на Modrinth
- 3
- версии
- 3
- Обновлён
- 19 сентября 202619 сент.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
VectorX
VectorX переписывает небольшой, тщательно отобранный набор самых горячих циклов по массивам в Minecraft с помощью Java Vector API (jdk.incubator.vector), так что одна инструкция CPU обрабатывает 4, 8 или 16 значений сразу вместо одного — благодаря AVX2, AVX-512 или NEON, смотря что реально поддерживают ваш CPU и JDK.
В отличие от большинства SIMD-экспериментов, у каждого векторизованного ядра здесь есть скалярный двойник, и VectorX откатывается на него, как только что-то не так: нет модуля Vector API, неожиданный CPU, проваленная проверка корректности при запуске, конфликтующий мод или исключение во время работы. Поведение ваниллы сохраняется.
VectorX — это оптимизация генерации мира и чанкового I/O. Она сокращает время CPU на серверном потоке (и на встроенном сервере в одиночной игре). Она не нацелена на FPS.
⚠️ Прочтите сначала: обязательный флаг JVM
Vector API всё ещё инкубационный модуль JDK, поэтому JVM не откроет его, пока вы не попросите. Добавьте это в аргументы JVM, профиль лаунчера или стартовый скрипт сервера:
--add-modules=jdk.incubator.vectorБез этого флага VectorX всё равно загрузится и будет работать идеально, просто всё пойдёт на скалярном бэкенде и вы не получите никакого ускорения. Проверьте лог при запуске:
[vectorx] VectorX ready: 4/4 kernels on the vector backendЕсли там 0/4, флаг отсутствует.
Что он оптимизирует
Четыре независимых ядра, каждое можно включать отдельно:
densityFunctionMap: поэлементные преобразования вDensityFunctions$Mapped, используемые повсюду в генерации шума и рельефа. Векторизованы толькоhalf_negative,quarter_negativeиsqueeze, остальные операции и так без ветвлений и не показали реального выигрыша, поэтому их намеренно оставили на ванилле.densityFunctionClamp: clamp, применяемый ко всему массиву плотности, с помощью поэлементныхmin/maxвместо ветвления на каждый элемент.packedStorageUnpack: оба направления битовой упаковки палитры вSimpleBitStorage/PalettedContainer, затрагиваемые при каждом сохранении и загрузке чанка. Также покрываетSimpleBitStorage.getAll(IntConsumer), используемый при пересчёте количества блоков/жидкостей при загрузке чанка и при сканировании возможных биомов для декорирования биомов.canyonCarverSkip: проверка попадания в эллипсоид вCanyonWorldCarver, вычисляемая пакетно для целого вертикального столбца вместо одного вызова на блок.CaveWorldCarverнамеренно не покрыт: его проверка пропуска замыкается на локальную переменную, производную от RNG, до которой нельзя добраться без риска рассинхронизировать сгенерированный рельеф с ваниллой.
Производительность
Измерено на реальном выделенном сервере. Тот же сид, те же координаты, 1024 принудительно загруженных чанка, AMD Ryzen 7 9800X3D (выбран AVX-512), Temurin 25.0.4 JDK:
| Бэкенд | CPU-секунды |
|---|---|
| Vector (AVX-512) | 4.20 |
| Scalar | 5.59 |
≈1.33× быстрее, ≈25% меньше времени CPU при идентичной генерации мира.
Эти числа измерены с 3 из 4 активных ядер (до добавления
canyonCarverSkip) и пока не отражают вклад генерации каньонов. Считайте эту таблицу нижней границей, а не текущим итогом.
Изолированные микробенчмарки показывают куда большие числа (5–12× на самих ядрах), но реальная генерация чанков тратит большую часть времени на сэмплирование шума, размещение фич/структур и вычисление биомов, ничего из чего VectorX не трогает. 25% — это фактическая доля векторизованных ядер в общей стоимости, измеренная на месте, а не экстраполированная.
Ваши результаты будут отличаться: старые CPU, ограниченные SSE/AVX2, или JDK, выбирающие меньшую ширину вектора, увидят пропорционально меньше. Включите diagnostics в конфиге, чтобы увидеть ширину, которую вы реально получаете.
Почему это безопасно
- Дифференциальный самотест при запуске. Каждый векторный бэкенд прогоняется бок о бок со своим скалярным двойником на сгенерированных входных данных, включая граничные случаи и длины, не кратные ширине линии. Одно расхождение — и это ядро понижается до скалярного на всю сессию.
- Fail-open на каждый вызов. Каждый хук ловит
Throwableи проваливается на точный ванильный путь кода, собственное тело метода Mojang или поэлементный цикл, вызывающий собственныйtransformMojang. - Никаких жёстких требований к Mixin. Обновление Minecraft или конфликтующий мод, сдвигающий целевой код, делает VectorX инертным, а не склонным к крашам.
- Никаких статических ссылок на модуль-инкубатор. VectorX загружается и работает корректно на JVM, где
jdk.incubator.vectorполностью отсутствует.
Конфигурация
Отредактируйте сгенерированный TOML-файл в config/ или откройте экран настроек в игре через Mod Menu.
| Опция | По умолчанию | Эффект |
|---|---|---|
backendForcedScalar | false | Принудительно переводит каждое ядро в скалярный режим, переопределяя всё ниже. |
densityFunctionMap | auto | auto = вектор, если доступен и корректен, иначе скаляр · scalar = принудительно скаляр · off = отключить хук. |
densityFunctionClamp | auto | Та же семантика auto / scalar / off. |
packedStorageUnpack | auto | Та же семантика auto / scalar / off. |
canyonCarverSkip | auto | Та же семантика auto / scalar / off. |
selfTest | true | Запускает проверку скаляр против вектора при запуске. Оставьте включённой. |
diagnostics | false | Логирует полный отчёт при запуске: разрешение модулей, бэкенд каждого ядра, причину отката, ширину вектора, известные взаимодействия с модами. |
Всё, кроме diagnostics, требует перезапуска.
Частые вопросы
Как установить VectorX?
Установите Fabric под свою версию Minecraft, скачайте VectorX под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть VectorX?
У VectorX есть сборки для Minecraft 26.2–26.3.
Нужен ли VectorX на сервере?
Ставится только на сервер; игрокам ставить не нужно