TornadoVM is a Java framework that compiles Java code into programs for GPUs and multicore CPUs at runtime. Java developers use it to run compute-heavy code on NVIDIA, AMD, Intel, and Apple hardware without writing CUDA C or maintaining JNI bindings.
Borrowing it
Nothing to install: this file belongs to beehive-lab/TornadoVM. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/beehive-lab/TornadoVM/master/.claude/skills/tornadovm-perf-campaign/SKILL.mdgit clone --depth 1 https://github.com/beehive-lab/TornadoVMWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/beehive-lab/tornadovm/tornadovm-perf-campaign)<a href="https://agentmods.dev/skills/beehive-lab/tornadovm/tornadovm-perf-campaign"><img src="https://agentmods.dev/badge/skills/beehive-lab/tornadovm/tornadovm-perf-campaign/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/beehive-lab/tornadovm/tornadovm-perf-campaign"><img src="https://agentmods.dev/badge/skills/beehive-lab/tornadovm/tornadovm-perf-campaign.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00112 | $0.02002 |
| Opus 5 | $0.00056 | $0.01001 |
| Sonnet 5 | $0.00022 | $0.00400 |
| Haiku 4.5 | $0.00011 | $0.00200 |
Grade A, and why
tornadovm-perf-campaign scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 91 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Running a TornadoVM optimisation campaign
A campaign is a loop, not a patch: measure → attribute → hypothesise → falsify → change → re-measure → ship with numbers. The hard part is not writing the optimisation; it is knowing which microsecond you are removing and proving you removed it.
Files here:
references/measurement.md— exact profiling and A/B recipes, baselines, tool gotchasreferences/probes.md— standalone probe harness and ready-made probe shapesreferences/catalogue.md— the optimisation-pattern catalogue and what a previous campaign found (with numbers)
The loop
- Profile before touching anything. Host time = JFR; driver/device time = nsys. Attribute per phase (start-up vs steady state; per-execution vs per-token). Never profile with
-Dtornado.profiler=True— TornadoVM's own profiler perturbs a short task graph by ~3x and misreports transfer timers by up to 20x (that was itself a finding, PR #1024). - State the hypothesis as a number. "The 24-byte stack-frame upload costs 2.00 µs per launch, the same as the 2 KB user copy" is a hypothesis. "Dispatch feels slow" is not.
- Falsify with a standalone probe before editing runtime code. A probe is 40 lines in the scratchpad, compiles against the built SDK, and runs in seconds (
references/probes.md). Several campaign hypotheses died here — cheaply. - Change one mechanism. If two changes have separate numbers, they are two PRs.
- A/B in the same build family: stash the change, rebuild, measure baseline, restore, rebuild, measure. Medians of 3+ runs. Always include a control that must not move (a GPU-bound workload) — if it moves, the measurement is wrong.
- Separate displaced work from removed work. Vary the iteration count: a fixed cost shrinks as a percentage, a per-iteration cost does not. A "speed-up" that vanishes at 512 iterations was a cost you moved, not one you deleted.
- Ship with the numbers, the controls, and the negatives. See "PR shape" below.
What ships with it
3 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 91 lines · 112 tokens per session scan A 5b7b298eab5f
tornadovm-perf-campaign is a skill published in the GitHub repository beehive-lab/TornadoVM (1,498 stars, last pushed today), licensed Apache-2.0. It adds 112 tokens to every session and 2,002 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
quarkus-native
Deep expertise in Quarkus Native Image builds, GraalVM integration, reflection configuration, and Profile-Guided Optimization. Use for native compilation questions.
graalvm-expert
Expert knowledge for GraalVM, Native Image (AOT), Polyglot runtime, and reflection/resource configuration. Use for native compilation and multi-language JVM questions.
tika-eval-compare
Compare extracts from two Tika builds over a corpus to detect regressions in content, encoding, exceptions, and embedded-document handling. Use for "compare before/after extracts", "eval this change against the corpus".
azure-security-keyvault-secrets-java
Azure Key Vault Secrets Java SDK for secret management. Use when storing, retrieving, or managing passwords, API keys, connection strings, or other sensitive configuration data.
azure-communication-chat-java
Build real-time chat applications with Azure Communication Services Chat Java SDK. Use when implementing chat threads, messaging, participants, read receipts, typing notifications, or real-time chat features.
azure-ai-agents-persistent-java
Azure AI Agents Persistent SDK for Java. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Triggers: "PersistentAgentsClient", "persistent agents java", "agent threads java", "agent runs java", "streaming agents java".