Stage H: DoE rebuilt on BIRTH/SEND/KILL, defs-only workloads; work heat floor on contact (FABRIC-3.8 §3.9, §3.13.7)

Workload capsules the DoE births are definitions only; each defines WL-RUN
(its old birth-time work plus its entry word twice) and WL-DONE-ARGS. The
driver births N workers, SENDs each 'WL-RUN WL-DONE-ARGS SEND', waits in an
ordinary loop for N MU-DONE messages, KILLs them (parked idle), and emits
the marker. The serialized VM-EXEC round-robin is gone.

Kernel: no switch checkpoint after a payload's last word; work heat is the
assessed per-beat charge, and a VM gaining work is raised to the busy set's
floor (Captain Bob's ruling) -- fixes a live stall where a busy-waiting Hera
never yielded, without serializing batch starts.

Evidence: cfg-4 rows spread evenly over Hera and all 8 worker slots (44k
switches); full cfg-4 trials on amd64/aarch64/riscv64 end fail=0 with 8/8
KILL dead; Stage G interleave byte-identical on all three. Acceptance:
dict_hash unchanged, relay 3, idle growth 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-23 23:48:16 -04:00
co-authored by Claude Opus 5.5
parent 81def7b4a5
commit f152a91099
29 changed files with 165584 additions and 153 deletions
+18 -31
View File
@@ -29,19 +29,14 @@ Block 5045
ENDCASE ;
Block 5046
: WL-ENTRY ( idx -- c-addr u )
CASE
0 OF S" RUN-TRANSPOSE" ENDOF
1 OF S" MICRO-BURST" ENDOF
2 OF S" RUN-SAW" ENDOF
3 OF S" DUAL-SINE" ENDOF
4 OF S" RUN-PI" ENDOF
5 OF S" CHAOS-FIELD" ENDOF
6 OF S" RUN-OMNI" ENDOF
7 OF S" RUN-MMUL" ENDOF
8 OF S" RUN-FIB" ENDOF
9 OF S" RUN-SAW" ENDOF
ENDCASE ;
( FABRIC-3.8 3.9 Stage H: workers are born defs-only and )
( each is SENT one job. WL-RUN, defined in every workload )
( capsule, is its old birth-time tail plus its entry word )
( twice, as the old two VM-EXEC passes did. The LAST word )
( of the job SENDs MU-DONE back to Hera, who counts them. )
VARIABLE MU-DONE-COUNT
: MU-DONE ( -- ) MU-DONE-COUNT @ 1+ MU-DONE-COUNT ! ;
: MU-JOB ( -- c-addr u ) S" WL-RUN WL-DONE-ARGS SEND" ;
Block 5047
: MU-WORKER-NAME ( n -- c-addr u )
@@ -66,17 +61,12 @@ Block 5048
WL-CAPSULE
MU-TMP-NC @ MU-TMP-NU @
WORKER-BIRTH ;
: MU-TOUCH-WORKER ( wl-idx worker-n -- )
MU-WORKER-NAME MU-TMP-NU ! MU-TMP-NC !
WL-ENTRY
MU-TMP-NC @ MU-TMP-NU @
VM-EXEC ;
Block 5049
VARIABLE MU-FAIL-COUNT
: MU-CHECK-WORKER ( worker-n -- )
MU-WORKER-NAME VM-ERROR?
IF MU-FAIL-COUNT @ 1+ MU-FAIL-COUNT ! THEN ;
: MU-SEND-WORKER ( worker-n -- )
MU-JOB ROT MU-WORKER-NAME SEND 0= IF
MU-FAIL-COUNT @ 1+ MU-FAIL-COUNT ! MU-DONE THEN ;
: MU-KILL-WORKER ( worker-n -- )
MU-WORKER-NAME KILL ;
CREATE MU-RUN-MATRIX MU-MAX-RUNS CELLS ALLOT
@@ -125,14 +115,12 @@ Block 5052
MU-NW @ 0 DO
MU-MODE @ I MU-WL-FOR I MU-BIRTH-WORKER DROP
LOOP ;
: MU-TOUCH-ALL ( -- )
: MU-SEND-ALL ( -- )
MU-NW @ 0 DO
MU-MODE @ I MU-WL-FOR I MU-TOUCH-WORKER
LOOP ;
: MU-CHECK-ALL ( -- )
MU-NW @ 0 DO
I MU-CHECK-WORKER
I MU-SEND-WORKER
LOOP ;
: MU-WAIT-ALL ( -- )
BEGIN MU-DONE-COUNT @ MU-NW @ < WHILE REPEAT ;
Block 5053
: MU-KILL-ALL ( -- )
@@ -141,13 +129,12 @@ Block 5053
LOOP ;
: MU-RUN-TRIAL ( cfg rep run-id -- )
MU-RUN-ID ! MU-REP ! MU-CFG !
0 MU-FAIL-COUNT !
0 MU-FAIL-COUNT ! 0 MU-DONE-COUNT !
MU-CFG @ MU-CONC-OF MU-NW !
MU-CFG @ MU-MODE-OF MU-MODE !
MU-BIRTH-ALL
MU-TOUCH-ALL
MU-TOUCH-ALL
MU-CHECK-ALL
MU-SEND-ALL
MU-WAIT-ALL
MU-KILL-ALL
MU-EMIT-TRIAL-MARKER ;