Performance Examples

Local kernel profiling

python scripts/profile_kernels.py \
  --n-observers 512 \
  --repeats 1 \
  --output profiling/profile.local.json \
  --output-dir profiling/artifacts/local

End-to-end JIT-safe getB profiling

python scripts/profile_getB_jit.py \
  --repeats 3 \
  --output profiling/getB_jit.local.json \
  --output-dir profiling/artifacts/getB_jit

WHAM-style coil workload

python scripts/profile_wham_workload.py

That script compares upstream magpylib and magpylib_jax on a representative double-coil workload and also records the cost of converting the JAX result back to NumPy.

What to inspect in the artifacts

  • runtime and compile time in the JSON summaries,

  • HLO dumps under profiling/.../hlo/,

  • trace directories under profiling/.../trace/,

  • memory snapshots under profiling/.../memory/.

When to use kernel JIT entrypoints directly

If your application has a fixed observer count and repeatedly evaluates a single source family, the specialized wrappers in core.kernels_extended can be useful for isolating compile/runtime behavior.

For most users, the high-level getB path is the right default.