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
  • 專案
  • 專案
  • 專案