Benchmark Dashboard
A compact operating view of the NumSharp vs NumPy benchmark suite: 18 official op suites, all supported dtypes where applicable, three cache tiers, and six complementary scans for iterator, layout, operand, cast, fusion, and native OpenBLAS/LAPACK behavior.
455 / 461 benchmarkable NumSharp-compatible APIs have benchmark evidence
Best valid implementation selected per comparable cell
Managed C# Native Backend
OpenBLAS Backend
wins out of 1,568 comparable cast cells
Legend & How To Read
Cell
One benchmark row: operation, dtype, and size tier. The dashboard uses best timed runs after warmup. Allocation-heavy families retain the 10M tier label while both NumPy and NumSharp use a symmetric 1M physical-work cap; 1M is not a separate dashboard tier.
Reading Ratios
Ratio is NumPy / NumSharp. Higher is better: 3.00x means NumSharp took 10s while NumPy took 30s; 0.50x means NumSharp takes about twice as long.
Performance Bands
Status Mix
Credible rows are grouped by NumPy / NumSharp ratio; negligible and no-data cells are separate
Suite Scoreboard
Geomean across credible rows. Parity marker is 1.0x.
Dtype Heatmap
Credible operation-matrix rows by dtype and cache tier
Subsystem Signals
Result models that the op matrix cannot express
NDIter
1.46xIterator operation geomean across 165 comparable cells: 108 wins and 57 losses, with no sections excluded by the access-violation policy.
Layout
0.54-9.24xPublished geomeans by layout span 0.54x to 9.24x: large copy and elementwise paths win, while strided/broadcast reductions and decimal sums trail.
Cast
1,187 winsThe full src-to-dst astype grid is broadly ahead. Remaining lag clusters around same-type diagonal copy and bool conversion cases.
Fusion
4.12xThe best fixed expression speedup for fused np.evaluate over NumSharp's unfused chain; broadcast fusion reaches 4.10x.
Function Explorer
Scores use credible rows only; negligible and no-data cells remain available in the raw tables
Optimization Priorities Recommended
Current optimization priorities from the latest snapshot
- Shift kernels: vectorize 100K int left/right shift.
- Bool bitwise: lift
invert,&,|,^. - Decimal reduce: fix broadcast/sliced sum axis cliffs.
- i32 broadcast: repair stride-0 axis sum.
- f64 sum: close the 100K reduction gap.
- Float predicates: accelerate 100K
isnan/isinf/isfinite. - f32 add/mul: improve 100K scalar/literal paths.
- f64 add/mul: improve 100K scalar/literal paths.
- Float abs/neg: remove 100K C/strided cliffs.
- Rounding: tighten 100K f32/f64 floor/ceil/trunc.
- Exp/log: reduce f32/f64 mid-tier overhead.
- f16 unary: lift sign/math scalar fallback.
- Int mean: improve 10M int64/uint64 mean.
- Linear algebra: revisit large f64 matmul/dot.
- Flatten: fix the 100K copy/cast trough.
- Astype small: reduce scalar/1K setup cost.
- Ravel T: close transpose ravel mid-size gap.
- less->bool: specialize bool output loops.
- Index math: speed scalar/1K unravel/ravel-multi.
- NDIter copy: raise 100K copy/cast geomean.
- Chunk width: optimize tiny inner width dispatch.
- f16 operands: improve strided/reversed/broadcast cases.
- Cast diagonal: speed same-type copy cells.
- Cast bool: clean remaining
* -> boollosses. - Fusion: broaden fused-expression coverage.
Full Reports
Detailed tables remain available for traceability
- Snapshot manifest — snapshot provenance, versions, commit, and artifact inventory.
- Unified report — unified operation matrix and subsystem results.
- Cast matrix — source/destination dtype and layout cast matrix.
- NDIter results — NDIter construction, traversal, and operation timings.
- Layout matrix — memory-layout benchmark matrix.
- Operand layouts — scalar, mixed, broadcast, and operand-layout results.
- Fusion results — fused versus unfused expression timings.
- OpenBLAS results — native product, sliding-dot, and LAPACK timings.
- IL generation — IL-generation implementation and performance notes.