test(v2): final benchmark campaign - real end-to-end characterization (EXP-0014)
Post-M10, user-requested final benchmark campaign: 6 realistic workloads (16-256 independent neurons in a shared-input dense-layer shape, a random-seeded 2-layer network with real cross-node PSRAM forwarding, and a 6-node 2-hop dependency diamond) x 4 concurrency levels (N_SLOTS=1/2/4/8) through the real, full neural_multiprocessor system (real V1 PSRAM chain, real slot_mem_arbiter). 24/24 runs PASS bit-exact against a software golden model (11,520 individual neuron/ node checks, zero mismatches). Three real bugs found and fixed during the campaign itself (ERR-0009): 1. neural_director.v (M5) had a real RTL bug at N_SLOTS=1 ($clog2(1)=0 makes a replication expression illegal) - never caught because M5-M10 only ever tested N_SLOTS=2/4/8. Fixed with a width-agnostic '0 literal; M5's own testbench re-verified unaffected. 2/3. Two testbench sizing bugs in tb_benchmark_suite.v itself (psram_model DEPTH too small for the Large workload's address range; N_NODES too small for the Stress workload's node-id range, causing a real deadlock via node-id wraparound colliding with an already-DISPATCHED node - a real, honest consequence of DEC-0008's own "no node-slot reclamation" design choice). Headline finding: real parallel scaling is essentially flat beyond N_SLOTS=2 - the single shared PSRAM port saturates at ~91% utilization regardless of slot count, so memory-bound workloads gain only 1.05-1.06x real speedup from N=1 to N=8. Once real POST-P&R Fmax degradation is also factored in, N_SLOTS=4 is measurably 21% SLOWER in real wall-clock time than N_SLOTS=1 for the largest workload tested. N_SLOTS=2 is recommended as the default (DEC-0014, superseding DEC-0012's resource-only "N_SLOTS=8 ceiling" framing for general use). Full 21-section report (every number classified THEORETICAL/ SIMULATED/POST-P&R MEASURED/DERIVED, per the user's own methodology requirements): hardware/v2/docs/benchmarks/ final-benchmark.md Logged: simulation/synthesis/timing/benchmark/decisions (DEC-0014)/ experiments (EXP-0014)/errors (ERR-0009)/development.log, ROADMAP.md updated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
This commit is contained in:
@@ -198,3 +198,80 @@ single-seed inconclusiveness):
|
||||
ACC_WIDTH=24 recommended as the new default (DEC-0013): higher mean
|
||||
Fmax, much tighter variance, fewer resources, same bit-exact
|
||||
correctness.
|
||||
|
||||
[2026-09-05] EXP-0014 -- FINAL BENCHMARK CAMPAIGN: real end-to-end
|
||||
characterization, 6 workloads x 4 configs (N_SLOTS=1/2/4/8), real V1
|
||||
PSRAM chain + real slot_mem_arbiter, full report at
|
||||
hardware/v2/docs/benchmarks/final-benchmark.md. Summary below; see
|
||||
that report for the complete 21-section breakdown.
|
||||
|
||||
Real cycle counts (SIMULATED, Verilator, bit-exact verified against a
|
||||
software golden model for every single neuron/node):
|
||||
|
||||
| Workload | Neurons | N=1 cycles | N=2 cycles | N=4 cycles | N=8 cycles |
|
||||
|-----------------|---------|------------|------------|------------|------------|
|
||||
| A-Small | 16 | 3546 | 2674 | 2743 | 2887 |
|
||||
| B-Medium | 64 | 50442 | 46770 | 46765 | 46935 |
|
||||
| C-Large | 128 | 390154 | 368210 | 368909 | 370835 |
|
||||
| D-Stress | 256 | 780298 | 736402 | 736823 | 738751 |
|
||||
| E-Multilayer | 10 | 2223 | 1689 | 1726 | 1723 |
|
||||
| F-DAG | 6 | 1336 | 1014 | 1014 | 1014 |
|
||||
|
||||
PARALLEL SCALING (speedup(N)=cycles(1)/cycles(N),
|
||||
efficiency(N)=speedup(N)/N -- NOT assumed, computed from the real
|
||||
cycle counts above):
|
||||
|
||||
| Workload | spd N=2 | eff N=2 | spd N=4 | eff N=4 | spd N=8 | eff N=8 |
|
||||
|--------------|---------|---------|---------|---------|---------|---------|
|
||||
| A-Small | 1.33x | 66.3% | 1.29x | 32.3% | 1.23x | 15.4% |
|
||||
| B-Medium | 1.08x | 53.9% | 1.08x | 27.0% | 1.08x | 13.4% |
|
||||
| C-Large | 1.06x | 53.0% | 1.06x | 26.4% | 1.05x | 13.2% |
|
||||
| D-Stress | 1.06x | 53.0% | 1.06x | 26.5% | 1.06x | 13.2% |
|
||||
| E-Multilayer | 1.32x | 65.8% | 1.29x | 32.2% | 1.29x | 16.1% |
|
||||
| F-DAG | 1.32x | 65.9% | 1.32x | 32.9% | 1.32x | 16.5% |
|
||||
|
||||
REAL WALL-CLOCK speedup (cycles / real POST-P&R Fmax, workload
|
||||
D-Stress, the largest/most representative sustained workload):
|
||||
|
||||
| N_SLOTS | Fmax (POST-P&R) | cycles | wall-clock us | speedup vs N=1 |
|
||||
|-----------|-------------------|---------|----------------|------------------|
|
||||
| 1 | 152.46 MHz | 780298 | 5118.05 | 1.000x |
|
||||
| 2 | 142.45 MHz | 736402 | 5169.55 | 0.990x (SLOWER) |
|
||||
| 4 | 113.38 MHz | 736823 | 6498.70 | 0.788x (SLOWER) |
|
||||
|
||||
HEADLINE FINDING: real parallel scaling is essentially FLAT for
|
||||
memory-bound workloads (C/D) regardless of N_SLOTS (1.05-1.06x speedup
|
||||
from 1 to 8 slots) -- the shared PSRAM port (91% utilized regardless
|
||||
of N_SLOTS>=2, see per-workload utilization data in the full report)
|
||||
is the real bottleneck, not compute/slot count. Once real Fmax
|
||||
degradation from added routing congestion is also accounted for
|
||||
(POST-P&R, not assumed), N_SLOTS=4 is actually 21% SLOWER in real
|
||||
wall-clock time than N_SLOTS=1 for the Stress workload -- more
|
||||
hardware parallelism made this workload WORSE, not better. Small/
|
||||
bursty workloads (A/E/F) DO see a real ~1.2-1.3x wall-clock benefit
|
||||
from N_SLOTS=2 (better overlap of registration/scheduling latency),
|
||||
but that benefit saturates immediately and does not extend to N=4/8.
|
||||
|
||||
Per-slot tile distribution (C-Large, N_SLOTS=4) also reveals real,
|
||||
measured scheduling imbalance from the fixed lowest-index-priority
|
||||
arbiter/director (decisions.log DEC-0010): slot 0/1 each delivered
|
||||
1008/1008 real tiles while slot 2/3 delivered only 16/16 -- confirming
|
||||
DEC-0010's original starvation concern with much stronger evidence
|
||||
than EXP-0013's small-scale test could show (see decisions.log
|
||||
DEC-0014 for the resulting recommendation).
|
||||
|
||||
Resource/Fmax summary (all real POST-P&R, full neural_multiprocessor
|
||||
including the real V1 PSRAM chain):
|
||||
|
||||
| N_SLOTS | Fmax (POST-P&R) | LUT4 | FF | DSP | BRAM |
|
||||
|-----------|-------------------|------|------|-----|------|
|
||||
| 1 | 152.46 MHz | 2642 | 2240 | 8 | 0 |
|
||||
| 2 | 142.45 MHz | 4191 | 3659 | 16 | 0 |
|
||||
| 4 | 113.38 MHz | 7552 | 6495 | 32 | 0 |
|
||||
|
||||
Bit-exact functional verification: ALL 6 workloads x ALL 4
|
||||
configurations (24 total workload/config combinations) PASSED
|
||||
bit-exact against a software golden model, zero errors, zero
|
||||
timeouts, zero deadlocks (after fixing the 3 issues in errors.log
|
||||
ERR-0009). No node lost, no node duplicated, correct multi-hop
|
||||
dependency wake-up verified (workload F's 2-hop diamond+fan-in graph).
|
||||
|
||||
@@ -775,3 +775,85 @@ choices, not a mandate to re-synthesize already-logged results).
|
||||
STATUS:
|
||||
ACCEPTED
|
||||
|
||||
DEC-0014
|
||||
|
||||
DATE: 2026-09-05
|
||||
|
||||
DECISION:
|
||||
N_SLOTS=2 is the recommended default/shipped configuration for
|
||||
neural_multiprocessor.v, superseding DEC-0012's earlier "N_SLOTS=8 is
|
||||
the practical ceiling" framing for general use. N_SLOTS=8 remains a
|
||||
REAL, valid, synthesizable configuration (DEC-0012's DSP-budget
|
||||
ceiling finding stands), but the final benchmark campaign (EXP-0014)
|
||||
shows it is not a good DEFAULT given the system's real bottleneck.
|
||||
|
||||
WHY:
|
||||
EXP-0014's real, measured parallel-scaling data (6 workloads x 4
|
||||
configs, real V1 PSRAM chain, real slot_mem_arbiter, real POST-P&R
|
||||
Fmax) shows conclusively that the shared PSRAM port -- not slot count
|
||||
-- is this system's real bottleneck: memory-bound workloads
|
||||
(C-Large/D-Stress) get only 1.05-1.06x real cycle-count speedup from
|
||||
N_SLOTS=1 all the way to N_SLOTS=8 (PSRAM port utilization pegged at
|
||||
~91% regardless), and once real Fmax degradation from added slots is
|
||||
also factored in (152.46 -> 142.45 -> 113.38 MHz for N=1/2/4), the
|
||||
REAL WALL-CLOCK time for the Stress workload is actually 21% WORSE at
|
||||
N_SLOTS=4 than at N_SLOTS=1. More hardware parallelism made this
|
||||
workload class slower, not faster -- adding slots has a real Fmax cost
|
||||
with no compensating real throughput benefit once the shared PSRAM
|
||||
port saturates.
|
||||
|
||||
Small/bursty workloads (A-Small, E-Multilayer, F-DAG) DO show a real,
|
||||
if modest, benefit from N_SLOTS=2 (~1.2-1.3x real wall-clock speedup,
|
||||
from better overlap of per-job registration/scheduling latency across
|
||||
two independently-progressing jobs) -- this benefit already exists at
|
||||
N=2 and does not meaningfully grow at N=4/8 (see EXP-0014's efficiency
|
||||
table: efficiency collapses from 66% at N=2 to 15% at N=8 for exactly
|
||||
this workload class). N_SLOTS=2 is therefore the point that captures
|
||||
essentially all of the real, measured benefit this architecture can
|
||||
deliver from concurrency, without paying N=4/8's real Fmax tax for a
|
||||
benefit that does not materialize.
|
||||
|
||||
EVIDENCE:
|
||||
benchmark.log's EXP-0014 entry: the full 6-workload x 4-config real
|
||||
cycle-count table, the derived speedup/efficiency table, the real
|
||||
wall-clock (cycles / real POST-P&R Fmax) comparison for D-Stress, and
|
||||
the real per-slot tile-delivery imbalance data (slot 0/1 doing ~98% of
|
||||
C-Large's real work at N_SLOTS=4, slot 2/3 essentially idle until the
|
||||
tail) -- all real, Verilator-simulated + nextpnr-ecp5-measured, not
|
||||
assumed.
|
||||
|
||||
ALTERNATIVES:
|
||||
1. Recommend N_SLOTS=8 (DEC-0012's original framing, "practical DSP
|
||||
ceiling"). Rejected as a DEFAULT: DEC-0012 was correct that
|
||||
N_SLOTS=8 is the largest configuration that FITS the chip's DSP
|
||||
budget, but EXP-0014 shows fitting is not the same as being
|
||||
beneficial -- 8 slots deliver essentially the same real throughput
|
||||
as 1 slot for memory-bound work, at a real Fmax cost (92.63 MHz for
|
||||
dataflow_core-only, even lower once the real PSRAM chain is added).
|
||||
N_SLOTS=8 remains available/valid for a FUTURE system that also
|
||||
widens real memory bandwidth (see Alternative 2 below and the final
|
||||
report's Bottleneck Analysis/Limitations sections) but is not the
|
||||
right choice for THIS system as built.
|
||||
2. Solve the real bottleneck (widen/parallelize PSRAM bandwidth --
|
||||
e.g. multiple physical PSRAM banks, one per pair of slots) so that
|
||||
N_SLOTS=4/8 would actually deliver real throughput gains. Rejected
|
||||
for THIS decision: real hardware/board redesign, well beyond a
|
||||
measurement-driven RTL parameter choice -- flagged as the correct
|
||||
FUTURE direction if higher real concurrency is ever needed, not
|
||||
attempted here (§30: no invented results, no un-measured redesigns
|
||||
presented as decided).
|
||||
|
||||
RESULT:
|
||||
N_SLOTS=2 is the recommended default configuration, used as the
|
||||
reference configuration in the final benchmark report and (pending
|
||||
user confirmation) the datasheet. N_SLOTS=1 remains a real,
|
||||
competitive alternative for deployments that are purely large/
|
||||
sustained/memory-bound (equal or better real wall-clock throughput,
|
||||
lower resource cost, highest real Fmax). N_SLOTS=4/8 remain valid,
|
||||
synthesizable, functionally-correct configurations (all bit-exact
|
||||
verified in EXP-0014) but are NOT recommended as a default without a
|
||||
future memory-bandwidth-scaling architecture change.
|
||||
|
||||
STATUS:
|
||||
ACCEPTED
|
||||
|
||||
|
||||
@@ -284,3 +284,30 @@ next_action: nessuna prevista dal mandato (§33 termina a M10) -- la
|
||||
P_IN<8 per N_SLOTS ancora piu' alto (DEC-0012 alternativa #2), riuso
|
||||
dei buffer M3 come cache condivisa (DEC-0009), strumentazione
|
||||
stall%/utilization anche lato V1 (DEC-0011).
|
||||
|
||||
[2026-09-05] Final Benchmark Campaign (post-M10, richiesta diretta
|
||||
utente, non parte del roadmap §33)
|
||||
reason: caratterizzare le prestazioni reali end-to-end di V2 prima di
|
||||
decidere il numero finale di unita' parallele (N_SLOTS) e prima di
|
||||
scrivere il datasheet V2. Nessun test funzionale isolato, nessuna
|
||||
ottimizzazione prima della misura, come esplicitamente richiesto.
|
||||
result: 6 workload realistici (16-256 neuroni indipendenti + un layer
|
||||
multilivello con dati random seed loggato + un DAG a diamante a 2
|
||||
hop) verificati bit-exact su 4 configurazioni (N_SLOTS=1/2/4/8) --
|
||||
24/24 PASS dopo aver risolto 3 problemi reali (errors.log ERR-0009).
|
||||
Scoperta principale: lo scaling parallelo reale e' sostanzialmente
|
||||
PIATTO per i workload memory-bound (1.05-1.06x da N=1 a N=8) -- il
|
||||
vero collo di bottiglia e' la porta PSRAM condivisa (~91% utilizzo
|
||||
indipendentemente da N_SLOTS>=2), non il numero di processori.
|
||||
Considerando anche il vero Fmax POST-P&R (152.46/142.45/113.38 MHz
|
||||
per N=1/2/4), N_SLOTS=4 e' realmente PIU' LENTO del 21% in
|
||||
wall-clock rispetto a N_SLOTS=1 per il workload Stress. Trovato
|
||||
squilibrio reale di scheduling (slot a indice basso fanno quasi
|
||||
tutto il lavoro).
|
||||
errors: vedi errors.log ERR-0009 (1 bug RTL reale in neural_director.v,
|
||||
mai testato prima a N_SLOTS=1; 2 bug nel testbench stesso).
|
||||
decision: vedi decisions.log DEC-0014 -- N_SLOTS=2 raccomandato come
|
||||
configurazione di default, non N_SLOTS=8 (DEC-0012 resta valido come
|
||||
tetto DSP mafisico, non come raccomandazione d'uso generale).
|
||||
next_action: datasheet V2 in stile professionale (richiesta utente),
|
||||
ora sbloccato dalla decisione su N_SLOTS.
|
||||
|
||||
@@ -254,3 +254,76 @@ VERIFICATION: hardware/v2/sim/tb_neural_multiprocessor.v -- 4/4 PASS
|
||||
entirely contained inside the new arbiter module.
|
||||
STATUS: FIXED, verified end-to-end with the real (unmodified) V1
|
||||
PSRAM backend chain and real concurrent multi-slot contention.
|
||||
|
||||
ERR-0009 (one real RTL bug + two testbench bugs, all FOUND AND FIXED
|
||||
during the post-M10 final benchmark campaign -- hardware/v2/sim/
|
||||
tb_benchmark_suite.v)
|
||||
DATE: 2026-09-05
|
||||
|
||||
1. REAL RTL BUG in hardware/v2/rtl/neural_director.v (M5, previously
|
||||
committed/synthesized, never before exercised at N_SLOTS=1):
|
||||
SYMPTOM: Verilator compile error building neural_multiprocessor at
|
||||
N_SLOTS=1 -- "%Error-ZEROREPL: Replication value of 0 is only
|
||||
legal under a concatenation" at three sites.
|
||||
ROOT CAUSE: at N_SLOTS=1, $clog2(1)=0, making
|
||||
`{$clog2(N_SLOTS){1'b0}}` a ZERO-width replication (illegal
|
||||
outside a concatenation, IEEE 1800 11.4.12.1). Every prior
|
||||
milestone (M5-M10) only ever built/simulated/synthesized
|
||||
neural_director at N_SLOTS=2/4/8 -- N_SLOTS=1 was never actually
|
||||
exercised until this benchmark campaign asked for it as the
|
||||
baseline for parallel-scaling measurement.
|
||||
FIX: replaced the three `{$clog2(N_SLOTS){1'b0}}` reset/default
|
||||
expressions with the width-agnostic `'0` literal, which self-sizes
|
||||
correctly for any width including 0. No functional change for
|
||||
N_SLOTS>1 (same reset value).
|
||||
VERIFICATION: hardware/v2/sim/tb_neural_director.v (M5's own
|
||||
testbench, N_SLOTS=2) re-run unchanged -- still 4/4 PASS. All 6
|
||||
benchmark-suite workloads then verified bit-exact at N_SLOTS=1
|
||||
through the real full neural_multiprocessor + real V1 PSRAM chain.
|
||||
STATUS: FIXED, verified at both N_SLOTS=1 (newly working) and
|
||||
N_SLOTS=2 (no regression).
|
||||
|
||||
2. TESTBENCH BUG (tb_benchmark_suite.v, not RTL): psram_model's own
|
||||
DEPTH parameter (524288... originally 131072 words = 256KB) was
|
||||
smaller than the byte address range some workloads actually use
|
||||
(workload C-Large's own result region alone needs word address
|
||||
~0x24000, beyond a 131072-word/0x20000 DEPTH) -- a silent
|
||||
out-of-bounds array access, same bug CLASS already documented once
|
||||
before (an M5 testbench bug, sim_byte_mem's too-small DEPTH).
|
||||
SYMPTOM: every C-Large neuron read back real=0 (poison value never
|
||||
overwritten) despite the RTL reporting all 128 jobs completed.
|
||||
FIX: DEPTH raised to 524288 words (1MB byte-addressable), computed
|
||||
to safely exceed the highest byte address used by any of the six
|
||||
workloads' regions (~0xB2006, workload F).
|
||||
VERIFICATION: C-Large re-run bit-exact PASS after the fix.
|
||||
|
||||
3. TESTBENCH BUG (tb_benchmark_suite.v, not RTL): N_NODES=512 was
|
||||
smaller than the highest node_id actually used -- workload D-Stress
|
||||
(node_base=400, 256 neurons) reaches node_id 655, which silently
|
||||
WRAPS at the 9-bit node_id width (512 -> truncates to 0), colliding
|
||||
with workload A's node_id 0, already permanently ST_DISPATCHED (M6's
|
||||
own design never reclaims dispatched node slots, decisions.log
|
||||
DEC-0008). register_node's blocking `while(!reg_ready)` wait then
|
||||
deadlocks forever (reg_ready never returns true for an already-
|
||||
occupied, non-EMPTY node_id).
|
||||
SYMPTOM: simulation appeared to hang indefinitely partway through
|
||||
D-Stress's node registration (confirmed via periodic progress
|
||||
`$display` instrumentation added specifically to localize this --
|
||||
registration silently stopped advancing past neuron index 112).
|
||||
FIX: N_NODES raised to 1024, comfortably exceeding every workload's
|
||||
own node_id range.
|
||||
VERIFICATION: D-Stress re-run bit-exact PASS (256/256 neurons) after
|
||||
the fix, no further hangs at any N_SLOTS configuration (1/2/4/8).
|
||||
NOTE: this is a REAL, honest consequence of DEC-0008's own design
|
||||
choice (no node-slot reclamation) -- a long-running system that
|
||||
keeps registering new nodes without ever reusing old (DISPATCHED)
|
||||
ids will eventually exhaust its node_id space and deadlock exactly
|
||||
this way. Flagged in the final benchmark report's Limitations
|
||||
section, not just fixed and forgotten.
|
||||
|
||||
DIAGNOSIS METHOD (bug 3): periodic `$display` progress heartbeats
|
||||
added to the registration loop and the completion watchdog loop,
|
||||
run under `stdbuf -oL` to force line-buffered (not block-buffered)
|
||||
output for real-time visibility, isolating the exact neuron index
|
||||
where progress stopped advancing -- the same "trace real signals,
|
||||
don't guess" discipline used throughout this whole project.
|
||||
|
||||
@@ -513,3 +513,41 @@ next_action: none mandated by docs/v2-description.md's own roadmap
|
||||
buffer reuse as a shared cache once real bandwidth pressure is
|
||||
measured (DEC-0009), and V1-side stall%/utilization instrumentation
|
||||
to complete the M9 table's V1 column (DEC-0011).
|
||||
|
||||
[2026-09-05] EXP-0014 -- FINAL BENCHMARK CAMPAIGN (post-M10, real
|
||||
end-to-end characterization, not an isolated functional test -- see
|
||||
hardware/v2/docs/benchmarks/final-benchmark.md for the full 21-section
|
||||
report)
|
||||
test: hardware/v2/sim/tb_benchmark_suite.v -- 6 representative
|
||||
workloads (Small/Medium/Large/Stress/Multilayer/DAG, up to 256
|
||||
independent neurons and a 6-node 2-hop dependency diamond), each
|
||||
bit-exact verified against a software golden model, run through the
|
||||
REAL full neural_multiprocessor.v (real V1 PSRAM chain, real
|
||||
slot_mem_arbiter) at N_SLOTS=1, 2, 4, and 8 (24 total workload/config
|
||||
runs)
|
||||
simulator: Verilator 5.050 (--binary --timing)
|
||||
PASS/FAIL:
|
||||
SIMULATED: 24/24 workload/config combinations PASS bit-exact, zero
|
||||
errors, zero timeouts, zero deadlocks -- AFTER fixing 3 real issues
|
||||
found during this campaign (errors.log ERR-0009: 1 real RTL bug in
|
||||
neural_director.v never exercised at N_SLOTS=1 before, 2 testbench
|
||||
sizing bugs in tb_benchmark_suite.v itself).
|
||||
SYNTHESIZED + POST-P&R (real, no harness needed, full system incl.
|
||||
real PSRAM pins): N_SLOTS=1 -> 152.46 MHz/LUT4=2642/FF=2240/DSP=8;
|
||||
N_SLOTS=2 -> 142.45 MHz/LUT4=4191/FF=3659/DSP=16 (EXP-0009);
|
||||
N_SLOTS=4 -> 113.38 MHz/LUT4=7552/FF=6495/DSP=32.
|
||||
errors: see errors.log ERR-0009 (1 real RTL bug + 2 testbench bugs,
|
||||
all found and fixed).
|
||||
decision: see decisions.log DEC-0014 -- N_SLOTS=2 recommended as the
|
||||
default configuration (supersedes DEC-0012's N_SLOTS=8 "practical
|
||||
ceiling" framing for general use): real measured parallel scaling is
|
||||
essentially flat for memory-bound workloads regardless of N_SLOTS
|
||||
(shared PSRAM port is the real bottleneck, ~91% utilized regardless
|
||||
of N_SLOTS>=2), and N_SLOTS=4 is actually 21% SLOWER in real
|
||||
wall-clock time than N_SLOTS=1 for the Stress workload once real
|
||||
Fmax degradation is accounted for.
|
||||
next_action: none mandated by the roadmap (this campaign was
|
||||
requested directly by the user, post-M10, as a final
|
||||
characterization before deciding N_SLOTS and writing the V2
|
||||
datasheet). Full report: hardware/v2/docs/benchmarks/final-
|
||||
benchmark.md.
|
||||
|
||||
@@ -118,3 +118,19 @@ note: slot 0's higher utilization is at least partly explained by it
|
||||
harmful priority starvation on its own; see decisions.log DEC-0010's
|
||||
original fairness deferral, now informed by this real (if small)
|
||||
data point.
|
||||
|
||||
[2026-09-05] EXP-0014 -- hardware/v2/sim/tb_benchmark_suite.v (final
|
||||
benchmark campaign, post-M10)
|
||||
test: 6 workloads (16/64/128/256 independent neurons + 10-node
|
||||
multilayer with random data + 6-node 2-hop DAG), each bit-exact
|
||||
verified against a software golden model, at N_SLOTS=1/2/4/8 (24
|
||||
total runs) through the real full neural_multiprocessor.v (real V1
|
||||
PSRAM chain, real slot_mem_arbiter)
|
||||
simulator: Verilator 5.050 (--binary --timing)
|
||||
PASS/FAIL: 24/24 PASS bit-exact (11,520 individual neuron/node
|
||||
comparisons, zero mismatches) after fixing 3 real issues found
|
||||
during this campaign (errors.log ERR-0009: 1 real RTL bug in
|
||||
neural_director.v at N_SLOTS=1, never exercised before; 2 testbench
|
||||
sizing bugs -- psram_model DEPTH too small, N_NODES too small
|
||||
causing a real node-id wraparound deadlock)
|
||||
full data/analysis: hardware/v2/docs/benchmarks/final-benchmark.md
|
||||
|
||||
@@ -87,3 +87,13 @@ LUT4=6439 CCU2C=996 TRELLIS_FF=9053 MULT18X18D=64 (64/72=88.9% of
|
||||
DP16KD=0 (expected, DEC-0009). CHECK: 0 problems (same benign
|
||||
"multiple conflicting drivers" warnings as every other neural_processor
|
||||
instantiation since EXP-0001).
|
||||
|
||||
[2026-09-05] EXP-0014 -- neural_multiprocessor N_SLOTS=1 and N_SLOTS=4
|
||||
(final benchmark campaign, real standalone top-level synthesis, no
|
||||
harness needed -- same 157-pin real-PSRAM-pin methodology as N_SLOTS=2,
|
||||
EXP-0009)
|
||||
N_SLOTS=1: LUT4=2642 CCU2C=200 TRELLIS_FF=2240 MULT18X18D=8 DP16KD=0
|
||||
N_SLOTS=4: LUT4=7552 CCU2C=768 TRELLIS_FF=6495 MULT18X18D=32 DP16KD=0
|
||||
(N_SLOTS=2 reference, EXP-0009: LUT4=4191 CCU2C=388 FF=3659 DSP=16 DP16KD=0)
|
||||
CHECK: 0 problems on both, same benign warnings as every other
|
||||
neural_processor instantiation since EXP-0001.
|
||||
|
||||
@@ -101,3 +101,17 @@ Conclusion: over 6 real placement seeds, ACC_WIDTH=24 has a HIGHER
|
||||
EXP-0002's single-seed result (176.21 < 183.12, i.e. ACC=24 looked
|
||||
WORSE) was placement-seed noise, not a real trend. See decisions.log
|
||||
DEC-0013.
|
||||
|
||||
[2026-09-05] EXP-0014 -- neural_multiprocessor N_SLOTS=1 and N_SLOTS=4
|
||||
(final benchmark campaign), real nextpnr-ecp5 --45k --package CABGA381
|
||||
--speed 8 --freq 80 --lpf-allow-unconstrained
|
||||
N_SLOTS=1: Fmax = 152.46 MHz -- PASS at 80MHz
|
||||
N_SLOTS=4: Fmax = 113.38 MHz -- PASS at 80MHz
|
||||
(N_SLOTS=2 reference, EXP-0009: 142.45 MHz)
|
||||
Full real N_SLOTS sweep for the complete system (dataflow_core + real
|
||||
V1 PSRAM chain + slot_mem_arbiter): 1 -> 152.46 MHz, 2 -> 142.45 MHz,
|
||||
4 -> 113.38 MHz. Fmax falls monotonically as N_SLOTS grows (more
|
||||
routing congestion around the shared director/dependency_manager/
|
||||
arbiter hub), exactly the same trend already observed for
|
||||
dataflow_core alone (M7/M10, EXP-0008/EXP-0011) but now measured for
|
||||
the REAL FULL SYSTEM including the real PSRAM backend.
|
||||
|
||||
Reference in New Issue
Block a user