Table of Contents

Benchmark snapshot — 2026-06-23 · e3b7c268

Official NumSharp-vs-NumPy 3-size comparison + the five matrix subsystems, persisted for provenance. Auto-generated by benchmark/scripts/snapshot_history.py.

Provenance

Run timestamp 20260623-065155
Git HEAD e3b7c268 — bench: regenerate full NumSharp-vs-NumPy report (op-matrix …
Working tree clean (HEAD exactly)
Date 2026-06-23

Environment

CPU 13th Gen Intel Core i9-13900K
OS Windows 11 (10.0.26200)
.NET SDK 10.0.101 (net10.0, Release)
Python 3.12.12
NumPy 2.4.2

Convention

Ratio = NumPy_ms ÷ NumSharp_ms (NPY/NS) → >1.0× = NumSharp faster (higher is better).

Methodology

  • C#: BenchmarkDotNet, OfficialBenchmarkConfig — InProcessEmit toolchain, 50 measured iterations / 5 warmup, iteration time capped at 25 ms. MemoryDiagnoser on.
  • NumPy: 50 timed iterations / 10 warmup per op (warm long-lived interpreter).
  • Sizes: 1,000 / 100,000 / 10,000,000 elements. Same seeds both sides.
  • Join keyed on (op, dtype, N).
  • Subsystems appended to benchmark-report.md: NDIter, Layout, Operand, Cast, Fusion.

Headline — op-matrix geomean by size (NPY/NS, >1 = NumSharp faster)

Size geomean %NumPy🕐 ✅ / 🟡 / 🟠 / 🔴
1,000 1.14x 87% 115 / 69 / 27 / 13
100,000 0.90x 111% 280 / 138 / 119 / 48
10,000,000 1.26x 80% 397 / 150 / 31 / 11

Overall op-matrix: 1851 ops | ✅ 792 | 🟡 357 | 🟠 177 | 🔴 72 | ▫ 384 | ⚪ 69.

NDIter: HEADLINE — operation matrix: 1.18× geomean · 85%🕐 of NumPy's time · 72 win / 58 lose over 130 cells

Cast: 129 / 1568 comparable cells lag (<1.0); 1439 win (≥1.0).

Files

file what
benchmark-report.md op-matrix (per-(op,dtype,N) ratio) + appended NDIter/Layout/Operand/Cast/Fusion
benchmark-report.json / .csv unified machine-readable / spreadsheet form
numpy-results.json raw NumPy timings (merge input)
nditer_results.* + cards/ iterator benchmark sheet + README cards
layout_/operand_/cast_/fusion_results.* the four matrix-subsystem sheets

Raw BenchmarkDotNet per-class JSON (~tens of MB) is not persisted here (regenerable). Reproduce with python benchmark/run_benchmark.py.