TornadoVM, среда программирования гетерогенных графических процессоров с открытым исходным кодом для Java, достигла версии 7.3, что является важной вехой для проекта.
Ранее InfoQ освещала проект в декабре 2025 и 2022 годов.
TornadoVM автоматически ускоряет программы Java на многоядерных процессорах и графических процессорах. Вместо того, чтобы заменять существующие JVM, он работает вместе с ними и предоставляет богатую экосистему программирования графических процессоров на Java, которую вы можете использовать с любым основным дистрибутивом JDK, таким как OpenJDK, Graalvm, Temurin или Zulu.
Он выгружает код Java на аппаратные серверные части, управляет памятью между кучей Java и ускорителями и запускает полученные вычислительные ядра. Это делает его полезным строительным блоком для современных рабочих нагрузок в облаке и машинном обучении.
Во время разработки TornadoVM компилирует исходный код Java в серверные части OpenCL и Apple Metal. Идея состоит в том, что вы можете разрабатывать локально на своем ноутбуке и использовать доступное локально оборудование, а затем развертывать его на сервере с графическими процессорами Nvidia и добиться значительного повышения производительности — это своего рода форма «Напиши один раз, запускай где угодно» для современных рабочих нагрузок машинного обучения.
Версия 7 содержит несколько архитектурных изменений. Серверные части теперь используют API внешних функций и памяти (FFM) вместо собственного интерфейса Java (JNI). Экспериментальная зависимость интерфейса компилятора JVM (JVMCI) также была удалена. По словам команды, TornadoVM теперь получает «все метаданные компилятора через слой отражения + ASM + Unsafe», который представляет собой единый, унифицированный путь для каждого поддерживаемого JDK (21, 25, 26 и 27).
Релиз также углубляет интеграцию с экосистемой Nvidia посредством оптимизированного бэкэнда CUDA. Сюда входит поддержка модели программирования cuTile (через новый Тайлеконтекст) и возможность вызывать библиотеки CUDA, такие как cuBLAS и CUTLASS, непосредственно из TornadoVM TaskGraphs. Разработчики могут заменять ядра, сгенерированные JIT, вызовами библиотеки CUDA или связывать их вместе, в зависимости от их потребностей в производительности и переносимости. Аналогично, TornadoVM снова добавляет ту же функциональность для библиотеки Apple MXL через гибридный API. Наконец, добавлена поддержка выполнения на нескольких графических процессорах.
Не все вычисления Java выигрывают от разгрузки. Лучшими кандидатами являются рабочие нагрузки с параллельным обменом данными, такие как циклы без зависимостей между итерациями, поскольку их итерации могут выполняться параллельно в ускорителе.
Одной из целей последних версий TornadoVM является создание идиоматической среды JVM для доступа к библиотекам, которые Nvidia настраивала для различных аппаратных платформ. Цель состоит в том, чтобы разработчики Java могли использовать такие вещи, как линейная алгебра, быстрые преобразования Фурье (для анализа сигналов), глубокие нейронные сети и оптимизированное вручную умножение матриц для разреженных матриц. TornadoVM имеет интеграцию библиотек с Quarkus, Lang4j, Flink, Spring AI и другими, а также доступен через SDKMan.
Например, рассмотрим интеграцию Apache Flink с TornadoVM — основная идея заключается в том, что разработчик пишет стандартный запрос, как обычно это делается с помощью Table API. Флаг конфигурации используется для указания того, что этот запрос потенциально должен быть ускорен на графическом процессоре.
Затем, когда вычисление достигает диспетчера задач, платформа проверяет, доступен ли графический процессор в узле, на котором оно выполняется, и, если да, подключается к поставщику библиотеки, который анализирует промежуточное представление (IR) запроса, чтобы увидеть, действительно ли вычисление подходит для выполнения на графическом процессоре.
В общей сложности TornadoVM предлагает четыре способа программирования графических процессоров Nvidia в качестве Java-программиста. Во-первых, параллельный API, который на самом деле представляет собой просто аннотацию, которая аннотирует цикл и дает подсказку компилятору о том, что этот цикл может быть потенциально парализован. Этот простой API в долгосрочной перспективе оказался недостаточным для достижения желаемой производительности для производственных приложений, поэтому были добавлены дополнительные API, такие как API контекста ядра и уже упомянутый TileContext.
Наряду с выпуском 7.3 команда TornadoVM представила jitLLM v2.0, механизм вывода Java AI следующего поколения, созданный на основе TornadoVM. Команда позиционирует jitLLM как прямого конкурента llama.cpp и Ollama по производительности и поставляется в виде одного JAR-файла.
И TornadoVM, и jitLLM коммерциализируются через Beestream.ai, дочернюю компанию, основанную командой TornadoVM.
Более подробную информацию можно найти на сайте TornadoVM, а также в недавних видеороликах от Devoxx Belgium, в том числе: «Подключитесь к экосистеме NVIDIA из Java с помощью гибридного API TornadoVM».