Generated banner for Warp Eval
Generated logo for Warp Eval

Warp Eval

NVIDIAOfficialCreated by NVIDIA Corporation

  • Skill
  • Workflow
  • Software development
  • Apache-2.0
  • Medium risk
  • Has scripts

From the author

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.
— the description by NVIDIA Corporation

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The warp-eval skill provides a structured, evidence-based methodology to determine if specific hot paths in an existing codebase are viable candidates for NVIDIA Warp. It emphasizes objective reporting over recommendations, requiring users to define clear performance metrics and semantic contracts before any prototyping occurs. The process includes static screening, rigorous baseline comparisons, and authorized benchmarking, ensuring that Warp is only considered after in-project alternatives have been exhausted. The skill enforces strict gates to abort evaluations that do not meet technical or policy requirements, ensuring that only credible candidates proceed to measurement.

What it does

  • Screens code bottlenecks against specific technical gates to determine Warp suitability.
  • Requires the establishment of a semantic contract and performance baseline before prototyping.
  • Enforces a ladder of in-project optimizations to be exhausted before introducing Warp.
  • Produces a standardized evaluation report containing measurements, evidence, and caveats.
  • Ensures all performance claims are backed by synchronized, end-to-end measurements.
  • Provides scripts for synchronized timing, memory profiling, and report validation.

When to use it

  • When investigating performance bottlenecks involving irregular queries, simulations, or branch-heavy loops.
  • When you need to objectively assess if Warp provides a measurable benefit over existing in-project baselines.
  • When you require a reproducible, audit-ready report on potential GPU acceleration candidates.
  • When you need to determine if a performance issue is material enough to warrant a new dependency.

Advantages

  • Prevents premature optimization by requiring algorithmic improvements first.
  • Provides a clear, objective framework to stop evaluations that are not technically viable.
  • Ensures performance measurements include realistic overheads like JIT, transfers, and synchronization.
  • Maintains production code integrity by working in isolated, independent patches.
  • Standardizes the reporting of facts, hypotheses, and unknowns.

Usage examples

“Evaluate if the particle simulation loop in my project is a good candidate for Warp.”
The agent will identify the candidate seam, derive the contract, check initial gates, and provide a resource preview before asking for authorization to proceed with profiling.
“I have a performance bottleneck in my geometry processing code; can you run a warp-eval?”
The agent will initiate the screening process, request the target repository, and begin identifying candidate patterns to determine if a formal evaluation is warranted.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/nvidia/warp-eval/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip warp-eval.zip -d .agents/skills

Documentation by NVIDIA Corporation

Warp evaluation

Purpose

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.

Hard rules

These override any local reasoning.

  1. Default objectives are latency, throughput, and peak or retained memory. Count maintainability, ergonomics, packaging, extensibility, autodiff or new functionality only when the user names it; otherwise report them as constraints or costs, not benefits.

  2. Correctness is a gate. If the incumbent is buggy or its contract unclear, abort that comparison until an independent oracle or clarified contract exists. Report the defect without prescribing a response.

  3. Never predict savings from source shape or another workload. Materialized memory comes from profiler or allocator evidence, not source a compiler may fuse.

  4. "It can be written in Warp" is a hypothesis, never a proven opportunity.

  5. Gates are exact, never adjacent or analogous. Fire a gate only when every 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.

  6. Label every claim as observed fact, measurement, hypothesis or unknown.

  7. Time the user-visible stage, not the kernel. Include Warp's cold 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.

  8. No measured work without explicit authorization. After stage 1, stop and ask before profiling, environment changes, prototyping, benchmarking or GPU use.

  9. Authorized measured work includes Warp. If profiling exposes no gate, 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.

Requirements

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.

Limitations

  • Warp CPU kernels are serial and outside this skill's evaluation scope. "Run it on the CPU instead" is not a performance fallback.

  • Mesh and geometry queries compute in float32/int32 even behind a float64 public API. Absolute error grows with coordinate magnitude.

  • Warp does not follow semver. Feature releases can break APIs, only the newest feature line is maintained, deprecations run roughly four monthly releases.

  • latest docs track development, not the shipped release. Pin to the target project's own Warp version; if it has none, use the current stable and say which.

  • Kernel-only builtins are not resolvable from Python — 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 adjoint codegen. If nothing differentiates through the seam, set it before measuring compile cost.

