Simulationper-sample models, ensembles, ODEsAIPyTorch and JAX leadraptorNVIDIA WarpJAXPyTorchHand-tunedkernelsFixed-stepODEsDifferentiablesensitivitiesZero-copyhand-overPer-samplemodels, RHSHalfprecisionDense linearalgebra, solversEnsembles,Monte CarloDivergentworkloadsAdaptive ODEs,embedded pairsEvents,early exitDeploy outsidePythonDifferentiablesimulationEnsemble datafor trainingHybrid, physics-informedDense tensortrainingLow-precisioninferenceArray-styleprograms
SimulationAI
  1. Hand-tuned kernelsW
  2. Fixed-step ODEsr W
  3. Differentiable sensitivitiesr W J Pt
  4. Zero-copy hand-over (DLPack)r W J Pt
  5. Per-sample models and RHSr J
  6. Half precisionJ Pt
  7. Dense linear algebra, large solversJ Pt
  8. Ensembles and Monte Carlor
  9. Divergent workloadsr
  10. Adaptive ODEs, embedded pairsr
  11. Events and early exitr
  12. Deployment outside Pythonr J Pt
  13. Differentiable simulation into learningr
  14. Ensemble data for trainingr
  15. Hybrid, physics-informed modelsr J
  16. Dense tensor trainingJ Pt
  17. Low-precision inferenceJ Pt
  18. Array-style programsJ Pt

Two worlds on NVIDIA H100 80GB HBM3, card of 2026-10-13, script 02d7ded8.

