Rust Engine Benchmarks¶
All measurements via Criterion 0.8, single-threaded, pure CPU.
Hardware: 11th Gen Intel Core i5-11600K @ 3.90 GHz (6C/12T), DDR4-2400, Ubuntu 24.04.
Verified via lscpu on 2026-05-31.
Last updated: 2026-06-04.
How to Run¶
# Full benchmark suite
cargo bench --bench full_bench
cargo bench --bench analysis_bench
# Quick (fewer iterations)
cargo bench --bench full_bench -- --quick
cargo bench --bench analysis_bench -- --quick
Core Engine (full_bench)¶
Bitstream Operations¶
| Benchmark | Median |
|---|---|
| pack_1m | 811 µs |
| pack_fast_1m | 477 µs |
| pack_dispatch_1m (SIMD) | 34.4 µs |
| popcount_portable_1m | 29.6 µs |
| popcount_simd_1m | 6.13 µs |
| bernoulli_stream_1024 | 4.25 µs |
| bernoulli_packed_1024 | 3.97 µs |
| encoder_64k_steps | 281 µs |
Fixed-Point LIF Neuron¶
| Benchmark | Median |
|---|---|
| lif_10k_steps | 56.3 µs |
| lif_100k_steps | 758 µs |
Dense Layer / Graph / Attention¶
| Benchmark | Median |
|---|---|
| dense_forward_64x32 | 993 µs |
| mixed_dense_q88_q1616_64x32 | 2.245 µs |
| block_floating_dense_q16_64x32 | 10.056 µs |
| mixed_dense_q88_q1616_trap_64x32 | 2.325 µs |
| block_floating_dense_q16_trap_64x32 | 8.669 µs |
| mixed_dense_q88_q1616_envelope_64x32 | 2.322 µs |
| block_floating_dense_q16_envelope_64x32 | 8.748 µs |
| dcls_q88_tent_kernel_16tap | 40.184 ns/sample |
| ultrascale_plus_target_contract_64x32 | 130.836 µs/emit |
| ultrascale_plus_dense_fold_plan_64x32 | 6.661 ns/plan |
| attention_10x16_20x32 | 88.5 µs |
| gnn_20x8_forward | 85.3 µs |
The 2026-06-04 dense precision rows were captured on a workstation under concurrent load and without exclusive CPU core isolation. Use the medians as local regression context and parity evidence. Before citing them as production throughput, rerun the benchmark on isolated cores and record CPU affinity, host-load, governor, and frequency evidence in the raw JSON artefact.
mixed_dense_q88_q1616_64x32 was measured on 2026-06-04 with
taskset -c 10-11 cargo run --manifest-path engine/Cargo.toml --release --example bench_mixed_dense.
The committed raw artefact is
benchmarks/results/local_rust_2026-06-04_mixed_dense.json; the matching Python
reference artefact is benchmarks/results/local_python_2026-06-04_mixed_dense.json.
Both artefacts record safe-workload overflow count 0 and saturating-probe
overflow count 32 for parity with the mixed-dense HDL overflow_vector.
They also record conservative envelope telemetry for comparison with the HDL
abs_bounds_q1616 lanes: Python and Rust safe max absolute bound 531400,
and saturating-probe max bound 17454214414336. The Python benchmark uses
QFormatMixed(scale_per_tensor=False) here so the comparison is the same raw
Q8.8/Q16.16 physical contract implemented by Rust and HDL.
block_floating_dense_q16_64x32 was measured on 2026-06-04 with
taskset -c 10-11 cargo run --manifest-path engine/Cargo.toml --release --example bench_block_floating_dense.
The committed raw artefact is
benchmarks/results/local_rust_2026-06-04_block_floating_dense.json; the
matching Python reference artefact is
benchmarks/results/local_python_2026-06-04_block_floating_dense.json.
Both artefacts record safe-workload overflow count 0 and saturating-probe
overflow count 32 for parity with the block-floating HDL overflow_vector.
They also record conservative envelope telemetry for comparison with the HDL
abs_bounds_q1616 lanes. The Python and Rust block-floating artefacts now use
the same physical BFP workload: mantissa checksum -15, exponent checksum 0,
safe max absolute bound 610816, and saturating-probe max bound
1125865547104256.
The precision trap rows were measured on 2026-06-04 with
taskset -c 10-11 cargo run --manifest-path engine/Cargo.toml --release --example bench_precision_traps.
The committed raw artefact is
benchmarks/results/local_rust_2026-06-04_precision_traps.json; the matching
Python reference artefact is
benchmarks/results/local_python_2026-06-04_precision_traps.json. Both Rust
trap workloads reported 32 saturated outputs on the deterministic 64×32
overflow workload.
The precision envelope rows were measured on 2026-06-04 with
taskset -c 10-11 cargo run --manifest-path engine/Cargo.toml --release --example bench_precision_envelopes.
The committed raw artefact is
benchmarks/results/local_rust_2026-06-04_precision_envelopes.json; the
matching Python reference artefact is
benchmarks/results/local_python_2026-06-04_precision_envelopes.json. Both
Rust envelope workloads reported conservative_overflow_free=true and matched
the Python maximum absolute bounds for the deterministic 64×32 safe workload.
dcls_q88_tent_kernel_16tap was measured on 2026-06-04 with
taskset -c 10-11 cargo run --manifest-path engine/Cargo.toml --release --example bench_dcls_q88.
The committed raw artefact is
benchmarks/results/local_rust_2026-06-04_dcls_q88.json; the matching
Python/PyTorch/SystemVerilog artefact is
benchmarks/results/local_python_2026-06-04_dcls_q88.json. The Rust path
reported overflow_count=0 and active_tap_total=2808700, matching the
Python reference workload and DCLS Q8.8 saturation contract.
ultrascale_plus_target_contract_64x32 was measured on 2026-06-04 with the
Rust benchmark process pinned to CPUs 10-11 inside a runtime cpuset shield. The
committed raw artefact is
benchmarks/results/local_rust_2026-06-04_ultrascale_plus_target.json; the
matching Python/Vivado-Tcl artefact is
benchmarks/results/local_python_2026-06-04_ultrascale_plus_target.json. The
Rust target report deliberately records fits_dsp_budget=false: a 64x32
one-DSP-per-MAC dense graph estimates 2048 DSPs against the ZU3EG budget of
360, so ZU3EG deployment needs a folded/time-multiplexed implementation or a
larger target before any timing-closure claim is valid.
ultrascale_plus_dense_fold_plan_64x32 was measured on 2026-06-04 with the
same runtime cpuset shield. The committed raw artefact is
benchmarks/results/local_rust_2026-06-04_ultrascale_dense_folding.json; the
matching Python/SystemVerilog artefact is
benchmarks/results/local_python_2026-06-04_ultrascale_dense_folding.json.
Both surfaces report the same ZU3EG fold plan: 320 DSPs per compute cycle,
five output rows per cycle, one input fold, seven output groups, and seven
compute cycles for the 64x32 dense contract.
PRNG¶
| Benchmark | Median |
|---|---|
| prng_chacha_fill_1024 | 299 ns |
| prng_xoshiro_fill_1024 | 194 ns |
Neuron Models (full_bench)¶
Legacy Neurons (neuron.rs)¶
| Model | 1k steps | 10k steps | Per step |
|---|---|---|---|
| Lapicque | 2.99 µs | 19.5 µs | 2.0 ns |
| ExpIF | 25.0 µs | 237 µs | 24 ns |
| AdEx | 29.1 µs | 291 µs | 29 ns |
Interneurons (neurons/interneurons.rs) — Interneuron model group¶
| Model | 1k steps | Per step | Sub-steps | Notes |
|---|---|---|---|---|
| VIP | 365 µs | 365 ns | 4 | HH + A-type K+ |
| Martinotti | 530 µs | 530 ns | 4 | Pospischil + M-current |
| SST+ | 552 µs | 552 ns | 4 | Pospischil LTS + T-type + Ih |
| PV+ FS | 4.25 ms | 4.25 µs | 50 | Wang-Buzsáki + Kv3.1 |
| Chandelier | 4.29 ms | 4.29 µs | 50 | WB + Kv1 + Kv3.1 |
| Basket (cerebellar) | 5.60 ms | 5.60 µs | 50 | WB + A-type + KCa |
PV+/Chandelier/Basket use 50 sub-steps (dt=0.01 ms, 0.5 ms per call) for Wang-Buzsáki gating stability. SST/VIP/Martinotti use 4 sub-steps (dt=0.025 ms, 0.1 ms per call) with Pospischil-style gating.
Sensory Neurons (neurons/sensory.rs) — Sensory model group¶
| Model | 10k steps | Per step | Type | Notes |
|---|---|---|---|---|
| Retinal ganglion | 1.08 ms | 108 ns | spiking | Pillow 2005 GLM (stim+history filters) |
| Inner hair cell | 407 µs | 40.7 ns | graded | Meddis vesicle pool + CaV1.3 |
| Merkel cell | 312.93 µs | 31.29 ns | spiking | exact slow adaptation |
| Rod photoreceptor | 663 µs | 66.3 ns | graded | cGMP cascade + Ca²⁺-GC feedback |
| Nociceptor | 259.48 µs | 25.95 ns | spiking | exact membrane/sensitisation relaxation |
| Pacinian corpuscle | 489.26 µs | 48.93 ns | spiking | exact derivative-pressure adaptation |
| Olfactory receptor | 411 µs | 41.1 ns | spiking | cAMP + Ca²⁺/CaM + PDE4 |
Merkel cell remeasured 2026-05-31 after exact membrane/adaptation relaxation and fail-closed state guards. Pacinian corpuscle remeasured 2026-05-31 after exact derivative-pressure membrane/adaptation relaxation and fail-closed state guards. Nociceptor remeasured 2026-05-31 after exact membrane/sensitisation relaxation and fail-closed state guards. Remaining sensory rows retain their previously documented measurement date until each model is remeasured after its own hardening pass.
Motor Neurons (neurons/motor.rs) — Motor model group¶
| Model | 1k steps | Per step | Sub-steps | Notes |
|---|---|---|---|---|
| Alpha motor | 6.48 ms | 6.48 µs | 50 | WB + PIC (h_pic) + AHP + Ca²⁺ |
| Gamma motor | 161 µs (10k) | 16.1 ns | 1 | LIF + adaptation |
| Upper motor | 601.68 µs | 601.68 ns | 4 | Pospischil RS + Ca²⁺, exact gates + conductance membrane |
| Renshaw cell | 4.92 ms | 4.92 µs | 50 | exact WB gates + adaptation |
Renshaw cell remeasured 2026-05-31 after exact gate, adaptation, conductance integration, and fail-closed state guards. | Motor unit | 327 µs (10k) | 32.7 ns | 1 | exact LIF + force model |
Motor unit remeasured 2026-05-31 after exact membrane, adaptation, force-decay, subtype-parity, and fail-closed state guards.
Alpha motor is the most expensive per-step model due to WB gating (50 sub-steps), PIC evaluation, Ca2+ dynamics, and AHP computation at each sub-step.
Cerebellar Neurons (neurons/cerebellar.rs) — Cerebellar model group¶
| Model | Steps | Median | Per step | Sub-steps | Notes |
|---|---|---|---|---|---|
| Granule cell (D'Angelo 2001) | 10k | 7.64 ms | 764 ns | 4 | exact gates + 8 conductances: Na, K_dr, K_A, Ca_T, K_Ca, Ih, leak, tonic GABA |
| Golgi cell (Solinas 2007) | 1k | 2.96 ms | 2.96 µs | 10 | exact gates + 11 currents: Na_t, Na_p, K_dr, K_A, K_M, Ca_T, Ca_N, BK, SK, Ih, leak |
Granule cell remeasured 2026-05-31 after exact gate, calcium, conductance integration, full polyglot parity, and fail-closed state guards.
Golgi cell remeasured 2026-05-31 after exact gate, calcium, conductance integration, full polyglot parity, and fail-closed state guards. | Stellate cell | 1k | 6.08 ms | 6.08 µs | 50 | exact WB gates + exact Kv3.1 + conductance membrane | | Lugaro cell | 10k | 230.56 µs | 23.06 ns | 1 | exact LIF + adaptation + 5-HT | | Unipolar brush cell | 10k | 211.47 µs | 21.15 ns | 1 | LIF + persistent NMDA-like, exact relaxation | | DCN neuron | 1k | 2.71 ms | 2.71 µs | 20 | exact gates + 7 currents: Na_t, Na_p, K_dr, Ca_T, AHP, Ih, leak |
Lugaro cell remeasured 2026-05-31 after exact membrane/adaptation relaxation, Python/Rust/Go/Julia/Rust-safety parity, Mojo metadata alignment, and fail-closed state guards.
Stellate cell remeasured 2026-05-31 after exact Wang-Buzsáki h/n gates, exact Kv3.1 p-gate relaxation, exact conductance-form membrane integration, Python/Rust/Go/Julia/Rust-safety parity, and fail-closed state guards.
DCN neuron remeasured 2026-05-31 after exact gate, calcium, conductance integration, full polyglot parity, and fail-closed state guards.
Granule cell uses four exact-integration sub-steps for D'Angelo-style conductance dynamics and tonic GABA inhibition.
Ion Channel Variant Neurons (neurons/channels.rs) — Ion-channel variant group¶
| Model | Steps | Median | Per step | Sub-steps | Notes |
|---|---|---|---|---|---|
| Persistent Na+ | 1k | 4.61 ms | 4.61 µs | 50 | WB + INaP subthreshold amplification |
| Ih (HCN) | 1k | 5.17 ms | 5.17 µs | 50 | WB + Ih sag/rebound |
| T-type Ca²⁺ | 1k | 9.17 ms | 9.17 µs | 50 | WB + IT rebound bursting |
| A-type K+ | 1k | 4.92 ms | 4.92 µs | 50 | WB + IA onset delay |
| BK (Ca²⁺-K+) | 1k | 5.54 ms | 5.54 µs | 50 | WB + BK fast AHP |
| SK (Ca²⁺-K+) | 1k | 4.35 ms | 4.35 µs | 50 | WB + SK medium AHP |
| NMDA receptor | 1k | 4.81 ms | 4.81 µs | 50 | WB + NMDA + Mg²⁺ block |
Map Neurons (neurons/maps.rs) — Map-neuron model group¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Aihara map | 100k | 3.38 ms | 33.8 ns | Chaotic sigmoid map |
| Kilinc-Bhatt map | 100k | 2.45 ms | 24.5 ns | Adaptive threshold map |
| Ermentrout-Kopell | 100k | 2.90 ms | 29.0 ns | Canonical Type I (theta) |
Population / Mean-Field (neurons/population.rs) — Population and mean-field model group¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Montbrio-Pazo-Roxin | 100k | 1.57 ms | 15.7 ns | Exact mean-field of QIF |
| Brunel balanced | 100k | 1.62 ms | 16.2 ns | E/I balance, 2 rate ODEs |
| TUM (STP) | 100k | 3.03 ms | 30.3 ns | Rate + depression + facilitation, 3 ODEs |
| El Boustani (NMDA) | 100k | 2.74 ms | 27.4 ns | E/I + NMDA gating, 3 ODEs |
Miscellaneous (neurons/misc.rs) — Miscellaneous model group¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Graded synapse | 100k | 1.23 ms | 12.3 ns | Non-spiking, passive RC + release sigmoid |
| Gap junction | 100k | 2.96 ms | 29.6 ns | LIF + electrical synapse + Cx36 rectification |
| FH axon (GHK) | 1k | 5.84 ms | 5.84 µs | Myelinated nerve, GHK driving force, 50 sub-steps |
| Node of Ranvier (MRG) | 1k | 1.46 ms | 1.46 µs | Nav1.6 + INaP + Kv7, 20 sub-steps |
| Myelinated axon | 1k | 1.40 ms | 1.40 µs | MRG node + internode cable |
| Cardiac Purkinje | 1k | 1.05 ms | 1.05 µs | DiFrancesco-Noble, 6 currents, 10 sub-steps |
| Smooth muscle | 1k | 198 µs | 198 ns | CaL + BK + IP3R/SERCA, 4 sub-steps |
| Beta cell | 1k | 196 µs | 196 ns | CaL + K_dr + K_ATP + K_Ca, 4 sub-steps |
Biophysical Models (neurons/biophysical.rs)¶
| Model | Steps | Median | Per step | Sub-steps | Notes |
|---|---|---|---|---|---|
| Hodgkin-Huxley 1952 | 1k | 13.3 ms | 13.3 µs | 100 | Full 4-ODE HH with safe_rate kinetics |
| Wang-Buzsáki 1996 | 1k | 6.94 ms | 6.94 µs | 50 | FS interneuron, m_inf (no m state) |
| Connor-Stevens 1977 | 1k | 71.13 ms | 71.13 µs | 100 | Candidate-first RK4 A-type K+ model |
| Traub-Miles 1991 | 1k | 1.80 ms | 1.80 µs | 10 | CA3 pyramidal + M-current |
| Mainen-Sejnowski 1996 | 1k | 1.86 ms | 1.86 µs | 20 | Two-compartment (soma+axon) |
| Plant R15 1976 | 1k | 1.11 ms | 1.11 µs | 5 | Aplysia parabolic burster + Ca²⁺/KCa |
| De Schutter-Bower 1994 | 1k | 775 µs | 775 ns | 5 | Purkinje cell, Ca²⁺-dependent K |
| Golomb FS 2007 | 1k | 711 µs | 711 ns | 10 | Kv3 fast-spiking interneuron |
| Pospischil 2008 | 1k | 686 µs | 686 ns | 4 | Minimal HH, 5 cortical cell types |
| Destexhe 1993 | 1k | 654 µs | 654 ns | 5 | Thalamocortical + T-current rebound |
| Hill-Tononi 2005 | 1k | 350 µs | 350 ns | 1 | Na-dependent K, sleep/wake |
| Durstewitz 2000 | 1k | 149 µs | 149 ns | 1 | PFC + D1 dopamine + NMDA Mg²⁺ block |
| Bertram 2000 | 1k | 132 µs | 132 ns | 1 | Phantom burster, dual slow K |
| Av-Ron 1991 | 1k | 120 µs | 120 ns | 1 | Cardiac ganglion, Type III burst |
| Yamada 1989 | 1k | 105 µs | 105 ns | 1 | Subcritical Hopf burster |
| Huber-Braun 1998 | 1k | 71.4 µs | 71.4 ns | 1 | Temperature-sensitive cold receptor |
| Prescott 2008 | 10k | 537 µs | 53.7 ns | 1 | Type I/II/III excitability tuning |
| GLIF (Allen) | 10k | 363 µs | 36.3 ns | 1 | LIF + threshold adapt + ASC |
| GIF population | 10k | 368 µs | 36.8 ns | 1 | Escape-rate generalized IF |
| Mihalas-Niebur 2009 | 10k | 123 µs | 12.3 ns | 1 | Generalized IF, 20 spike patterns |
Models with sub-steps have larger per-step cost due to inner ODE integration loops. HH is most expensive (100 sub-steps at dt=0.01 ms). Measured 2026-04-05 on i5-11600K @ 3.90 GHz.
Simple Spiking (neurons/simple_spiking.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| SuperSpike | 10k | 17.8 µs | 1.8 ns | Surrogate gradient LIF |
| Brunel-Wang (LIF+NMDA) | 10k | 23.4 µs | 2.34 ns | AMPA + NMDA Mg²⁺ block + GABA |
| e-prop ALIF | 10k | 28.3 µs | 2.8 ns | Adaptive LIF for e-prop learning |
| Resonate-and-Fire | 10k | 41.8 µs | 4.2 ns | 2D subthreshold oscillator |
| Alpha synapse LIF | 10k | 53.1 µs | 5.3 ns | Excitatory + inhibitory alpha |
| McKean | 10k | 320.24 µs | 32.0 ns | RK4 piecewise-linear McKean |
| Hindmarsh-Rose | 10k | 77.4 µs | 7.7 ns | 3D burster (x,y,z) |
| COBA LIF | 10k | 104 µs | 10.4 ns | Conductance-based with g_e, g_i |
| FitzHugh-Nagumo | 10k | 508.24 µs | 50.824 ns | RK4 two-state qualitative spike model |
| FitzHugh-Rinzel | 10k | 572.65 µs | 57.265 ns | RK4 three-state burster with slow y |
| Wilson HR | 10k | 506.27 µs | 51.4 ns | RK4 polynomial cortical |
| Benda-Herz | 10k | 218 µs | 21.8 ns | Stochastic rate + adaptation |
| Learnable neuron | 10k | 224 µs | 22.4 ns | Learnable parameters (tau, beta) |
| Pernarowski | 10k | 632.87 µs | 63.287 ns | RK4 three-state beta-cell burster |
| Terman-Wang | 10k | 1.2380 ms | 123.80 ns | RK4 LEGION relaxation oscillator |
| Gutkin-Ermentrout | 10k | 289 µs | 28.9 ns | Type I excitability |
| Sherman-Rinzel-Keizer | 1k | 29.0 µs | 29.0 ns | Beta cell burster |
| Chay-Keizer | 1k | 30.5 µs | 30.5 ns | Beta cell with KCa |
| Chay | 1k | 32.8 µs | 32.8 ns | Beta cell 3-variable |
| Morris-Lecar | 10k | 561 µs | 56.1 ns | Ca/K 2D model |
| Butera respiratory | 1k | 341.62 µs | 341.62 ns | bounded RK4 Pre-Bötzinger + INaP |
Most simple spiking models in this table retain their previously documented integration contract. Butera respiratory was remeasured on 2026-05-31 after bounded RK4 hardening across Python, Rust, Go, Julia, and Rust safety surfaces. Older rows in this section retain their 2026-04-05 measurement date until their own model-specific hardening pass is completed.
Rate / Mean-Field (neurons/rate.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Threshold linear rate | 100k | 39.4 µs | 0.4 ns | Rectified linear |
| Sigmoid rate | 100k | 921 µs | 9.2 ns | Sigmoidal firing rate |
| TsodyksMarkram STP | 10k | 86.4 µs | 8.6 ns | Short-term plasticity |
| Parallel spiking | 10k | 60.9 µs | 6.1 ns | Multi-subunit LIF |
| Astrocyte | 10k | 190 µs | 19.0 ns | Ca²⁺/IP3/SERCA dynamics |
| Compte WM | 10k | 232 µs | 23.2 ns | Working memory NMDA |
| LTC | 10k | 409 µs | 40.9 ns | Liquid time constant |
| FractionalLIF | 10k | 739 µs | 73.9 ns | Fractional-order memory kernel |
| LeakyCompeteFire | 10k | 972 µs | 97.2 ns | WTA lateral inhibition (4 units) |
| AmariNeuralField | 10k | 24.2 ms | 2.42 µs | 32-unit neural field |
| Siegert | 100k | 44.4 ms | 444 ns | Transfer function with erf() |
Hardware Neuromorphic (neurons/hardware.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| TrueNorth | 100k | 94.2 µs | 0.9 ns | IBM integer LIF |
| SpiNNaker2 | 100k | 103 µs | 1.0 ns | Fixed-point 3-compartment |
| Akida | 100k | 60.1 µs | 0.6 ns | Event-driven threshold |
| Loihi CUBA | 100k | 342 µs | 3.4 ns | Intel 2-variable integer IF |
| Loihi2 | 100k | 416 µs | 4.2 ns | Intel 3-compartment integer |
| SpiNNaker LIF | 10k | 44.5 µs | 4.5 ns | ARM LIF emulation |
| DPI | 100k | 1.27 ms | 12.7 ns | Differential pair integrator |
| BrainScaleS AdEx | 1k | 31.4 µs | 31.4 ns | Analog accelerated AdEx |
| NeuroGrid | 1k | 43.6 µs | 43.6 ns | Subthreshold analog, 2-comp |
AI-Optimised (neurons/ai_optimized.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Meta-plastic | 10k | 20.9 µs | 2.1 ns | Learning rate adaptation |
| Differentiable surrogate | 10k | 38.4 µs | 3.8 ns | Surrogate gradient SNN |
| Multi-timescale | 10k | 99.1 µs | 9.9 ns | Fast + slow dynamics |
| Predictive coding | 10k | 126 µs | 12.6 ns | Prediction error driven |
| Attention-gated | 10k | 175 µs | 17.5 ns | Gate modulates response |
| Compositional binding | 10k | 184 µs | 18.4 ns | Phase-based variable binding |
| Self-referential | 10k | 404 µs | 40.4 ns | Self-modifying tau |
| Continuous attractor | 10k | 6.58 ms | 658 ns | 16-unit bump attractor |
| Arcane | 10k | 1.37 ms | 137 ns | Deep accumulator + novelty |
Multi-Compartment (neurons/multi_compartment.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Dendrify | 1k | 20.2 µs | 20.2 ns | Simplified dendritic |
| Two-compartment LIF | 10k | 26.9 µs | 2.7 ns | Soma + dendrite LIF |
| Rall cable | 1k | 75.6 µs | 75.6 ns | 5-compartment cable |
| Pinsky-Rinzel | 1k | 122 µs | 122 ns | 2-comp pyramidal |
| Marder STG | 1k | 138 µs | 138 ns | Stomatogastric, 6 currents |
| Booth-Rinzel | 1k | 253 µs | 253 ns | Motoneuron soma+dendrite |
| Hay L5 pyramidal | 1k | 591 µs | 591 ns | 3-comp (soma+trunk+apical) |
Maps — Additional (neurons/maps.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Ibarz-Tanaka | 100k | 803 µs | 8.0 ns | Chaotic bursting map |
| Cazelles | 100k | 955 µs | 9.6 ns | Coupled map lattice |
| Medvedev | 100k | 1.13 ms | 11.3 ns | Reduce-and-fire map |
| Courage-Nekorkin | 100k | 1.34 ms | 13.4 ns | FHN-like map |
| Rulkov | 100k | 1.67 ms | 16.7 ns | Slow-fast bursting map |
| Chialvo | 100k | 1.75 ms | 17.5 ns | 2D excitable map |
Sensory — Additional (neurons/sensory.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Outer hair cell | 10k | 106 µs | 10.6 ns | Prestin electromotility |
| Taste receptor | 10k | 120 µs | 12.0 ns | Gustatory transduction |
| Cone photoreceptor | 10k | 135 µs | 13.5 ns | Colour vision, cGMP cascade |
Trivial IF Variants (neurons/trivial.rs)¶
| Model | Steps | Median | Per step | Notes |
|---|---|---|---|---|
| Perfect integrator | 100k | 206 µs | 2.1 ns | Pure integration, simplest IF |
| KLIF | 100k | 224 µs | 2.2 ns | Kernel-based LIF |
| Complementary LIF | 100k | 265 µs | 2.7 ns | Dual-pathway (v_pos + v_neg) |
| Sigma-delta | 100k | 311 µs | 3.1 ns | Spike-based A/D encoder |
| Integer QIF | 100k | 368 µs | 3.7 ns | Integer arithmetic QIF |
| Inhibitory LIF | 100k | 447 µs | 4.5 ns | Self-inhibiting trace |
| Gated LIF | 100k | 555 µs | 5.6 ns | Input gating mechanism |
| Parametric LIF | 100k | 810 µs | 8.1 ns | Learnable alpha, beta |
| Stochastic LIF | 10k | 85.1 µs | 8.5 ns | Gaussian noise injection |
| Quadratic IF | 100k | 875 µs | 8.7 ns | Quadratic subthreshold |
| Non-resetting LIF | 10k | 165 µs | 16.5 ns | Threshold adaptation, no reset |
| Energy LIF | 10k | 183 µs | 18.3 ns | Energy-budget constrained |
| MAT | 10k | 187 µs | 18.7 ns | Multi-timescale adaptive threshold |
| SFA | 10k | 196 µs | 19.6 ns | Spike frequency adaptation |
| NLIF | 10k | 261 µs | 26.1 ns | Nonlinear leak + recovery |
| Adaptive threshold IF | 10k | 288 µs | 28.8 ns | Dynamic threshold |
| Escape rate | 10k | 517 µs | 51.7 ns | Stochastic, exp() hazard |
| Theta neuron | 100k | 6.97 ms | 69.7 ns | Phase model, cos()/sin() |
| CFC | 100k | 11.6 ms | 116 ns | Closed-form continuous, exp() |
Trivial models are the fastest — no sub-stepping, minimal state. Measured 2026-04-05 on i5-11600K @ 3.90 GHz.
Analysis Modules (analysis_bench)¶
22 modules, 84 benchmark points. Full results in rust-analysis-engine.md.
Highlights (fastest per category)¶
| Category | Function | Input | Median |
|---|---|---|---|
| Basic | firing_rate | 100 spikes | 24 ns |
| Waveform | waveform_amplitude | 64 samples | 39 ns |
| Variability | fano_factor | 100 spikes | 98 ns |
| Basic | spike_times | 100 spikes | 142 ns |
| Distance | isi_distance | 100 spikes | 254 ns |
| Temporal | change_point_detection | 1K spikes | 347 ns |
| Decoding | bayesian_decode | 20n, 8 stim | 982 ns |
| Patterns | spike_directionality | 5K spikes | 68 µs |
| Spectral | power_spectrum | 100K samples | 5.7 ms |
| GPFA | gpfa | 4n, 500t, 5 iter | 5.8 ms |
Scaling Characteristics¶
| Function | 100 → 100K | Scaling |
|---|---|---|
| spike_times | 142 ns → 102 µs | O(n) |
| power_spectrum | 4.0 µs → 5.7 ms | O(n log n) |
| sample_entropy | 46 µs → (n/a) | O(n²) |
| functional_connectivity | — | O(n² × T) |
Benchmark Files¶
| File | Harness | Content |
|---|---|---|
engine/benches/full_bench.rs |
Criterion | Core + neurons (31 benchmarks) |
engine/benches/analysis_bench.rs |
Criterion | 22 analysis modules (84 benchmarks) |
engine/benches/bitstream_bench.rs |
Criterion | Bitstream-specific deep dive |
engine/benches/scaling_bench.rs |
Criterion | Network scaling tests |
Criterion Output¶
JSON results stored in engine/target/criterion/*/new/estimates.json
after each run. Use cargo-criterion or the HTML reports in
engine/target/criterion/report/ for trend analysis.