Output Format

StateReached whenReport directory
ABORTAny gate establishes that the evaluated seam cannot satisfy the stated scopeNo if nothing was measured; otherwise preserve the evidence already collected
AWAITING INTENTThe environment gates turn on a fact only the user hasNo — one question, both branches concrete
AWAITING AUTHORIZATIONA candidate pattern survives stage 1No — early findings plus scope/resource preview
INCOMPLETEAuthorized work cannot obtain representative evidence required for the scoped evaluationYes — preserve collected evidence and name the one missing artifact
Report deliveredAuthorized work produced measurements, or stopped after the report directory existedYes — 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.

Examples

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.

Inputs

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.

Available scripts

ScriptPurposeArguments
scripts/driver-template.pyCopy once per bottleneck; define workloads and variantsEdit placeholders, then run the copied driver
scripts/measure.pyImport from drivers for synchronized timing, memory and isolated casesPython API; do not execute directly
scripts/validate_report_schema.pyValidate 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.

Troubleshooting

  • No representative workload: mark the scope INCOMPLETE and name the missing artifact; do not invent data or fire Gate F.

  • Warp resolves to CPU or no CUDA device: discard the run and stop before correctness or timing claims.

  • Report validation fails: fix the report or referenced artifact; never waive the schema error.

Instructions

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.

1. Read the code, derive the contract, check the gates
  • Identify a candidate and its metric with references/target-patterns.md.

  • Derive devices/residency, dtypes/shapes, sizes, frequency, process lifetime, gradients and packaging from the repository. Infer before asking.

  • State the inferred contract in one line and invite correction. Unknown 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.

  • Check Gates A–E before profiling. Check Gate F now only if representative evidence already exists; otherwise carry it into stage 2. Every gate uses only the exact boundaries in references/rejection-gates.md.

GateFires when
AProduction is stated CPU-only or to need non-NVIDIA portability, with no acceptable optional CUDA path
BData must cross the host/device boundary per small or infrequent call and the boundary cannot be widened
CThe region is dense tensor algebra already mapped to a tuned framework or vendor library
DA mature CUDA implementation already meets the contract, and no non-performance objective was requested
EA stated policy blocks Warp's dependency, compilation, cache or fallback obligations
FRepresentative evidence proves the region too small a share of its requested metric for any backend to move it
  • Gate F can fire in stage 1 only from representative evidence that already 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.

  • Gates A and E need a stated constraint. A CPU implementation, another accelerator, no Warp dependency, or a small dependency list proves nothing.

  • When A/E are unresolved and a pattern survives, ask whether an optional NVIDIA 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.

  • Do not ask when another gate fired, the repository answers, or no pattern matched. No pattern means no profiling.

  • If a candidate survives, combine any intent question with the authorization checkpoint — early findings, exact scope, stages, resource cost — then stop. Stage 2 requires both settled intent and explicit authorization.

2. Profile the real application

Requires explicit authorization and a settled intent question.

  • Profile with the project's own profiler and representative entry points.

  • Measure synchronized end-to-end stage time and peak memory before choosing a backend. Report which entry points were profiled and which a gate screened.

  • Prioritize further measurement by observed cost, not source appearance.

  • Name each measurement by the public method and variant actually invoked. A fallback is an execution regime of that public seam, not a different operation, and a cheaper sibling method cannot screen out the named method.

  • Confirm the timed branch ran on the intended device. Unchanged cost and near-zero device allocation between host and device inputs exposes a host fallback.

  • Measure the stage's free-stage ceiling and stubbed floor through the public boundary. Do not subtract per-op timings.

  • If the measured ceiling proves the candidate cannot move its own metric, 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.

  • If representative coverage is unavailable — no representative dataset, 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.

3. Form falsifiable hypotheses

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.

4. Write the contract before the prototype

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.

  • Fix tolerances before seeing Warp output. Never weaken a contract after a mismatch.

  • ABORT before prototyping if the proposed seam cannot satisfy a required contract.

  • Pre-register, before timing: workload provenance, the state variable and 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.

