Frequently Asked Questions
In Linux and Mac OSx, TornadoVM can be installed by the installer.
Alternatively, it can be installed either from source or by using Docker.
TornadoVM can currently execute with the following three configurations:
TornadoVM with GraalVM (JDK 11, JDK 17).
TornadoVM with JDK11+ (e.g. OpenJDK 11, OpenJDK 17, Red Hat Mandrel 11, Amazon Corretto 11 & 17, Windows JDK 11 & 17).
There are examples of how to use TornadoVM and how to run with TornadoVM and code examples of how to use TornadoVM API.
Here you can find examples of how to use TornadoVM with GraalVM Polyglot.
Which programming languages does TornadoVM support?
How can I use it?
Is TornadoVM a Domain Specific Language (DSL)?
No, TornadoVM is not a DSL. It compiles a subset of Java code to OpenCL and PTX.The TornadoVM API only provides two Java annotations (@Parallel and @Reduce) plus a light API to create task-schedules (groups of Java methods to be accelerated by TornadoVM).
Can TornadoVM degrade the performance of my application?
No, TornadoVM can only increase the performance of your application because it can dynamically change the execution of a program at runtime onto another device. If a particular code segment cannot be accelerated, then execution falls back to the host JVM which will execute your code on the CPU as it would normally do.
Also with the Dynamic Reconfiguration, TornadoVM discovers the fastest possible device for a particular code segment completely transparently to the user.
Does it support the whole Java Language?
No, TornadoVM supports a subset of the Java programming language. A list of unsupported features along with the reasoning behind it can be found here.
Does TornadoVM support calls to standard Java libraries?
Partially yes. TornadoVM currently supports calls to the Math library. However, invocations that imply I/O are not supported.
Does TornadoVM support only OpenCL devices?
No. Currently, TornadoVM supports three compiler backends and therefore, it is able to generate OpenCL, PTX, and SPIR-V code depending on the hardware configuration.
Why is it called a VM?
The VM name is used because TornadoVM implements its own set of bytecodes for handling heterogeneous execution. These bytecodes are used for handling JIT compilation, device exploration, data management and live task-migration for heterogeneous devices (multi-core CPUs, GPUs, and FPGAs). We sometimes refer to a VM inside a VM (nested VM). The main VM is the Java Virtual Machine, and TornadoVM sits on top of that.
More information are available here.
How does TornadoVM interact with OpenJDK?
TornadoVM makes use of the Java Virtual Machine Common Interface (JVMCI) that is included from Java 9 to compile Java bytecode to OpenCL C / PTX at runtime. As a JVMCI implementation, TornadoVM uses Graal (it extends the Graal IR and includes new backends for OpenCL C and PTX code generation).
How do I know which parts of my application are suitable for acceleration?
Workloads with for-loops that do not have dependencies between iterations are very good candidates to offload on accelerators. Examples of this pattern are NBody computation, Black-scholes, DFT, KMeans, etc.Besides, matrix-type applications are good candidates, such as matrix-multiplication widely used in machine and deep learning.
How can I contribute to TornadoVM?
TornadoVM is an open-source project, and, as such, we welcome contributions.
TornadoVM is an open-source project, and, as such, we welcome contributions from all levels.
Solve issues reported on the GitHub page.
New proposals: We welcome new proposals and ideas. To work on a new proposal, use the discussion page on GitHub. Alternatively, you can open a shared document (e.g., a shared Google doc) where we can discuss and analyse your proposal.
Here you can find more information about how to contribute, code conventions, and tasks.
Still have questions? Get in touch and we’ll be happy to help.
What can TornadoVM do?
TornadoVM accelerates parts of your Java applications on heterogeneous hardware devices such as multicore CPUs, GPUs, and FPGAs. TornadoVM is currently being used to accelerate machine learning and deep learning applications, computer vision, physics simulations, financial applications, computational photography, natural language processing and signal processing.
Can I use TornadoVM in a commercial application?
Absolutely yes! TornadoVM employs many licenses as shown here, but its API is under CLASSPATH EXCEPTION, and hence it can be freely used in any application.