SimulationAICPUCPU and GPUGPU
SimulationAICPUCPU andGPUGPU

first-class: a glowing icon with its name not first-class: a faint icon on the middle band, no name

raptor: 12 capabilities, on both CPU and GPU, 11 on the Simulation side and 1 on the AI side.

Show details
  • Fixed-step ODEs CPU ✓ GPU ✓ A step written for one sample, run over the batch until every sample is done.
  • Differentiable sensitivities CPU ✓ GPU ✓ Generated forward- and reverse-mode derivatives, read by jax.grad, torch autograd and wp.Tape.
  • Zero-copy hand-over (DLPack) CPU ✓ GPU ✓ Runs inside your JAX, PyTorch, Warp, CuPy and NumPy programs, and theirs inside its batches; DLPack hand-over certified with all five.
  • Per-sample models and RHS CPU ✓ GPU ✓ You write one step of one sample; the batch is launched for you.
  • Ensembles and Monte Carlo CPU ✓ GPU ✓ Many independent samples in one batched run.
  • Divergent workloads CPU ✓ GPU ✓ Finished samples are compacted out, so each launch covers only the samples still running.
  • Events and early exit CPU ✓ GPU ✓ A sample stops on its own condition and leaves the work.
  • Adaptive ODEs, embedded pairs CPU ✓ GPU ✓ eagle.simulate runs an embedded RKF7(8) pair with per-sample step control.
  • Deployment outside Python CPU ✓ GPU ✓ A compiled kernel is embedded in a C++ program and run there.
  • Differentiable simulation into learning CPU ✓ GPU ✓ Gradients through a whole captured run.
  • Ensemble data for training CPU ✓ GPU ✓ Simulated batches feed a PyTorch training loop without copies.
  • Hybrid, physics-informed models CPU ✓ GPU ✓ A network and a physics model in one differentiable program.

Not first-class: Hand-tuned kernels, Half precision, Dense linear algebra, large solvers, Dense tensor training, Low-precision inference, Array-style programs.

Compare all tools
Where each tool has a documented, first-class way to do each capability: CPU, GPU or both. An empty cell is not first-class. Every filled cell links to its source.
CapabilityraptorNVIDIA WarpJAXPyTorchCuPyNumbaNumPy
Hand-tuned kernelsbothGPUboth CPU GPU
Fixed-step ODEsbothbothbothbothGPUboth CPU GPUCPU
Differentiable sensitivitiesbothbothbothboth
Zero-copy hand-over (DLPack)bothbothbothbothGPUboth CPU GPUCPU
Per-sample models and RHSbothbothbothbothboth CPU GPU
Half precisionbothbothbothGPUCPU
Dense linear algebra, large solversbothbothbothGPUCPUCPU
Ensembles and Monte CarlobothbothbothbothGPUboth CPU GPUCPU
Divergent workloadsboth
Events and early exitbothCPU
Adaptive ODEs, embedded pairsboth
Deployment outside Pythonbothbothboth
Differentiable simulation into learningbothbothbothboth
Ensemble data for trainingbothbothbothbothGPUboth CPU GPUCPU
Hybrid, physics-informed modelsbothbothbothboth
Dense tensor trainingbothboth
Low-precision inferencebothboth
Array-style programsbothbothGPUCPU

What each tool has a documented, first-class way to do, on CPU and on GPU; speed is in the bars and the radar.

An icon lights up only when the tool's own documentation shows a designed feature or API for it; a workaround (masking every lane, raw CUDA strings, running the slowest sample to the end) does not count. Every covered cell links to its source. The tools are complementary; overlap is not a ranking.

Ensemble speedfaster is betterFootprint andturnaroundlower is betterTensors andprecision(qualitative)One-sampleauthoring(qualitative)Low-levelcontrol(qualitative)Reach(qualitative)
  1. 1 Ensemble speed faster is better
  2. 2 Footprint and turnaround lower is better
  3. 3 Tensors and precision (qualitative)
  4. 4 One-sample authoring (qualitative)
  5. 5 Low-level control (qualitative)
  6. 6 Reach (qualitative)
Ensemble speed
How fast a batch of independent samples runs: uneven, regular, small and adaptive workloads.
Footprint and turnaround
What the work costs around the run: the memory it holds, the time to compile and the code to write.
Tensors and precision (qualitative)
Dense tensor maths, array-style code and half precision: where PyTorch and JAX lead.
One-sample authoring (qualitative)
Writing the code for one sample and getting derivatives of it.
Low-level control (qualitative)
How much of the execution you control from the tool's own language.
Reach (qualitative)
Where the tool fits in: your arrays, deployment outside Python and extension to new targets.

Radar for NVIDIA H100 80GB HBM3, card of 2026-10-13, script 02d7ded8. Each axis is defined in the list below the chart; hover or tap one for the numbers behind it.