5. Improve the baseline first

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.

  • Compare only in-scope options: the improved incumbent, capabilities reachable through current dependencies, and Warp. Do not add unrelated libraries.

  • Search declared dependencies for dormant backends, flags and bindings before calling a route absent.

  • Keep the improved incumbent as the oracle. A result against an untuned, incorrect or asymptotically inferior baseline does not establish a backend comparison.

Close every in-project route before prototyping Warp:

StateWhat it takes to claim it
measuredtimed through the same boundary as the baseline
absenta cited declaration, symbol table or missing flag proves it is unavailable
waivedyou 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.

6. Prototype the minimum unit
  • Work in a separate copy, production unchanged, integration seam off by default. Prototype only enough to test the hypothesis.

  • Select an explicit CUDA device for every Warp prototype and verify that Warp resolves it as CUDA before correctness or performance work. Never exercise or report Warp's CPU backend.

  • Size the unit by shared data and structure lifetime, not function boundaries: build/refit/query costs that amortize together are one unit.

  • Name variants before timing. Preserve each solution as an independent patch against the pinned baseline, and prove it applies cleanly and reproduces the measured result.

  • Surface unsupported cases and overflow before timing.

  • Run the adversarial contract checks, audit correctness at production scale, and deliberately break a branch to prove the tests fail. Any failed required check returns ABORT for the affected scope.

  • Before treating a disappointing compute-bound or reuse-heavy result as representative, consider the stronger formulations in references/target-patterns.md. One naive kernel does not bound Warp's potential.

7. Benchmark the whole boundary
  • Copy scripts/driver-template.py once per bottleneck and measure through scripts/measure.py. Do not hand-roll timing or memory.

  • Warp launches are asynchronous. The measurement helper must synchronize the selected device immediately before starting and after enqueueing every timed region, before stopping its wall timer.

  • Include every rule-7 cost, the public call, the immediate downstream stage, realistic sizes, and cold/warm process regimes.

  • Transcribe every report cell from emitted JSON; absent records read not measured.

  • Report 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 or memory requirement fails, after preserving the measurements.

Full protocol: references/benchmark-protocol.md.

8. Summarize the evidence
  • Per seam and execution regime, report semantic results, strongest-baseline measurements, workload provenance, time, memory, lifecycle, portability and ownership facts.

  • Use 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.

  • Mark the report complete only when every evaluated seam and regime includes an 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.

  • Give every stage worth ≥10 % of the measured total a census row with a status and a one-line reason, including the screened-out stages.

  • Check each gate against the metric that candidate's pattern exhausts, not the study's headline objective.

9. Hand back
  • Use assets/warp-evaluation-report-template.md unchanged in schema. Record authorization and scope.

  • One table per bottleneck: baseline, current-dependency solutions, then Warp; absolute time and peak memory, ratios, contract status, evidence gaps.

  • Include prose only where it explains the measurements or their bounds. Working artifacts belong in results/.

uv run python scripts/validate_report_schema.py <report-directory>
  • Run the validator once the first measurement establishes a census/table, and again before delivery. Fix every error.

  • Verify builds and imports from artifacts, not exit status. Ship the exact drivers run. Then stop.

Files

references/target-patterns.md

Target patterns

Workload patterns potentially relevant to Warp, the evidence each requires, and the ones that fire an early gate. A pattern match tells you what to measure and what usually disqualifies it — it is never itself evidence that this codebase will benefit. Workload class is more informative than source framework, so classify before choosing an API.

Workload classes

Class 1 — low-dimensional spatial neighborhood construction

Signals: 2D/3D coordinates already resident on an NVIDIA GPU; the current path scans all points, materializes dense candidates, or holds a large static cell-capacity tensor; output is naturally sparse and boundable by a documented capacity; construction repeats so a grid can be reused or refitted; per-query work is irregular enough that cell-local traversal skips most pairs.

Anti-signals: high-dimensional KNN, exact nearest-K ordering, or distances are the real contract; small sets, CPU-origin data, or a one-shot call; triclinic/multi-image periodicity, dynamic masks, fractional coordinates, float64 or dense output required; a mature indexed CUDA baseline already supplies the exact contract.