Show the data behind the two worlds
Blocks of work: a tool covers a block when it covers every feature the block needs
BlockNeedsraptorNVIDIA WarpJAXPyTorch
Hand-tuned kernelsControl, Regular ensembles, Small jobs–covered––
Fixed-step ODEsRegular ensembles, Small jobscoveredcovered––
Differentiable sensitivitiesDerivativescoveredcoveredcoveredcovered
Zero-copy hand-over (DLPack)Your arrayscoveredcoveredcoveredcovered
Per-sample models and RHSSingle-threadcovered–covered–
Half precisionHalf precision––coveredcovered
Dense linear algebra, large solversTensors––coveredcovered
Ensembles and Monte CarloRegular ensembles, Uneven ensembles, Memorycovered–––
Divergent workloadsUneven ensembles, Early-finish saving, Uneven-batch efficiencycovered–––
Adaptive ODEs, embedded pairsAdaptive ODEscovered–––
Events and early exitUneven ensembles, Early-finish savingcovered–––
Deployment outside PythonDeploycovered–coveredcovered
Differentiable simulation into learningDerivatives, Single-thread, Uneven ensemblescovered–––
Ensemble data for trainingUneven ensembles, Regular ensembles, Your arrayscovered–––
Hybrid, physics-informed modelsDerivatives, Single-thread, Your arrays, Deploycovered–covered–
Dense tensor trainingTensors, Array style, Half precision, Derivatives––coveredcovered
Low-precision inferenceTensors, Half precision, Deploy––coveredcovered
Array-style programsArray style––coveredcovered
Features: measured readings, and the rubric scores (judgement). A tick marks a feature the tool covers: within 2× of the best tool, or 4 of 5
FeatureraptorNVIDIA WarpJAXPyTorch
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)
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)
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)
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)
Early-finish saving82% (1.0× the best) ✓12% (6.6× the best)2% (27× the best)none (no saving)
Uneven-batch efficiency46% (1.0× the best) ✓18% (2.5× the best)<1% (76× the best)<1% (130× the best)
Memory40 MiB (1.0× the best) ✓62 MiB (1.5× the best) ✓158 MiB (3.9× the best)242 MiB (6.0× 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) ✓
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) ✓
Tensors2 of 5
Built for per-sample kernels and ensembles; for dense tensor work it hands arrays to PyTorch or JAX zero-copy.
3 of 5
Per-thread kernels are its home ground; it also offers matrix and tile types for dense blocks.
5 of 5 ✓
Array programs written once and compiled by XLA; batched linear algebra, convolutions and broadcasting are first-class.
5 of 5 ✓
Dense array maths is its home ground, with tuned libraries behind batched linear algebra, convolutions and broadcasting.
Array style2 of 5
A per-sample kernel language by design: you write one step of one sample, and whole-array code is left to array libraries, with which raptor exchanges arrays zero-copy.
2 of 5
You write per-thread kernels; whole-array expressions are not the model.
4 of 5 ✓
NumPy-style array expressions, but functional and traced rather than eager.
5 of 5 ✓
Eager tensor expressions are the programming model.
Half precision1 of 5
Not supported. raptor is scoped to FP32 and FP64 numerics; half-precision and tensor-core work belongs with PyTorch or JAX.
3 of 5
float16 support and tile operations that can use tensor cores.
5 of 5 ✓
FP16, BF16 and FP8 types, with XLA targeting tensor cores.
5 of 5 ✓
FP16, BF16 and FP8 types with tensor-core paths, including autocast.
Single-thread5 of 5 ✓
You write one step of one sample; hawk and eagle handle threads, launches, stopping and compaction.
3 of 5
A per-thread kernel: you index and loop yourself, and choose the launch.
4 of 5 ✓
A per-sample function under vmap; early stopping becomes masking you write.
3 of 5
torch.func.vmap over a per-sample function; stopping and batching stay with you.
Derivatives5 of 5 ✓
Every kernel written in hawk's own vocabulary carries generated forward- and reverse-mode derivatives, on GPU and CPU.
4 of 5 ✓
Reverse mode through wp.Tape over its kernels, with its emphasis on reverse mode over the tape.
5 of 5 ✓
Forward and reverse mode through grad, jvp and vjp, on GPU and CPU.
4 of 5 ✓
Autograd differentiates tensor programs; a custom kernel needs its backward written by hand.
Control2 of 5
By design hawk and eagle decide threads, launches and scheduling, so compaction can adapt to uneven batches; for hand-tuned thread-level kernels, Warp or Numba is the right choice.
5 of 5 ✓
You write the per-thread kernel and choose its launch: near-total control short of raw CUDA, the right choice for hand-tuned kernels.
3 of 5
Pallas exposes kernel-level control; plain JAX leaves scheduling to XLA.
2 of 5
Operators and a few custom-kernel hooks; launches are left to the framework.
Your arrays4 of 5 ✓
Zero-copy through DLPack with a certified matrix (CuPy, PyTorch, Warp and NumPy today, not JAX).
4 of 5 ✓
Zero-copy views of PyTorch, JAX and NumPy arrays.
4 of 5 ✓
DLPack exchange with other frameworks, mostly without copies.
4 of 5 ✓
DLPack and the array interface exchange tensors with other libraries, mostly without copies.
Deploy4 of 5 ✓
A compiled kernel runs from any program that can load its manifest; today eagle is the loader.
2 of 5
Kernels run inside Python; modules can be compiled ahead of time but need the Warp runtime.
4 of 5 ✓
Compiled XLA programs can be exported and run from other runtimes.
4 of 5 ✓
TorchScript, AOT export and a C++ runtime take models into non-Python programs.
Extensibility3 of 5
A plugin registry and a protocol spine; two backends today (CUDA and CPU threads), no second vendor yet.
2 of 5
NVIDIA GPUs and the CPU; no public path to add a backend.
4 of 5 ✓
XLA and PJRT plugins add new hardware backends.
4 of 5 ✓
Out-of-tree backends and custom operators are supported.