Show the data behind the radar
AxisraptorNVIDIA WarpJAXPyTorchCuPy
Ensemble speed1.00 of the radius (mean of 4)0.94 of the radius (mean of 4)0.49 of the radius (mean of 4)0.35 of the radius (mean of 4)0.20 of the radius (mean of 4)
Uneven ensembles613 µs (1.0× the best)1.54 ms (2.5× the best)47.0 ms (76× the best)84.5 ms (130× the best)368 ms (600× the best)
Regular ensembles1.75 ms (1.0× the best)1.71 ms (1.0× the best)48.1 ms (28× the best)83.6 ms (48× the best)365 ms (210× the best)
Small jobs103 µs (1.0× the best)112 µs (1.0× the best)21.8 ms (210× the best)65.7 ms (630× the best)352 ms (3400× the best)
Adaptive ODEs43.6 ms (1.0× the best)101 ms (2.3× the best)1.11 s (25× the best)7.17 s (160× the best)9.06 s (200× the best)
Footprint and turnaround0.80 of the radius (mean of 3)0.65 of the radius (mean of 3)0.60 of the radius (mean of 3)0.59 of the radius (mean of 3)0.57 of the radius (mean of 3)
Memory40 MiB (1.0× the best)62 MiB (1.5× the best)158 MiB (3.9× the best)242 MiB (6.0× the best)192 MiB (4.8× the best)
Compile time2.48 s (1-10 s: noticeable)9.28 s (1-10 s: noticeable)4.22 s (1-10 s: noticeable)3.71 s (1-10 s: noticeable)2.58 s (1-10 s: noticeable)
Code size32 lines (1.4× the best)40 lines (1.8× the best)29 lines (1.3× the best)22 lines (1.0× the best)32 lines (1.4× the best)
Tensors and precision (qualitative)1.7 of 52.7 of 54.7 of 55.0 of 54.0 of 5
Tensor workloads (qualitative)2 of 53 of 55 of 55 of 54 of 5
Array-style programming (qualitative)2 of 52 of 54 of 55 of 55 of 5
Half precision and below (qualitative)1 of 53 of 55 of 55 of 53 of 5
One-sample authoring (qualitative)5.0 of 53.5 of 54.5 of 53.5 of 51.5 of 5
Single-thread abstraction (qualitative)5 of 53 of 54 of 53 of 52 of 5
Differentiable kernels (qualitative)5 of 54 of 55 of 54 of 51 of 5
Low-level control (qualitative)2.0 of 55.0 of 53.0 of 52.0 of 53.0 of 5
Reach (qualitative)3.7 of 52.7 of 54.0 of 54.0 of 52.7 of 5
Works with your arrays (qualitative)4 of 54 of 54 of 54 of 55 of 5
Deploy outside Python (qualitative)4 of 52 of 54 of 54 of 51 of 5
Extensibility (qualitative)3 of 52 of 54 of 54 of 52 of 5

Every measured axis is the per-sample ensemble workload raptor is built for; dense tensor maths, training and half precision are the qualitative axes, where PyTorch and JAX lead. Outer is better; overlaps are complementary, not a ranking.

NVIDIA Warp gives you near-total control of every kernel, short of raw CUDA. raptor hands that control to the engine on purpose, so compaction and the launch shape are decided at run time; the two are different trade-offs, not a ranking.

How to read this radar

Each of the six majors is the plain mean of its minor axes (the detailed radar draws every minor), with equal weights and the same rule for every tool; a minor a tool has no reading on is left out of its mean and the major's marker is drawn hollow. Hover or tap a major to see its minors.

  • Ensemble speed: Uneven ensembles, Regular ensembles, Small jobs and Adaptive ODEs; measured.
  • Footprint and turnaround: Memory, Compile time and Code size; measured.
  • Tensors and precision: Tensor workloads, Array-style programming and Half precision and below; qualitative.
  • One-sample authoring: Single-thread abstraction and Differentiable kernels; qualitative.
  • Low-level control: A single axis, so nothing is averaged; qualitative.
  • Reach: Works with your arrays, Deploy outside Python and Extensibility; qualitative.

Each measured axis is stretched over its own best-to-worst range, so ring labels differ per axis (compile time: fixed, 0.1 s to 100 s; code size: at least 4x). Axes are grouped by theme, so read the axes, not the area.

Italic axes are the author's judgement, not measurements: hollow markers, a linear scale, and no marker where a tool has no reading. A hollow marker on a measured axis means a minor is missing or, for compile time, is the tool's simple-kernel time. The hover panel has each axis's full wording.

Every number, in the full tables.

Ensemble speedfaster is betterFootprint andturnaroundlower is betterTensors andprecision(qualitative)One-sampleauthoring(qualitative)Low-levelcontrol(qualitative)Reach(qualitative)
  1. 1 Ensemble speed faster is better
  2. 2 Footprint and turnaround lower is better
  3. 3 Tensors and precision (qualitative)
  4. 4 One-sample authoring (qualitative)
  5. 5 Low-level control (qualitative)
  6. 6 Reach (qualitative)