Seam: an opt-in backend object with explicit dimension, cutoff, capacity, box and output format. Return padded indices plus actual count and an overflow flag; make compaction a separate convenience path, since it can synchronize and create dynamic shapes.

Decided by whether output capacity can be bounded and overflow surfaced, and whether a mature indexed CUDA library already supplies the exact contract.

Class 2 — persistent BVH point/mesh queries

Signals: many points query one static mesh, or a mesh deforms with fixed topology and supports refit; the current path scans every face, transfers through the CPU, or rebuilds a CPU tree per call; the result can be reconstructed from a BVH-selected candidate face.

Anti-signals: very small warm query batches; one-shot cold execution; rebuild-per-query; highly overlapping triangle AABBs or many degenerate faces forcing a fallback scan; exact brute-force tie-breaking, rich distance types, float64, all-hits or containment semantics are contractual; a mature persistent implementation is already faster.

Seam: a caller-owned query/cache object with separate build, refit, rebuild and query, stating which mutations trigger which. Limit the first API to the proven subset.

Decided by query count per build, and whether tie-breaking and distance-type semantics are contractual.

Class 3 — branchy graph and label algorithms

Signals: the current tensor formulation runs a fixed number of global propagation passes, masks divergent work, or launches many full-domain ops; the algorithm is naturally block-local with union/find, a sparse frontier, compaction or early termination; outputs are discrete and no gradient is needed; batch parallelism can offset per-item contention.

Anti-signals: a mature CUDA library is already faster for the target density/batch distribution; dense single-item contention dominates; legacy dtype, autograd, connectivity or label-order semantics are required.

Seam: a separate opt-in function with explicit connectivity, compactness, output dtype and a documented non-differentiable contract. Leave the existing function untouched.

Decided by contention at high density, and whether a mature CUDA library is faster for the target density and batch mix.

Class 4 — fused per-element loops that remove batch×domain intermediates

Signals: the tensor path expands a domain across cameras, samples, stencil directions, graph edges or another batch axis; intermediate storage far exceeds final state; each output element can loop locally keeping state in registers and writing once; update order is fixed and reproducible in one kernel.

Message passing and graph convolution belong here when the framework path materializes a per-edge intermediate that a fused gather-transform-accumulate kernel would keep in registers. The value is the removed [edges, features] tensor, not the traversal — traversal alone is what scatter/segment reductions and maintained GNN libraries already do well.

Anti-signals: the batch loop is enormous or highly divergent; the framework's compiler, Triton or Pallas fuses it correctly with less custom code; exact sampler rounding/padding, gradients or topology cannot be reproduced; a one-shot tool cannot amortize cold compile and the memory saving is not operationally important.

Decided by whether the framework compiler already fuses it, and whether the memory saving is operationally material.

Class 5 — regular dense-grid stencil and geometry

Regular stencils, dense arrays and static control flow are core framework strengths, so the framework implementation is the required baseline. Evaluate Warp only after profiling shows fusion or memory planning genuinely fails and chunking, tiling, rematerialization, scan/fori_loop, Pallas, Triton or torch.compile cannot bound memory while preserving the ecosystem.

Decided by whether chunking or tiling in the incumbent framework already bounds memory.

Class 5b — compute-bound regular work with high data reuse

Signals: many independent evaluations of the same arithmetic over overlapping data — a patch/window/neighborhood per output, a per-block reduction, scan, sort or small matmul — with no acceleration structure, no irregular traversal, and a working set that fits a tile. Often transcendental- or FMA-heavy and already on a CPU JIT.

Anti-signals: a plain elementwise or dense linear-algebra call a vendor library already owns — that is gate C, not this class.

Decided by the achievable read amplification, not the flop count. The naive formulation — one thread per output, each re-reading its own neighborhood — reads every input (window) times and is memory bound by construction on any hardware. Assess this class only once a cooperative formulation has been considered; see Formulations to consider below. Expect a hand-written CUDA or CuPy kernel to be competitive here, and measure one.

Do not file it under Class 4. There may be no intermediate to remove and no memory saving at all; the value here is arithmetic throughput and load reuse, so Class 4's metric sends you to the wrong evidence.

Class 6 — framework FFI with stateful data structures

