Releases: beehive-lab/TornadoVM
TornadoVM v0.15.1
Date: 15/05/2023
Improvements
- Introduction of a device selection heuristic based on the computing capabilities of devices. TornadoVM selects, as the default device, the fastest device based on its computing capability.
- Optimisation of removing redundant data copies for Read-Only and Write-Only buffers from between the host (CPU) and the device (GPU) based on the Tornado Data Flow Graph.
- New installation script for TornadoVM.
- Option to dump the TornadoVM bytecodes for the unit tests.
- Full debug option improved. Use
--fullDebug
.
Compatibility/Integration
- Integration and compatibility with the Graal 22.3.2 JIT Compiler.
- Improved compatibility with Apple M1 and Apple M2 through the OpenCL Backend.
- GraalVM/Truffle programs integration improved. Use
--truffle
in thetornado
script to run guest programs with Truffle.
Example:tornado --truffle python myProgram.py
Full documentation: https://tornadovm.readthedocs.io/en/latest/truffle-languages.html
Bug fixes:
- Documentation that resets the device's memory: https://github.com/beehive-lab/TornadoVM/blob/master/tornado-api/src/main/java/uk/ac/manchester/tornado/api/TornadoExecutionPlan.java#L282
- Append the Java
CLASSPATH
to thecp
option from thetornado
script. - Dependency fixed for the
cmake-maven
plugin fixed for ARM-64 arch. - Fixed the automatic installation for Apple M1/M2 and ARM-64 and NVIDIA Jetson nano computing systems.
- Integration with IGV fixed. Use the
--igv
option for thetornado
andtornado-test
scripts.
POM file dependencies
To obtain the TornadoVM API from maven dependencies, you need to include the following dependency in your pom file. Note that, for running the TornadoVM application, you either need: a) TornadoVM SDK Binaries; b) a full installation of the TornadoVM; or c) a docker instance of TornadoVM.
<repositories>
<repository>
<id>universityOfManchester-graal</id>
<url>https://raw.githubusercontent.com/beehive-lab/tornado/maven-tornadovm</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-api</artifactId>
<version>0.15.1</version>
</dependency>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-matrices</artifactId>
<version>0.15.1</version>
</dependency>
</dependencies>
TornadoVM v0.15
Improvements
-
New TornadoVM API:
-
API refactoring (
TaskSchedule
has been renamed toTaskGraph
) -
Introduction of the Immutable
TaskGraphs
-
Introduction of the TornadoVM Execution Plans: (
TornadoExecutionPlan
) -
The documentation of migration of existing TornadoVM applications to the new API can be found here: https://tornadovm.readthedocs.io/en/latest/programming.html#migration-to-tornadovm-v0-15
-
-
Launch a new website https://tornadovm.readthedocs.io/en/latest/ for the documentation
-
Improved documentation
-
Initial support for Intel ARC discrete GPUs.
-
Improved TornadoVM installer for Linux
-
ImprovedTornadoVM launch script with optional parameters
-
Support of large buffer allocations with Intel Level Zero. Use:
tornado.spirv.levelzero.extended.memory=True
Bug fixes:
- Vector and Matrix types
- TornadoVM Floating Replacement compiler phase fixed
- Fix
CMAKE
for Intel ARC GPUs - Device query tool fixed for the PTX backend
- Documentation for Windows 11 fixed
POM file dependencies
To obtain the TornadoVM API from maven dependencies, you need to include the following dependency in your pom file. Note that, for running the TornadoVM application, you either need: a) TornadoVM SDK Binaries; b) a full installation of the TornadoVM; or c) a docker instance of TornadoVM.
<repositories>
<repository>
<id>universityOfManchester-graal</id>
<url>https://raw.githubusercontent.com/beehive-lab/tornado/maven-tornadovm</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-api</artifactId>
<version>0.15</version>
</dependency>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-matrices</artifactId>
<version>0.15</version>
</dependency>
</dependencies>
TornadoVM v0.14.1
Improvements
- The tornado command is replaced from a Bash to a Python script.
- Use
tornado --help
to check the new options and examples.
- Use
- Support of native tests for the SPIR-V backend.
- Improvement of the OpenCL and PTX tests of the internal APIs.
Compatibility/Integration
- Integration and compatibility with the Graal 22.2.0 JIT Compiler.
- Compatibility with JDK 18 and JDK 19.
- Compatibility with Apple M1 Pro using the OpenCL backend.
Bug Fixes
- CUDA PTX generated header fixed to target NVIDIA 30xx GPUs and CUDA 11.7.
- The signature of generated PTX kernels fixed for NVIDIA driver >= 510 and 30XX GPUs when using the TornadoVM Kernel API.
- Tests of virtual OpenCL devices fixed.
- Thread deployment information for the OpenCL backend is fixed.
TornadoVMRuntimeCI
moved toTornadoVMRutimeInterface
.
POM file dependencies
To obtain the TornadoVM API from maven dependencies, you need to include the following dependency in your pom file. Note that, for running the TornadoVM application, you either need a full installation of the TornadoVM or a docker instance of TornadoVM.
<repositories>
<repository>
<id>universityOfManchester-graal</id>
<url>https://raw.githubusercontent.com/beehive-lab/tornado/maven-tornadovm</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-api</artifactId>
<version>0.14.1</version>
</dependency>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-matrices</artifactId>
<version>0.14.1</version>
</dependency>
</dependencies>
TornadoVM v0.14
15/06/2022
New Features
- New device memory management for addressing the memory allocation limitations of OpenCL and enabling pinned memory of device buffers.
- The execution of task-schedules will still automatically allocate/deallocate memory every time a task-schedule is executed, unless lock/unlock functions are invoked explicitly at the task-schedule level.
- One heap per device has been replaced with a device buffer per input variable.
- A new API call has been added for releasing memory:
unlockObjectFromMemory
- A new API call has been added for locking objects to the device:
lockObjectInMemory
This requires the user to release memory by invokingunlockObjectFromMemory
at the task-schedule level.
- Enhanced Live Task migration by supporting multi-backend execution (PTX <-> OpenCL <-> SPIR-V).
Compatibility/Integration
- Integration with the Graal 22.1.0 JIT Compiler
- JDK 8 deprecated
- Azul Zulu JDK supported
- OpenCL 2.1 as a default target for the OpenCL Backend
- Single Docker Image for Intel XPU platforms, including the SPIR-V backend (using the Intel Integrated Graphics), and OpenCL (using the Intel Integrated Graphics, Intel CPU and Intel FPGA in emulation mode). Image: https://github.com/beehive-lab/docker-tornado#intel-integrated-graphics
Improvements/Bug Fixes
SIGNUM
Math Function included for all three backends.- SPIR-V optimizer enabled by default (3x reduce in binary size).
- Extended Memory Mode enabled for the SPIR-V Backend via Level Zero.
- Phi instructions fixed for the SPIR-V Backend.
- SPIR-V Vector Select instructions fixed.
- Duplicated IDs for Non-Inlined SPIR-V Functions fixed.
- Refactoring of the TornadoVM Math Library.
- FPGA Configuration files fixed.
- Bitwise operations for OpenCL fixed.
- Code Generation Times and Backend information are included in the profiling info.
TornadoVM v0.13
CHANGELOG v0.13
- Integration with JDK 17 and Graal 21.3.0
- JDK 11 is the default version and the support for the JDK 8 has been deprecated
- Support for extended intrinsics regarding math operations
- Native functions are enabled by default
- Support for 2D arrays for PTX and SPIR-V backends:
- Integer Test Move operation supported:
- Improvements in the SPIR-V Backend:
- Experimental SPIR-V optimizer. Binary size reduction of up to 3x
- Fix malloc functions for Level-Zero
- Support for pre-built SPIR-V binary modules using the TornadoVM runtime for OpenCL
- Performance increase due to cached buffers on GPUs by default
- Disassembler option for SPIR-V binary modules. Use
--printKernel
- Improved Installation:
- Full automatic installer script integrated
- Documentation about the installation for Windows 11
- Refactoring and several bug fixes
- 5769418
- Vector types fixed:
- Fix AtomicInteger get for OpenCL:
- Dependencies for Math3 and Lang3 updated
TornadoVM v0.12
CHANGELOG v0.12
- New backend: initial support for SPIR-V and Intel Level Zero
- Level-Zero dispatcher for SPIR-V integrated
- SPIR-V Code generator framework for Java
- Benchmarking framework improved to accommodate all three backends
- Driver metrics, such as kernel time and data transfers included in the benchmarking framework
- TornadoVM profiler improved:
- Command line options added:
--enableProfiler <silent|console>
and--dumpProfiler <jsonFile>
- Logging improve for debugging purposes. JIT Compiler, JNI calls and code generation
- Command line options added:
- New math intrinsincs operations supported
- Several bug fixes:
- Duplicated barriers removed. TornadoVM BARRIER bytecode fixed when running multi-context
- Copy in when having multiple reductions fixed
- TornadoVM profiler fixed for multiple context switching (device switching)
- Pretty printer for device information
Docker Images
Docker images are available for v0.12. Note that all docker images are built for the OpenCL backend only.
Visit https://github.com/beehive-lab/docker-tornado for more details
POM file dependencies
To obtain the TornadoVM API from maven dependencies, you need to include the following dependency in your pom file. Note that, for running the TornadoVM application, you either need a full installation of the TornadoVM or a docker instance of TornadoVM.
<repositories>
<repository>
<id>universityOfManchester-graal</id>
<url>https://raw.githubusercontent.com/beehive-lab/tornado/maven-tornadovm</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-api</artifactId>
<version>0.12</version>
</dependency>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-matrices</artifactId>
<version>0.12</version>
</dependency>
</dependencies>
TornadoVM v0.11
- TornadoVM JIT Compiler upgrade to work with Graal 21.2.0 and JDK 8 with JVMCI 21.2.0
- Refactoring of the Kernel Parallel API for Heterogeneous Programming:
- Methods
getLocalGroupSize(index)
andgetGlobalGroupSize
moved to public fields to keep consistency with the rest of the thread properties within theKernelContext
class.- Changeset: e1ebd66
- Methods
- Compiler update to register the global number of threads: https://github.com/beehive-lab/TornadoVM/pull/133/files
- Simplification of the TornadoVM events handler: https://github.com/beehive-lab/TornadoVM/pull/135/files
- Renaming the Profiler API method from
event.getExecutionTime
toevent.getElapsedTime
: #134 - Deprecating
OCLWriteNode
andPTXWriteNode
and fixing stores for bytes: #131 - Refactoring of the FPGA IR extensions, from the high-tier to the low-tier of the JIT compiler
- Utilizing the FPGA Thread-Attributes compiler phase for the FPGA execution
- Using the
GridScheduler
object (if present) or use a default value (e.g., 64, 1, 1) for defining the FPGA OpenCL local workgroup
- Several bugs fixed:
- Codegen for sequential kernels fixed
- Function parameters with non-inlined method calls fixed
Docker Images
Docker images available for v0.11. Note that all docker images are built for the OpenCL backend only.
Visit https://github.com/beehive-lab/docker-tornado for more details
Pom file dependencies
To obtain the TornadoVM API from maven dependencies, you need to include the following dependency in our pom
file. Note that, for running the TornadoVM application, you either need a full installation of the TornadoVM or a docker instance of TornadoVM.
<repositories>
<repository>
<id>universityOfManchester-graal</id>
<url>https://raw.githubusercontent.com/beehive-lab/tornado/maven-tornadovm</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-api</artifactId>
<version>0.11</version>
</dependency>
<dependency>
<groupId>tornado</groupId>
<artifactId>tornado-matrices</artifactId>
<version>0.11</version>
</dependency>
</dependencies>
TornadoVM v0.10
- TornadoVM JIT Compiler sync with Graal 21.1.0
- Experimental support for OpenJDK 16
- Tracing the TornadoVM thread distribution and device information with a new option
--threadInfo
instead of--debug
- Refactoring of the new API:
TornadoVMExecutionContext
renamed toKernelContext
GridTask
renamed toGridScheduler
- AWS F1 AMI version upgraded to 1.10.0 and automated the generation of AFI image
- Xilinx OpenCL backend expanded with:
- a) Initial integration of Xilinx OpenCL attributes for loop pipelining in the TornadoVM compiler
- b) Support for multiple compute units
- Logging FPGA compilation option added to dump FPGA HLS compilation to a file
- TornadoVM profiler enhanced for including data transfers for the stack-frame and kernel dispatch time
- Initial support for 2D Arrays added
- Several bug fixes and stability support for the OpenCL and PTX backends
TornadoVM v0.9
15/04/2021
- Expanded API for expressing kernel parallelism within Java. It can work with the existing loop parallelism in TornadoVM.
- Direct access to thread-ids, OpenCL local memory (PTX shared memory), and barriers
TornadoVMContext
added:- Code examples:
- Documentation:
- Profiler integrated with Chrome debug:
- Use flags:
-Dtornado.chrome.event.tracer.enabled=True -Dtornado.chrome.event.tracer.filename=userFile.json
- See #41
- Use flags:
- Added support for Windows 10:
- TornadoVM running with Windows JDK 11 supported (Linux & Windows)
- Xilinx FPGAs workflow supported for Vitis 2020.2
- Pre-compiled tasks for Xilinx/Intel FPGAs fixed
- Slambench fixed when compiling for PTX and OpenCL backends
- Several bug fixes for the runtime, JIT compiler and data management.