Skip to content

TornadoVM 6.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 09:22
· 6 commits to master since this release
fadb20b

02/09/26

Improvements

  • #1018: Expand unit-test coverage for Java language corner cases and compiler restrictions
  • #980: Add TornadoVM contributor Claude skill (OpenCL/CUDA/Metal)
  • #952: [feat] CUDA backend: native FP8 conversion + FP8/BF16 tensor-core MMA and cp.async copies
  • #962: Packed half2 support for the CUDA backend
  • #928: Add FP8 (E4M3/E5M2) support for the CUDA backend + fix NaN/Infinity float constants
  • #934: Auto-disable intra-plan concurrency on serial task graphs
  • #936: Stage large H2D transfers through a pinned host buffer ring
  • #919: [cuda] NVTX instrumentation for library tasks + cuSPARSE hybrid provider (SpMV/SpMM)
  • #912: [cuda] CUTLASS hybrid-API provider: FP32/FP16 GEMM + fused bias/ReLU/GELU epilogues as library tasks
  • #888: [hybrid] Hybrid API: native library tasks with cuDNN provider
  • #887: [hybrid] Hybrid API: native library tasks with cuFFT provider
  • #850: [Metal] Add hardware matrix units (`simdgroup_float8x8`) for fast gemms to M-silicon

Compatibility

  • #894: Remove dependency to JVMCI for JDK27+ backwards compatiblity for JDKs 21-26
  • #1017: Correct the hybrid-API documentation against the code on develop
  • #938: [docs] Revision of the documentation page for v5.0.0
  • #925: [ci] Fix release pipeline triggers, rename pipeline stages, skip redundant CI

Bug Fixes

  • #1054: [hotfix] Emit a switch statement for the table and hash switch lowerings instead of nothing
  • #1035: [runtime] Allocate every output of a batched graph instead of reusing another object's buffer
  • #1012: [bugfix] cuSPARSE native library is never packaged, so the provider is dead on Linux/macOS
  • #1007: Fix develop build: TestAtomicRmw references the removed SPIRV and PTX backend types
  • #945: [fix] Restore cutlass-jni build on GCC 15+ hosts (-Wtemplate-body)
  • #932: Fix vmDeps path to dispatch KernelContext/WorkerGrid kernels
  • #910: [cuda] Fix misleading NVRTC compilation errors: memoized FP16 header resolution + explanatory driver/toolkit diagnostics
  • #877: [hotfix] Resolving unit-tests failure in CUDA backend
  • #903: Fix for stride-16 swizzled FP16 shared-memory load and store that caused segfault in tests
  • #874: [hotfix] Multiple fixes after enabling CUDA backend into develop
  • #886: Fix batch processing with a remainder chunk under device buffer reuse
  • #882: Fix repeated execution of batched plans