Signals: a persistent mutable structure gives a measured benefit unavailable from pure framework code; inputs/outputs can have static shapes with bounded dynamic content; the operation can be serialized inside one executable and is not differentiated through its mutable state.

Anti-signals: independent threads or executables must share one builder; automatic sharding, multi-host, TPU/AMD, vmap over hidden state or higher-order transforms are central; small complete workloads already fuse well.

Decided by ownership, not throughput: concurrency, pointer-keyed graph capture, teardown. This class carries the highest lifecycle risk — hidden mutable state and unsafe concurrent use routinely hold a candidate at unknown for production even when measured throughput differences are large. Report ownership evidence before quoting throughput.

Class 7 — existing mature CUDA APIs with richer semantics

Continue the evaluation only if Warp supplies a genuinely missing capability, or a narrow measurable sub-operation while the mature API stays intact and authoritative. If exact IDs, types, degeneracy handling or gradients are user-visible and cannot be reproduced, abort at the first reproducible contract failure.

Decided by whether exact IDs, types, degeneracy handling and gradients can be reproduced.

Class 8 — many independent small problems, none filling the GPU

Signals: N independent systems — candidates, molecules, scenes, episodes — each too small to occupy the device alone, currently orchestrated serially from Python, with per-system state that could stay resident.

The signal alone is not enough. Padding into a batch axis and running ordinary tensor ops is the required baseline for uniform systems. Warp is relevant only when the per-system work is ragged or independently terminating — different sizes, different neighbor counts, per-system convergence — so a padded formulation wastes most of its lanes or needs masking that consumes the gain.

Anti-signals: systems uniform enough to pad cheaply; vmap or a batched library call already expresses it; per-system work is dense tensor algebra; the system count is small enough that occupancy was never the problem.

Seam: a batched entry point taking packed per-system state plus offsets, returning per-system results and status. Keep the single-system path as the oracle. Batching changes the workload and the backend at once, so report the single-system comparison separately from the batched one.

Decided by whether per-system work is ragged enough to defeat a padded batched formulation.

Class 9 — iterative loops that cross the host boundary every step

Signals: a solver, optimizer, relaxation or integrator running hundreds to thousands of steps, each launching from Python, synchronizing, or moving state across the host boundary, with per-step kernel time small relative to that overhead.

CUDA graph capture removes per-step launch and host overhead without changing language, and torch.compile's reduce-overhead mode does it automatically, so measure that baseline first. Warp is relevant when the loop body cannot be captured as a fixed program — per-item convergence tests, structures rebuilt mid-loop, topology changing between steps, early termination a static graph cannot express — and when fusing the update and the convergence check into one kernel removes the intermediates along with the round trip.

Anti-signals: the step body is a fixed sequence of tensor ops; a captured graph already recovers most of the overhead; the loop runs few enough times that setup dominates; gradients are required through the whole trajectory.

Seam: a resident state object plus a step/run_until entry point, with the host loop retained as the reference. State ownership and what invalidates resident state are part of the contract.

Decided by whether CUDA graph capture already recovers the overhead without a port.

Two expectations that cut across every class

  • Persistence is usually the product. The valuable abstraction is normally a cached grid, mesh BVH, fixed output buffer or captured graph with an explicit lifetime, not a stateless replacement function. Build, refit, rebuild and query are separate operations with separate costs, and refit is often what makes a deforming-geometry case viable.

  • Report memory independently from time. Removing a large intermediate changes which problem sizes are reachable at all. Account for retained structures, outputs, graph pools and framework allocators.

Patterns that fire an early gate

Recognize these early and abort; they need no prototype. Apply the exact boundaries from the stage-1 gate reference named by SKILL.md.

  • dense linear algebra, convolution, FFT, reductions and neural-network layers already lowered onto vendor libraries or a framework compiler (gate C);

  • data that starts and ends on the CPU where the boundary cannot be widened; small or infrequent calls where cold start and launch overhead dominate; one-shot processes that cannot amortize import, init and JIT (gate B);

  • a mature CUDA implementation that already meets the contract, where a port duplicates maintained code without an algorithmic advantage (gate D);

  • a hot path profiling shows is too small a share of the objective (gate F);

  • anything requiring float64 throughout, exact tie ordering, or portability to non-NVIDIA accelerators — requiring in the sense that the product promises it. A second target that merely exists is a cost to price in; a target the repository never commits to either way is a question to ask (gate A).

