beehive-lab/TornadoVM

Write Java. Run on GPUs. Fast.

🌪️ TornadoVM – GPU 上的 Java

是什么 – TornadoVM 是一个开源运行时,允许你编写 纯 Java 内核,并在 GPU(NVIDIA、AMD、Intel、Apple Silicon)或多核 CPU 上执行。运行时会将 Java 字节码 JIT 编译为目标设备的原生 GPU 语言(CUDA PTX、OpenCL C 或 Apple Metal MSL),并自动处理所有主机-设备间的数据传输。在 NVIDIA 硬件上,它还能直接调用 CUDA 库栈(cuBLAS、cuFFT、cuDNN),甚至暴露 Tensor-Core 的 mma.sync 内联函数,全部通过 Java 代码实现。


🎯 核心理念

理念 如何工作
一次编写,随处运行 使用 CUDA 风格的线程索引(ctx.globalIdx)编写 Java 内核,或简单地用 @Parallel 注解循环。TornadoVM 构建一个 TaskGraph,可分派到任意后端(OpenCL、CUDA、Metal、CPU)。
JIT 编译 Java 字节码 → Graal IR → 后端特定源码(CUDA PTX / OpenCL C / MSL)→ 运行时编译器(NVRTC、OpenCL 驱动、Metal)→ 针对实际数据大小优化的原生 GPU 二进制文件。
零 JNI 桩代码 无需手动编写原生包装器;运行时自动生成原生代码并链接到 Java 进程。
原生 CUDA 生态系统集成 生成的内核与库调用(cublasSgemv、FFT、cuDNN 操作、Tensor-Core 内联函数)共享设备缓冲区和 CUDA 流。你可以在同一图中混合自定义 Java 内核和厂商优化的库任务。
CUDA 图捕获 整个图(内核、库调用、传输)可一次性录制并用单个 cuGraphLaunch 重放,启动开销接近手写 CUDA。

🚀 典型应用场景

领域 示例项目
大语言模型推理 GPULlama3.java 在 RTX 5090 上以约 117 tokens/s 的速度运行 Llama-3、Qwen-3、Mistral 等模型,纯 Java 实现,已被 LangChain4j 和 Quarkus 使用。
实时图形 TornadoVM-Ray-Tracer 展示了完全用 Java 编写的交互式光线追踪。
计算机视觉 / 3D 重建 kfusion-tornadovm 在 GPU 上实现了 KinectFusion 流水线。
科学/工程代码 线性代数内核(SGEMV/SGEMM)、FFT、物理模拟、金融建模 – 全部受益于 cuBLAS/cuFFT 加速。
通用数据并行工作负载 任何“极易并行”的循环都可以用 @Parallel 注解,并在不重写算法的前提下卸载到 GPU 或 CPU。

📦 快速入门

  1. 安装sdk install tornadovm(选择 openclcudametalfull)。
  2. 验证设备tornado --devices
  3. 运行示例
    java @$TORNADOVM_HOME/tornado-argfile \
         -cp $TORNADOVM_HOME/share/java/tornado/tornado-examples-5.2.0.jar \
         uk.ac.manchester.tornado.examples.compute.MatrixVectorRowMajor
    
  4. 添加到 Maven 项目
    <dependency>
      <groupId>io.github.beehive-lab</groupId>
      <artifactId>tornado-api</artifactId>
      <version>5.2.0-jdk21</version>
    </dependency>
    
  5. 编写内核 – 使用低级 KernelContext API(如 README 所示)或高级 @Parallel 注解。构建 TaskGraph,可选地添加库任务(CuBlas::cublasSgemv 等),并通过 TornadoExecutionPlan 执行。

🛠️ 主要特性

  • 多后端支持:OpenCL、CUDA、Metal,以及 CPU 回退。
  • 原生 NVIDIA 库支持:cuBLAS/cuBLASLt、cuFFT、cuDNN(含 flash-attention)、Tensor-Core 内联函数。
  • TaskGraph 抽象 – 声明式数据传输、内核启动和库调用。
  • CUDA 图捕获,实现低开销重复执行。
  • 跨平台:支持 Linux、macOS、Windows;通过 OpenCL 支持集成 GPU 和 FPGA。
  • SDKMAN! 分发版 和 Docker 镜像,便于快速部署。
  • Apache 2.0 API + GPLv2-CE 运行时 – 商业使用宽松。

👥 社区与支持


📜 许可证

  • Tornado-API 及大多数模块 – Apache 2.0(你的代码无 copyleft 要求)。
  • 运行时和驱动 – GPLv2 with Classpath Exception(与 OpenJDK 相同),对下游应用也无 copyleft 要求。

总结 – TornadoVM 将原生 GPU 代码的性能带入 Java 生态系统,无需你自己编写 CUDA 或 OpenCL。它是一个真实、可投入生产的项目,已被用于 LLM 推理、光线追踪和科学计算。

相关

  • 项目
  • Dispatch
  • 项目
  • 项目
  • 项目