Ensemble speed
How fast a batch of independent samples runs: uneven, regular, small and adaptive workloads.
Footprint and turnaround
What the work costs around the run: the memory it holds, the time to compile and the code to write.
Tensors and precision (qualitative)
Dense tensor maths, array-style code and half precision: where PyTorch and JAX lead.
One-sample authoring (qualitative)
Writing the code for one sample and getting derivatives of it.
Low-level control (qualitative)
How much of the execution you control from the tool's own language.
Reach (qualitative)
Where the tool fits in: your arrays, deployment outside Python and extension to new targets.

Radar for AMD EPYC 9B45, card of 2026-10-13, script cb2eb627. Each axis is defined in the list below the chart; hover or tap one for the numbers behind it.

Show the data behind the radar
AxisraptorNumbaJAXPyTorchNumPy
Ensemble speed1.00 of the radius (mean of 4)0.71 of the radius (mean of 4)0.52 of the radius (mean of 4)0.20 of the radius (mean of 3 of 4)0.29 of the radius (mean of 3 of 4)
Uneven ensembles142 ms (1.0× the best)328 ms (2.3× the best)1.86 s (13× the best)10.2 s (72× the best)7.72 s (54× the best)
Regular ensembles187 ms (1.0× the best)1.53 s (8.1× the best)1.94 s (10× the best)10.2 s (54× the best)7.65 s (40× the best)
Small jobs167 µs (1.0× the best)368 µs (2.1× the best)491 µs (2.9× the best)44.7 ms (260× the best)15.6 ms (92× the best)
Adaptive ODEs3.76 s (1.0× the best)19.9 s (5.3× the best)60.5 s (16× the best)––
Footprint and turnaround0.90 of the radius (mean of 3)0.82 of the radius (mean of 3)0.81 of the radius (mean of 3)0.59 of the radius (mean of 2 of 3)0.82 of the radius (mean of 3)
Memory61.5 MiB (1.0× the best)68.4 MiB (1.1× the best)174 MiB (2.8× the best)275 MiB (4.4× the best)169 MiB (2.7× the best)
Compile time565 ms (under 1 s: instant)449 ms (under 1 s: instant)71.5 ms (under 1 s: instant)–no compile step (nothing to compile)
Code size28 lines (1.1× the best)42 lines (1.7× the best)25 lines (1.0× the best)25 lines (1.0× the best)24 lines (1.0× the best)
Tensors and precision (qualitative)1.7 of 52.7 of 54.7 of 55.0 of 54.0 of 5
Tensor workloads (qualitative)2 of 53 of 55 of 55 of 54 of 5
Array-style programming (qualitative)2 of 52 of 54 of 55 of 55 of 5
Half precision and below (qualitative)1 of 53 of 55 of 55 of 53 of 5
One-sample authoring (qualitative)5.0 of 52.0 of 54.5 of 53.5 of 51.0 of 5
Single-thread abstraction (qualitative)5 of 53 of 54 of 53 of 51 of 5
Differentiable kernels (qualitative)5 of 51 of 55 of 54 of 51 of 5
Low-level control (qualitative)2.0 of 55.0 of 52.0 of 52.0 of 52.0 of 5
Reach (qualitative)3.7 of 52.7 of 54.0 of 54.0 of 52.7 of 5
Works with your arrays (qualitative)4 of 53 of 54 of 54 of 54 of 5
Deploy outside Python (qualitative)4 of 52 of 54 of 54 of 51 of 5
Extensibility (qualitative)3 of 53 of 54 of 54 of 53 of 5

Every measured axis is the per-sample ensemble workload raptor is built for; dense tensor maths, training and half precision are the qualitative axes, where PyTorch and JAX lead. Outer is better; overlaps are complementary, not a ranking.

NVIDIA Warp gives you near-total control of every kernel, short of raw CUDA. raptor hands that control to the engine on purpose, so compaction and the launch shape are decided at run time; the two are different trade-offs, not a ranking.

How to read this radar

Each of the six majors is the plain mean of its minor axes (the detailed radar draws every minor), with equal weights and the same rule for every tool; a minor a tool has no reading on is left out of its mean and the major's marker is drawn hollow. Hover or tap a major to see its minors.

  • Ensemble speed: Uneven ensembles, Regular ensembles, Small jobs and Adaptive ODEs; measured.
  • Footprint and turnaround: Memory, Compile time and Code size; measured.
  • Tensors and precision: Tensor workloads, Array-style programming and Half precision and below; qualitative.
  • One-sample authoring: Single-thread abstraction and Differentiable kernels; qualitative.
  • Low-level control: A single axis, so nothing is averaged; qualitative.
  • Reach: Works with your arrays, Deploy outside Python and Extensibility; qualitative.

Each measured axis is stretched over its own best-to-worst range, so ring labels differ per axis (compile time: fixed, 0.1 s to 100 s; code size: at least 4x). Axes are grouped by theme, so read the axes, not the area.

Italic axes are the author's judgement, not measurements: hollow markers, a linear scale, and no marker where a tool has no reading. A hollow marker on a measured axis means a minor is missing or, for compile time, is the tool's simple-kernel time. The hover panel has each axis's full wording.

Every number, in the full tables.