Common false positives

  • Replacing tuned dense algebra with a naive per-thread kernel.

  • Timing one GPU kernel against a Python loop while ignoring the vectorized or library baseline.

  • Crediting the candidate with overhead that belongs to the incumbent's wrapper rather than its kernel. Per-call dispatch, argument marshalling and array re-wrapping are flat in problem size, so they dominate small calls and can manufacture an apparent speedup that evaporates once the incumbent hoists them. Hoist first, re-measure, then attribute what is left component by component.

  • Timing a stage that never ran on the device: identical host and device timings with no device allocation mean the "GPU path" converted to host arrays or silently downgraded the request.

  • Timing launch enqueue instead of completion.

  • Excluding compilation from a product where every process compiles.

  • Calling a conversion "free" because it aliases storage, while ignoring descriptor construction and stream waits.

  • Excluding output allocation because the microbenchmark reuses a buffer production cannot reuse.

  • Excluding a BVH/hash-grid build or refit that every real input requires.

  • Comparing forward-only Warp against a baseline that includes backward.

  • Comparing different precision, fast-math or determinism settings.

  • Claiming a universal benefit from one GPU, one shape, or one friendly distribution.

Common false negatives

Rejections are harder to notice than false positives, because nothing downstream contradicts them:

  • Screening a candidate against the study's headline metric instead of the one its pattern exhausts. A memory/capacity candidate screened on a latency share is the standard case (gate F).

  • Generalizing a screen from one device's budget. A transient immaterial on a large card can be decisive on the card the users actually have. State the memory budget the materiality calculation used.

  • Measuring only the configuration you happened to run. Library defaults, CLI defaults and documented examples often differ, and a stage trivial at one default can dominate at another. Check the defaults on every reachable entry point.

  • Rejecting on a share of a total your own environment inflated. If a missing optional accelerator makes some other stage artificially slow, every share computed against that total understates the rest. Say which direction it biases the measurement.

  • Treating "too small to matter" as settled without the arithmetic. Gate F requires a ceiling you can state.

  • Accepting a disappointing measurement without auditing the harness. When a measurement contradicts a strong structural prior — a linear scan beating an indexed traversal, a fused kernel losing to a materialized intermediate — audit the workload pairing, the candidate's unset defaults, and which branch actually executed before recording the result. A disappointing result requires the same scrutiny as a favorable one.

  • Screening a seam on the aggregate when the product has more than one execution regime. A seam that is unreachable noise behind a slow import in a one-shot command can dominate an iteration of a long-lived loop in the same product. Report per regime.

  • Generalizing from the first formulation measured. See below.

Formulations to consider

A one-thread-per-output kernel that re-reads its whole neighborhood inherits that read amplification on any hardware, so its result describes that prototype rather than Warp generally. Before interpreting a compute-bound or reuse-heavy seam, state which formulation you measured and which you considered:

  • tile / cooperative primitives (wp.tile_load, wp.tile_matmul, wp.tile_reduce, wp.tile_scan_*, wp.tile_sort, and the tiled BVH/mesh queries) where a block can load a tile plus its halo once and reuse it, or where the seam is a per-block reduction, scan, sort or small matmul;

  • fusing adjacent kernels so an intermediate never reaches memory;

  • one launch over all items instead of a Python loop over per-item launches;

  • CUDA graph capture where the seam is launch-bound rather than compute-bound;

  • caller-owned persistent structures so a BVH or hash grid is built once and refit rather than rebuilt per call.

These are examples, not a checklist: the right formulation is a property of the seam. Name the mechanism and check it against the release the project pins.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Python

The author says: Screening, static evaluation and reporting need no GPU. Measuring Warp requires an NVIDIA CUDA GPU, the target project's dependencies and a representative workload; without them, abort before profiling.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs
  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
NVIDIA Corporation
Publisher
NVIDIA (Official)
Source
NVIDIA/skills · skills/warp-eval · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA Corporation or NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download warp-eval.zip