Two worlds, drawn as soft regions that blend where they meet; the blend is the boundary. A block of work is covered by a tool when the tool covers every feature the block needs: within 2× of the best tool on this device for a measured feature, 4 of 5 for a rubric one (italic: the author's judgement). Same rule for every tool; a dashed block is one no tool covers on this device. A tool's shape is the rounded convex hull of the blocks it covers and never encloses a block it does not cover (where one hull would, the tool is drawn in two or more pieces). Arrays cross zero-copy between raptor and CuPy, PyTorch, NVIDIA Warp and NumPy today, not JAX. 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.

Simulationper-sample models, ensembles, ODEsAIPyTorch and JAX leadraptorJAXPyTorchNumPyHand-tunedkernelsFixed-stepODEsDifferentiablesensitivitiesZero-copyhand-overPer-samplemodels, RHSHalfprecisionDense linearalgebra, solversEnsembles,Monte CarloDivergentworkloadsAdaptive ODEs,embedded pairsEvents,early exitDeploy outsidePythonDifferentiablesimulationEnsemble datafor trainingHybrid, physics-informedDense tensortrainingLow-precisioninferenceArray-styleprograms
SimulationAI
  1. Hand-tuned kernels
  2. Fixed-step ODEsr
  3. Differentiable sensitivitiesr J Pt
  4. Zero-copy hand-over (DLPack)r J Pt Np
  5. Per-sample models and RHSr J
  6. Half precisionJ Pt
  7. Dense linear algebra, large solversJ Pt Np
  8. Ensembles and Monte Carlor
  9. Divergent workloads
  10. Adaptive ODEs, embedded pairsr
  11. Events and early exit
  12. Deployment outside Pythonr J Pt
  13. Differentiable simulation into learningr
  14. Ensemble data for trainingr
  15. Hybrid, physics-informed modelsr J
  16. Dense tensor trainingJ Pt
  17. Low-precision inferenceJ Pt
  18. Array-style programsJ Pt Np

Two worlds on AMD EPYC 9B45, card of 2026-10-13, script cb2eb627.

Show the data behind the two worlds
Blocks of work: a tool covers a block when it covers every feature the block needs
BlockNeedsraptorNumbaJAXPyTorchNumPy
Hand-tuned kernelsControl, Regular ensembles, Small jobs–––––
Fixed-step ODEsRegular ensembles, Small jobscovered––––
Differentiable sensitivitiesDerivativescovered–coveredcovered–
Zero-copy hand-over (DLPack)Your arrayscovered–coveredcoveredcovered
Per-sample models and RHSSingle-threadcovered–covered––
Half precisionHalf precision––coveredcovered–
Dense linear algebra, large solversTensors––coveredcoveredcovered
Ensembles and Monte CarloRegular ensembles, Uneven ensembles, Memorycovered––––
Divergent workloadsUneven ensembles, Early-finish saving, Uneven-batch efficiency–––––
Adaptive ODEs, embedded pairsAdaptive ODEscovered––––
Events and early exitUneven ensembles, Early-finish saving–––––
Deployment outside PythonDeploycovered–coveredcovered–
Differentiable simulation into learningDerivatives, Single-thread, Uneven ensemblescovered––––
Ensemble data for trainingUneven ensembles, Regular ensembles, Your arrayscovered––––
Hybrid, physics-informed modelsDerivatives, Single-thread, Your arrays, Deploycovered–covered––
Dense tensor trainingTensors, Array style, Half precision, Derivatives––coveredcovered–
Low-precision inferenceTensors, Half precision, Deploy––coveredcovered–
Array-style programsArray style––coveredcoveredcovered
Features: measured readings, and the rubric scores (judgement). A tick marks a feature the tool covers: within 2× of the best tool, or 4 of 5
FeatureraptorNumbaJAXPyTorchNumPy
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)no readingno reading
Early-finish saving30% (3.2× the best)100% (1.0× the best) ✓5% (19× the best)none (no saving)none (no saving)
Uneven-batch efficiency6% (1.0× the best) ✓2% (2.3× the best)<1% (13× the best)<1% (72× the best)<1% (100× the best)
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 readingno 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) ✓
Tensors2 of 5
Built for per-sample kernels and ensembles; for dense tensor work it hands arrays to PyTorch or JAX zero-copy.
2 of 5
Compiles loops and NumPy-style code; dense linear algebra comes from the libraries it calls.
5 of 5 ✓
Array programs written once and compiled by XLA; batched linear algebra, convolutions and broadcasting are first-class.
5 of 5 ✓
Dense array maths is its home ground, with tuned libraries behind batched linear algebra, convolutions and broadcasting.
4 of 5 ✓
The reference API for dense array maths and broadcasting on the CPU, with tuned BLAS and LAPACK underneath.
Array style2 of 5
A per-sample kernel language by design: you write one step of one sample, and whole-array code is left to array libraries, with which raptor exchanges arrays zero-copy.
2 of 5
You mostly write loops over arrays; array expressions are secondary.
4 of 5 ✓
NumPy-style array expressions, but functional and traced rather than eager.
5 of 5 ✓
Eager tensor expressions are the programming model.
5 of 5 ✓
The whole-array expression is the programming model, evaluated eagerly; the right choice for array code on the CPU.
Half precision1 of 5
Not supported. raptor is scoped to FP32 and FP64 numerics; half-precision and tensor-core work belongs with PyTorch or JAX.
2 of 5
float16 arithmetic intrinsics in numba.cuda; no BF16/FP8 or tensor-core path.
5 of 5 ✓
FP16, BF16 and FP8 types, with XLA targeting tensor cores.
5 of 5 ✓
FP16, BF16 and FP8 types with tensor-core paths, including autocast.
2 of 5
float16 storage and arithmetic, but slow on the CPU and nothing below it.
Single-thread5 of 5 ✓
You write one step of one sample; hawk and eagle handle threads, launches, stopping and compaction.
3 of 5
A per-index body under prange or cuda.jit; indexing and launch are yours.
4 of 5 ✓
A per-sample function under vmap; early stopping becomes masking you write.
3 of 5
torch.func.vmap over a per-sample function; stopping and batching stay with you.
1 of 5
Whole-array code; there is no per-sample model.
Derivatives5 of 5 ✓
Every kernel written in hawk's own vocabulary carries generated forward- and reverse-mode derivatives, on GPU and CPU.
1 of 5
No automatic differentiation of its own.
5 of 5 ✓
Forward and reverse mode through grad, jvp and vjp, on GPU and CPU.
4 of 5 ✓
Autograd differentiates tensor programs; a custom kernel needs its backward written by hand.
1 of 5
No automatic differentiation of its own.
Control2 of 5
By design hawk and eagle decide threads, launches and scheduling, so compaction can adapt to uneven batches; for hand-tuned thread-level kernels, Warp or Numba is the right choice.
5 of 5 ✓
prange, explicit threads and typed loops; SIMD and memory layout are yours.
2 of 5
Plain JAX leaves threads, vectorisation and layout to XLA; Pallas control is aimed at the GPU.
2 of 5
Operators and a few custom-kernel hooks; launches are left to the framework.
2 of 5
Strides and memory layout are yours to choose; threads and SIMD are left to the libraries underneath.
Your arrays4 of 5 ✓
Zero-copy through DLPack with a certified matrix (CuPy, PyTorch, Warp and NumPy today, not JAX).
3 of 5
Reads NumPy arrays directly and exposes the CUDA array interface; wider exchange takes some glue.
4 of 5 ✓
DLPack exchange with other frameworks, mostly without copies.
4 of 5 ✓
DLPack and the array interface exchange tensors with other libraries, mostly without copies.
4 of 5 ✓
The array protocols everyone reads, on the host; device memory is out of its scope.
Deploy4 of 5 ✓
A compiled kernel runs from any program that can load its manifest; today eagle is the loader.
2 of 5
Ahead-of-time compilation exists in a limited form; most use stays inside Python.
4 of 5 ✓
Compiled XLA programs can be exported and run from other runtimes.
4 of 5 ✓
TorchScript, AOT export and a C++ runtime take models into non-Python programs.
1 of 5
A Python library; nothing is compiled into a separate artefact.
Extensibility3 of 5
A plugin registry and a protocol spine; two backends today (CUDA and CPU threads), no second vendor yet.
3 of 5
An extension API for new types and targets, at a low level.
4 of 5 ✓
XLA and PJRT plugins add new hardware backends.
4 of 5 ✓
Out-of-tree backends and custom operators are supported.
3 of 5
Array-API dispatch lets other array libraries stand in.

Two worlds, drawn as soft regions that blend where they meet; the blend is the boundary. A block of work is covered by a tool when the tool covers every feature the block needs: within 2× of the best tool on this device for a measured feature, 4 of 5 for a rubric one (italic: the author's judgement). Same rule for every tool; a dashed block is one no tool covers on this device. A tool's shape is the rounded convex hull of the blocks it covers and never encloses a block it does not cover (where one hull would, the tool is drawn in two or more pieces). Arrays cross zero-copy between raptor and CuPy, PyTorch, NVIDIA Warp and NumPy today, not JAX. 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 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.0 of 54.7 of 55.0 of 53.7 of 5
Tensor workloads (qualitative)2 of 52 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 52 of 55 of 55 of 52 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.