Other Changes

  • #1060: docs: add class-level Javadoc to examples #35
  • #1058: Replace JNI with the Java FFM API in the backends and library tasks
  • #1056: [docs] Bring the hybrid API guide up to date with the providers and execution-plan options on master
  • #1010: Pass CUDA compiler flags to NVRTC, and add named compile profiles (default|fast|debug|repro)
  • #1048: [profiler] Count copy-out bytes even when the transfer produced no event to time
  • #1049: [runtime] Fix silent zero output when a prebuiltTask follows a JIT task in the same graph
  • #1052: [docs] Remove stale planning notes left at the repository root
  • #1050: [release] Fix Windows release-SDK build/validate failures: argnd MAX_PATH, and jdk22plus JVMCI vendoring
  • #1036: [api] TornadoExecutionPlan.transferToDevice(): ad-hoc copy-in without running a kernel to force it
  • #1038: [docs] Add a tornadovm-perf-campaign skill: profiling recipes, probe harness and optimisation-pattern catalogue
  • #1027: [runtime] Clear only the written prefix of each wait-list row between executions (1.57x on dependency-tracked decode)
  • #1040: [runtime] Dispatch interpreter bytecodes through a switch over named handlers
  • #1039: [runtime] Replace the per-backend instanceof chains with one native-array layout table
  • #1029: [runtime] Read non-terminal copy-outs asynchronously instead of blocking on each one (1.27x on an 8-output graph)
  • #1025: [cuda] Propagate CUDA driver failures to Java instead of only logging them
  • #1020: Add CUDA-samples-derived compute examples with measured results (GEMM, N-body, binomial options, FDTD stencil)
  • #1045: [build] Validate the BACKEND variable in the Makefile against the supported backends
  • #1043: Fix emitter miscompile of nested short-circuit booleans
  • #984: Add warp-vote intrinsics (simdAny, simdAll, simdBallot) to KernelContext on the CUDA backend
  • #1016: Add KernelContext coverage for globalBarrier, cp.async byte copies and flash attention
  • #1013: [bugfix] KernelContext operations a backend cannot intrinsify silently compute wrong results
  • #1014: [bugfix] CUDA: getFloat32() on a swizzle-loaded half float fails to compile
  • #1015: [bugfix] Library tasks can allocate device memory inside a CUDA-graph capture region
  • #1019: Fix atomicAdd on local-memory arrays with a runtime-computed index (CUDA backend)
  • #1002: Allocate wait-event lists on demand
  • #1008: Cache compiled CUDA modules on disk (re-land of #1000, which never reached develop)
  • #991: [cuda] Add atomicCAS, atomicExchange, atomicMin and atomicMax on local arrays to KernelContext
  • #1004: Size the bytecode buffer for the graph: many-task graphs silently produce wrong results
  • #997: Take fewer map and monitor operations on the interpreter's per-object hot path
  • #999: Emit variable declarations in a deterministic order
  • #996: Fix consumeFromDevice silently reading a stale buffer when the named producer is not the previously executed graph
  • #978: Remove FPGA support (build infra, codegen, API, docs)
  • #951: Remove the SPIR-V backend
  • #872: Remove PTX backend in favour of the newly added CUDA backend
  • #908: [metal][fix] Fix inflated Metal backend profiling metrics (#905)
  • #994: Fix packed FP16 (Half2) support on the OpenCL backend and add cross-backend test coverage
  • #958: Extend TaskGraph task/libraryTask arity to 20 for hybrid API
  • #947: Add tornado-fuzz: differential + sanitizer fuzz tester for the CUDA backend
  • #967: [cuda] BFloat16Array: first-class bfloat16 native array + JIT conversions + cuBLAS/CUTLASS bf16 GEMM
  • #963: [cuda] Saturate CUTLASS provider: SiLU/Sigmoid/Tanh/HardSwish epilogues + batched FP16 GEMM
  • #969: [cuda] Fix HalfFloat codegen for inline new HalfFloat(computedExpr) writes
  • #921: [fix] Windows support for the CUDA backend (build, runtime DLL resolution, correctness)
  • #923: [cleanup] remove deprecated files
  • #915: [docs] Complete hybrid API guide (HYBRID_API_GUIDE.md): all providers, examples, flags, custom-provider walkthrough
  • #864: Update level-zero library version to v1.18.1
  • #893: Fix CUDA-backend build on develop (cuFFT broken merge + cudnn SDPA)
  • #901: Feat/update logo
  • #800: [JDK21] Support for CUDA streams for overlapping data transfers with TaskGraph execution
  • #852: Revise README to include latest TornadoVM updates
  • #879: [hybrid] Hybrid API: native library tasks with cuBLAS/cuBLASLt provider
  • #861: [cuda] Add CUDA C backend via NVRTC to complement the PTX backend
  • #890: [hotfix][PTX] Align compileTask exception handling with other backends to preserve original exception on bailout-disabled path
  • #884: [OpenCL] Fix pointer-to-ulong conversions rejected by strict OpenCL compilers (Intel iGPUs)
  • #848: Replace heuristic brace-placement with structured control-flow recovery (OpenCL + Metal)
  • #870: Fix nested persisted-object list on task-graph reuse and empty consume

How to use TornadoVM SDK

Select the archive matching your JDK (21, 25, 26, or 27) and target accelerator backend (opencl, cuda, metal, or full) from this Release's assets. Ensure JAVA_HOME points to a matching JDK installation before running. The example below uses jdk21 + opencl for Linux/macOS/Windows — swap jdk21-opencl for e.g. jdk26-cuda or jdk27-metal as needed.

Linux Systems

wget https://github.com/beehive-lab/TornadoVM/releases/download/v6.0.0/tornadovm-6.0.0-jdk21-opencl-linux-amd64.zip
unzip tornadovm-6.0.0-jdk21-opencl-linux-amd64.zip
export TORNADOVM_HOME="$(pwd)/tornadovm-6.0.0-jdk21-opencl"
export PATH=$TORNADOVM_HOME/bin:$PATH
tornado --devices
tornado --version

macOS Systems

wget https://github.com/beehive-lab/TornadoVM/releases/download/v6.0.0/tornadovm-6.0.0-jdk21-opencl-mac-aarch64.zip
unzip tornadovm-6.0.0-jdk21-opencl-mac-aarch64.zip
export TORNADOVM_HOME="$(pwd)/tornadovm-6.0.0-jdk21-opencl"
export PATH=$TORNADOVM_HOME/bin:$PATH
tornado --devices
tornado --version

Windows (10+) Systems

curl -L -o tornadovm-6.0.0-jdk21-opencl-windows-amd64.zip https://github.com/beehive-lab/TornadoVM/releases/download/v6.0.0/tornadovm-6.0.0-jdk21-opencl-windows-amd64.zip
tar -xf tornadovm-6.0.0-jdk21-opencl-windows-amd64.zip
set TORNADOVM_HOME=%cd%\tornadovm-6.0.0-jdk21-opencl
set PATH=%TORNADOVM_HOME%\bin;%PATH%
tornado --devices
tornado --version