TornadoVM作为面向Java的开源异构GPU编程框架,其7.3版本发布成为重要里程碑,为Java应用运行原生GPU工作负载提供核心技术支撑。该框架可依托多核CPU与GPU实现Java程序自动化加速,与主流JDK协同工作,构建丰富GPU编程生态,适配OpenJDK、GraalVM等主流发行版,支持Java代码卸载至硬件后端,依托FFM与JVMCI等机制优化内存管理与编译,适配现代云及机器学习负载需求,代表编写一次、部署一次的性能提升方向。7.3版本迭代带来架构优化,替换JNI为FFM API,移除实验性JVMCI依赖,统一采用反射+ASM+Unsafe层处理编译器元数据,强化对Nvidia生态集成,支持CUDA后端调用,并新增多GPU执行能力。框架核心面向特定场景提供编程方式,包括并行API、内核上下文API、TileContext等,旨在支撑线性代数、信号分析、深度学习及稀疏矩阵优化等Nvidia GPU优化功能,已与多种库集成,覆盖从开发到生产应用的全流程,通过不同编程模式满足差异化需求。
--91likeyou---
第 7 版带来了一些架构上的变更。后端现在使用 Foreign Function & Memory(FFM)API 取代了 Java Native Interface(JNI)。实验性的 JVM 编译器接口(JVMCI)依赖项也被移除。据开发团队介绍,TornadoVM 现在“通过反射 + ASM + Unsafe 层获取所有编译器元数据”。它在所有受支持的 JDK(21、25、26 和 27)上统一采用了这一处理路径。
该版本还通过优化 CUDA 后端深化了与 Nvidia 生态系统的集成。这包括对 cuTile 编程模型的支持(通过新的 TileContext),以及能够直接从 TornadoVM 任务图(TaskGraphs)中调用 cuBLAS 和 CUTLASS 等 CUDA 库。开发者可以根据性能和可移植性需求,将 JIT 生成的内核替换为 CUDA 库调用,或将两者串联起来。同样,TornadoVM 也通过混合 API 为苹果公司的 MXL 库添加了相同的功能。最后,该版本还新增了对多 GPU 执行的支持。
并非所有的 Java 计算都能从卸载中获益。最适合卸载的是数据并行工作负载,例如迭代之间没有依赖关系的循环,因为它们可以在加速器上并行运行。
TornadoVM 最新版本的目标之一就是构建一个符合 Java 编程惯例的 JVM 环境,以便访问 Nvidia 针对不同硬件平台优化过的库。其目的是让 Java 开发者能够利用线性代数、快速傅里叶变换(用于信号分析)、深度神经网络以及针对稀疏矩阵的手动优化矩阵乘法等功能。TornadoVM 已经与 Quarkus、Lang4j、Flink、Spring AI 等库实现集成,并可以通过 SDKMan 获取。
以 Apache Flink 与 TornadoVM 的集成为例,其核心思路是:开发者像往常一样使用 Table API 编写标准查询,并通过一个配置标志来标明该查询可能需要在 GPU 上进行加速。
随后,当计算任务到达任务管理器时,框架会检查其所在节点中是否有可用的 GPU;如果可用,则连接到库提供程序——该提供程序会分析查询的中间表示(IR),判断该计算是否确实适合在 GPU 上执行。
总的来说,TornadoVM 为 Java 程序员提供了四种针对 Nvidia GPU 的编程方式。首先是并行 API,那实际上只是对循环进行注解,并向编译器提供提示,表明该循环有可能被并行化。从长远来看,这个简单的 API 并不足以让生产级应用程序达到预期的性能。因此,它又增加了其他 API,如内核上下文 API 和前文提到的 TileContext。
随着 7.3 版本的发布,TornadoVM 团队推出了 jitLLM v2.0——这是基于 TornadoVM 构建的下一代 Java AI 推理引擎。该团队将 jitLLM 定位为在性能上可以与 llama.cpp 和 Ollama 直接竞争的产品,而且以单个 JAR 文件的形式发布。
TornadoVM 和 jitLLM 均通过 Beestream.ai 进行商业化推广。Beestream.ai 是 TornadoVM 团队创立的一家衍生公司。
要了解更多详情,可以访问 TornadoVM 官网,也可以观看近期比利时 Devoxx 大会的发布视频,其中包括:利用 TornadoVM 的混合 API 从 Java 接入 NVIDIA 生态系统。
:
🔥 热词:#原生支持gpu的py图形界面架构 · #java调用gpu · #Ubuntu运行GPU · #liunx gpu运行程序