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-nccl/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-nccl)<a href="https://agentmods.dev/skills/beehive-lab/tornadovm/tornadovm-nccl"><img src="https://agentmods.dev/badge/skills/beehive-lab/tornadovm/tornadovm-nccl/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-nccl"><img src="https://agentmods.dev/badge/skills/beehive-lab/tornadovm/tornadovm-nccl.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.00144 | $0.02315 |
| Opus 5.5 | $0.00058 | $0.00926 |
| Sonnet 5.5 | $0.00029 | $0.00463 |
| Haiku 4.5 | $0.00014 | $0.00231 |
Grade A, and why
tornadovm-nccl 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 14d 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 — 150 lines — stays where its author put it; the contents beside it link to each section on GitHub.
NCCL with TornadoVM
tornado-nccl runs NCCL operations as library tasks on TornadoVM device buffers, so a multi-GPU
step (kernel → collective → kernel) stays on the GPUs. Read tornado-nccl/ARCHITECTURE.md for the
design and full API, and tornado-nccl/README.md for a short tour. This skill is the working recipe.
The model in four rules
- One rank = one
TornadoExecutionPlanon one GPU. Build one task graph per local GPU (same code, rank-specific data), each planwithDevice(gpu r). - The collective is a
libraryTaskin every rank's graph, in the same order on every rank:.libraryTask("sum", Nccl::allReduceInPlace, comm, grads, NcclRedOp.SUM). - Run the ranks together with
NcclPlanGroup. Never callplan.execute()rank by rank on one thread: the first collective waits for the others forever. - Close in reverse order: group → plans → communicator. Closing the communicator before plans
that captured CUDA graphs hangs in
ncclCommDestroy.
Template (follow the user's kernel rules)
Kernels use KernelContext only, never @Parallel. Each kernel bounds-checks explicitly, and every
kernel task gets a WorkerGrid with an explicit local size in a GridScheduler.
public static void scale(KernelContext ctx, FloatArray a, float f) {
int id = ctx.globalIdx;
if (id < a.getSize()) {
a.set(id, a.get(id) * f);
}
}
TornadoDevice[] gpus = { TornadoExecutionPlan.getDevice(0, 0), TornadoExecutionPlan.getDevice(0, 1) };
TornadoExecutionPlan[] plans = new TornadoExecutionPlan[gpus.length];
try (NcclCommunicator comm = NcclCommunicator.create(gpus)) {
try {
for (int r = 0; r < gpus.length; r++) {
TaskGraph g = new TaskGraph("rank" + r)
.transferToDevice(DataTransferMode.FIRST_EXECUTION, data[r])
.task("pre", Kernels::scale, new KernelContext(), data[r], 2.0f)
.libraryTask("sum", Nccl::allReduceInPlace, comm, data[r], NcclRedOp.SUM)
.task("post", Kernels::scale, new KernelContext(), data[r], 0.5f)
.transferToHost(DataTransferMode.EVERY_EXECUTION, data[r]);
WorkerGrid w = new WorkerGrid1D(n);
w.setLocalWork(256, 1, 1);
GridScheduler s = new GridScheduler();
s.addWorkerGrid("rank" + r + ".pre", w); // one entry per kernel task: count them
s.addWorkerGrid("rank" + r + ".post", w);
plans[r] = new TornadoExecutionPlan(g.snapshot()).withDevice(gpus[r]).withGridScheduler(s);
}
try (NcclPlanGroup ranks = new NcclPlanGroup(plans).withStepTimeout(Duration.ofSeconds(30))) {
for (int step = 0; step < steps; step++) {
ranks.execute();
}
}
} finally {
for (TornadoExecutionPlan p : plans) { if (p != null) p.close(); } // plans before comm
}
}
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.
- 14d ago First seen · 150 lines · 144 tokens per session scan A 070c666a2602
tornadovm-nccl is a skill published in the GitHub repository beehive-lab/TornadoVM (1,551 stars, last pushed today), licensed Apache-2.0. It adds 144 tokens to every session and 2,315 once invoked, about $0.0006 per session on Opus 5.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-10-15.
Other skills, from other repositories
sglang-diffusion-cache-dit
Workflow for upgrading/integrating cache-dit in SGLang diffusion (multimodalgen): DBCache, DMD calibrator, TaylorSeer, SVDQuant DQ; porting upstream PRs and resolving conflicts against the per-request knob system; adding new cache knobs; building the sglang generate CLI test matrix; precision validation (PSNR / log…
cuopt-developer
Modify, build, test, debug, and contribute to NVIDIA cuOpt (C++/CUDA, Python, server, CI). Use for solver internals, PRs, DCO, and code conventions.
cuopt-user-rules
Base rules for end users calling NVIDIA cuOpt (routing/LP/MILP/QP/install/server). Not for cuOpt internals — use cuopt-developer for those.
neqsim-api-patterns
NeqSim Java/Python API patterns for fluids, flashes, process equipment and units. USE WHEN: selecting EOS/mixing-rule selection and property retrieval, including viscosity, thermal conductivity, binary/effective diffusion, gas-oil-water interfacial tension and black-oil PVT table conversion. Follow linked references…
neqsim-production-system-modeling
Build NeqSim models from natural language in Python or Java: reservoir, production/injection wells, SURF templates/manifolds/PLEMs, multiphase flowlines and risers, facilities, utilities and downstream processing. USE WHEN: building reservoir-to-products models, coupled deliverability/capacity and equivalent language…
pytorch-profile-analysis
Analyze single-file PyTorch/Kineto Chrome trace .json(.gz) files using the VeloQ CLI. Use for CPU/CUDA/kernel correlation, ProfilerStep/annotation slicing, memory/shape grouping, and single-trace NCCL evidence.