Перейти к содержимому

VectorX

Векторизует определённые горячие пути Minecraft, чтобы ускорить их.

Fabric
Загрузчики
Fabric
Скачиваний на Modrinth
348
Подписчиков на Modrinth
3
версии
3
Обновлён
19 сентября 202619 сент.
Опубликован
в 2026

Коротко о моде

Работает на Fabric
Для Minecraft 26.2–26.3
Ставится только на сервер; игрокам ставить не нужно
Последняя версия — 0.2.0 от 19 сентября 2026
Лицензия LGPL-3.0-only — бесплатно
Где нужен
В игрене нуженНа сервереобязателен

Ставится только на сервер; игрокам ставить не нужно

Версии игры26.2–26.3
Описание переведено автоматическиПоказать оригинал (EN)

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
Scalar5.59

≈1.33× быстрее, ≈25% меньше времени CPU при идентичной генерации мира.

Эти числа измерены с 3 из 4 активных ядер (до добавления canyonCarverSkip) и пока не отражают вклад генерации каньонов. Считайте эту таблицу нижней границей, а не текущим итогом.

Изолированные микробенчмарки показывают куда большие числа (5–12× на самих ядрах), но реальная генерация чанков тратит большую часть времени на сэмплирование шума, размещение фич/структур и вычисление биомов, ничего из чего VectorX не трогает. 25% — это фактическая доля векторизованных ядер в общей стоимости, измеренная на месте, а не экстраполированная.

Ваши результаты будут отличаться: старые CPU, ограниченные SSE/AVX2, или JDK, выбирающие меньшую ширину вектора, увидят пропорционально меньше. Включите diagnostics в конфиге, чтобы увидеть ширину, которую вы реально получаете.

Почему это безопасно

  1. Дифференциальный самотест при запуске. Каждый векторный бэкенд прогоняется бок о бок со своим скалярным двойником на сгенерированных входных данных, включая граничные случаи и длины, не кратные ширине линии. Одно расхождение — и это ядро понижается до скалярного на всю сессию.
  2. Fail-open на каждый вызов. Каждый хук ловит Throwable и проваливается на точный ванильный путь кода, собственное тело метода Mojang или поэлементный цикл, вызывающий собственный transform Mojang.
  3. Никаких жёстких требований к Mixin. Обновление Minecraft или конфликтующий мод, сдвигающий целевой код, делает VectorX инертным, а не склонным к крашам.
  4. Никаких статических ссылок на модуль-инкубатор. VectorX загружается и работает корректно на JVM, где jdk.incubator.vector полностью отсутствует.

Конфигурация

Отредактируйте сгенерированный TOML-файл в config/ или откройте экран настроек в игре через Mod Menu.

ОпцияПо умолчаниюЭффект
backendForcedScalarfalseПринудительно переводит каждое ядро в скалярный режим, переопределяя всё ниже.
densityFunctionMapautoauto = вектор, если доступен и корректен, иначе скаляр · scalar = принудительно скаляр · off = отключить хук.
densityFunctionClampautoТа же семантика auto / scalar / off.
packedStorageUnpackautoТа же семантика auto / scalar / off.
canyonCarverSkipautoТа же семантика auto / scalar / off.
selfTesttrueЗапускает проверку скаляр против вектора при запуске. Оставьте включённой.
diagnosticsfalseЛогирует полный отчёт при запуске: разрешение модулей, бэкенд каждого ядра, причину отката, ширину вектора, известные взаимодействия с модами.

Всё, кроме diagnostics, требует перезапуска.

Частые вопросы

Как установить VectorX?

Установите Fabric под свою версию Minecraft, скачайте VectorX под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть VectorX?

У VectorX есть сборки для Minecraft 26.2–26.3.

Нужен ли VectorX на сервере?

Ставится только на сервер; игрокам ставить не нужно

Лицензия и источник
GNU Lesser General Public License v3.0 onlyможно использовать и распространять; изменённые версии — под той же лицензией и с исходным кодом
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее