nvidia/warp-eval
> Evaluate whether an existing hot path is a credible NVIDIA Warp candidate. Use for irregular or spatial queries, particle or geometry simulation, branch-heavy loops, many small launches, host fallbacks, or large intermediates. CPU-only code and absent GPU dependencies are normal unless NVIDIA is prohibited. Exclude required cross-vendor or CPU-only deployment, vendor-lowered dense or NN layers, general Warp API questions, and already-selected Warp kernels. Contribution policy alone is not exclusion.
npx skills add https://github.com/NVIDIA/warp --skill warp-eval
Collect reproducible evidence about how a narrow seam in an existing
codebase would behave in NVIDIA Warp. Report facts; the user decides.
Name Warp as the option under evaluation in the first line, state that no
adoption recommendation will follow, and do not treat the triggering performance
request as authorization to experiment.
Measured evaluations produce warp-evaluation-report/: the report, one
independently applicable diff per solution, the drivers, and raw results. Never
modify production code. Exits before measured work create no directory.
These override any local reasoning.
Count maintainability, ergonomics, packaging, extensibility, autodiff or new
functionality only when the user names it; otherwise report them as
constraints or costs, not benefits.
abort that comparison until an independent oracle or clarified contract
exists. Report the defect without prescribing a response.
memory comes from profiler or allocator evidence, not source a compiler may
fuse.
condition in its definition is established. Gate D requires a maintained
implementation confirmed to execute with CUDA on an NVIDIA GPU; a fast native
CPU library is a baseline, not Gate D.
import/init/JIT in the real process regime, transfers, launches, Python
launch loops, structure build/refit, allocation, conversion, validation,
compaction and synchronization. Report each cost and the end-to-end
difference.
ask before profiling, environment changes, prototyping, benchmarking or GPU
use.
continue through the strongest in-project baseline, minimum Warp prototype
and end-to-end comparison. If Warp is out of scope, stop before profiling.
10. Never infer environment intent. NVIDIA deployment and ownership of an
optional compiled dependency are product decisions. Abort only on a stated
constraint; otherwise ask once and stop (AWAITING INTENT).
11. Warp measurements are CUDA-only and synchronized. Resolve an explicit
NVIDIA CUDA device; discard CPU resolution and dispatch-only timing.
12. Never recommend or rank adoption options. Report facts, measurements,
hypotheses and unknowns per seam and regime.
13. Stop at the report. No rollout or production edits.
Static screening requires the target repository and its stated product
constraints. Measured work additionally requires explicit authorization, an
NVIDIA CUDA GPU, target-project dependencies and a representative workload.
"Run it on the CPU instead" is not a performance fallback.
public API. Absolute error grows with coordinate magnitude.
newest feature line is maintained, deprecations run roughly four monthly
releases.
latest docs track development, not the shipped release. Pin to thetarget project's own Warp version; if it has none, use the current stable and
say which.
hasattr(wp, "mesh_query_point") is False on a release that has it. Probe
the stub file or that version's docs before concluding a builtin is absent.
enable_backward=False (kernel, module or global) removes adjointcodegen. If nothing differentiates through the seam, set it before measuring
compile cost.
| State | Reached when | Report directory |
|---|---|---|
| ABORT | Any gate establishes that the evaluated seam cannot satisfy the stated scope | No if nothing was measured; otherwise preserve the evidence already collected |
| AWAITING INTENT | The environment gates turn on a fact only the user has | No — one question, both branches concrete |
| AWAITING AUTHORIZATION | A candidate pattern survives stage 1 | No — early findings plus scope/resource preview |
| INCOMPLETE | Authorized work cannot obtain representative evidence required for the scoped evaluation | Yes — preserve collected evidence and name the one missing artifact |
| Report delivered | Authorized work produced measurements, or stopped after the report directory existed | Yes — facts per seam and regime, with missing evidence explicit |
Use this exact shape for an early exit:
ABORT — Gate <letter>: <cited fact>; <why the scoped Warp evaluation cannot proceed>.
Do not name a preferred alternative.
Reporting rules:
references/evidence-and-reporting.md.
A delivered directory follows the template's fixed order: schema and provenance,
authorization and evaluation state, stage census, one B<n> evidence section
per seam/regime, caveats, then environment/reproduction. solutions/,
benchmarks/ and results/ contain every linked artifact.
Gate exit: `ABORT — Gate A: deployment.md requires one implementation with
AMD, Apple and NVIDIA parity; a Warp-specific path cannot satisfy this scope.`
Surviving candidate: Name the seam and pattern, label inferred facts as
assumptions, state that no gate has fired, preview the profile/baseline/Warp
prototype/benchmark scope and its cost, then ask the separate intent and
authorization questions from
references/authorization-checkpoint.md.
Required: the target repository and a performance, memory or scale problem
with a candidate seam. Optional: explicit deployment/packaging constraints,
existing profiles or logs, representative datasets and acceptance criteria.
Prompt constraints take precedence over repository policy/configuration, then
existing logs. User corrections override inference. Never substitute an
assumption for a stated fact or measurement.
| Script | Purpose | Arguments |
|---|---|---|
| scripts/driver-template.py | Copy once per bottleneck; define workloads and variants | Edit placeholders, then run the copied driver |
| scripts/measure.py | Import from drivers for synchronized timing, memory and isolated cases | Python API; do not execute directly |
| scripts/validate_report_schema.py | Validate the delivered report and evidence links | <report-directory> |
Use run_script("scripts/validate_report_schema.py", args=["warp-evaluation-report"])
when supported; otherwise invoke the script with Python and the report directory.
INCOMPLETE and name the missingartifact; do not invent data or fire Gate F.
correctness or timing claims.
the schema error.
Every stage before the last can end the evaluation. Stop as soon as a gate
fires; do not gather evidence that cannot change the scoped facts.
references/target-patterns.md.
gradients and packaging from the repository. Infer before asking.
hardware, counts, sizes and tolerances are assumptions, never measurements.
Every inference remains open to correction and cannot satisfy a gate that
requires a stated fact or measurement.
evidence already exists; otherwise carry it into stage 2. Every gate uses only
the exact boundaries in
references/rejection-gates.md.
| Gate | Fires when |
|---|---|
| A | Production is *stated* CPU-only or to need non-NVIDIA portability, with no acceptable optional CUDA path |
| B | Data must cross the host/device boundary per small or infrequent call and the boundary cannot be widened |
| C | The region is dense tensor algebra already mapped to a tuned framework or vendor library |
| D | A mature CUDA implementation already meets the contract, and no non-performance objective was requested |
| E | A stated policy blocks Warp's dependency, compilation, cache or fallback obligations |
| F | Representative evidence proves the region too small a share of its requested metric for any backend to move it |
exists — a supplied profile, structural bound, or arithmetic on figures the
user quoted. If that evidence does not exist, Gate F remains open until stage
2 profiling; inferred values never fire it.
accelerator, no Warp dependency, or a small dependency list proves nothing.
path is acceptable: named extra, soft import, existing fallback, default
install unchanged. Every affirmative answer must say explicitly that Warp will
be prototyped and benchmarked; conditions constrain only that Warp scope. A
negative or undecided answer means ABORT.
matched. No pattern means no profiling.
authorization checkpoint — early
findings, exact scope, stages, resource cost — then stop. Stage 2 requires
both settled intent and explicit authorization.
Requires explicit authorization and a settled intent question.
backend. Report which entry points were profiled and which a gate screened.
fallback is an execution regime of that public seam, not a different
operation, and a cheaper sibling method cannot screen out the named method.
near-zero device allocation between host and device inputs exposes a host
fallback.
boundary. Do not subtract per-op timings.
ABORT the affected scope under Gate F, preserve the evidence already
collected, and stop. The existing authorization already covered this
materiality check; do not ask for authorization again.
runnable entry point or production distribution — record the single missing
artifact, mark the affected scope INCOMPLETE, and stop. This is missing
evidence, not Gate F and not ABORT. An invented workload cannot prove
materiality.
Protocol: references/benchmark-protocol.md.
Record per candidate: source, bottleneck evidence, objective, narrow seam,
mechanism Warp could change, strongest incumbent, risks, acceptance threshold,
cheapest falsifying experiment. Screen against
references/target-patterns.md; if none
survives, write the report and stop.
Define values, dtypes, shapes, devices, errors, mutation, ordering, ties,
capacity/overflow, topology/degeneracy, tolerances, required gradients, streams,
ownership, aliasing, invalidation, concurrency, capture, teardown and fallback.
mismatch.
ABORT before prototyping if the proposed seam cannot satisfy a requiredcontract.
production range controlling cost, tuning knobs, incumbent run-to-run spread,
and the oracle applied to every implementation.
Hazards and adversarial checks:
references/semantic-contract.md.
Algorithm before backend: (1) a better or output-sensitive algorithm;
(2) chunking, tiling, sparse output, layout, rematerialization; (3) the
incumbent framework's compiler and native primitives; (4) **what the project
already depends on** — its own accelerator backend, a parallel idiom it ships
but leaves off, or a capability an existing dependency exposes and nobody wired
up; (5) only then narrow Warp.
through current dependencies, and Warp. Do not add unrelated libraries.
calling a route absent.
incorrect or asymptotically inferior baseline does not establish a backend
comparison.
Close every in-project route before prototyping Warp:
| State | What it takes to claim it |
|---|---|
| measured | timed through the same boundary as the baseline |
| absent | a cited declaration, symbol table or missing flag proves it is unavailable |
| waived | you asked the user and they chose to skip it; record their words |
A capability present but unbound is reachable, not absent. If exposing it costs
no more than the planned Warp seam, measure it first. Ladder details:
references/baselines.md.
Waived routes do not block stage 6; every route not explicitly waived must be
measured or evidenced absent before the Warp prototype begins.
default. Prototype only enough to test the hypothesis.
resolves it as CUDA before correctness or performance work. Never exercise or
report Warp's CPU backend.
build/refit/query costs that amortize together are one unit.
patch against the pinned baseline, and prove it applies cleanly and reproduces
the measured result.
and deliberately break a branch to prove the tests fail. Any failed required
check returns ABORT for the affected scope.
representative, consider the stronger formulations in
references/target-patterns.md. One naive
kernel does not bound Warp's potential.
bottleneck and measure through scripts/measure.py. Do
not hand-roll timing or memory.
selected device immediately before starting and after enqueueing every timed
region, before stopping its wall timer.
realistic sizes, and cold/warm process regimes.
not measured.
null_test, and one-time costs both separately and amortized.Serialize GPU measurements under an exclusive device lock. Below 1.5× is no
measured difference.
ABORT for a seam and regime whose predeclared end-to-end performance ormemory requirement fails, after preserving the measurements.
Full protocol:
references/benchmark-protocol.md.
measurements, workload provenance, time, memory, lifecycle, portability and
ownership facts.
pass, fail, not measured, not available, no representative data,unknown or n/a only where a stated criterion makes that status objective.
Missing evidence remains missing.
complete only when every evaluated seam and regime includesan end-to-end Warp measurement. Use aborted — <gate and scope> when a gate
fired, or incomplete — <missing evidence and scope> when representative
evidence was unavailable. Preserve everything collected. Never deliver an
incumbent-only report as a completed warp-eval.
and a one-line reason, including the screened-out stages.
the study's headline objective.
assets/warp-evaluation-report-template.md
unchanged in schema. Record authorization and scope.
absolute time and peak memory, ratios, contract status, evidence gaps.
Working artifacts belong in results/.
uv run python scripts/validate_report_schema.py <report-directory>
again before delivery. Fix every error.
drivers run. Then stop.
Take nvidia/warp-eval from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.