Stage O-C: the event-driven DoE driver -- DOE returns to the prompt, EV-DONE chains the trials, MU-WAIT-ALL deleted (FABRIC-3.9.0 §3/§7.4)
- DOE sets up, JOINs EV-DONE and starts trial 1, then returns. Each trial
births and sends WL-RUN only; completion arrives as the OS's EV-DONE.
- ON-DONE counts this campaign's own workers while active; the last one
ends the trial (KILL all, marker, persist) and starts the next, or
finishes (HB-OFF, UNJOIN, MU-CAMPAIGN: complete). MU-WAIT-ALL is gone;
the start/end cycle goes through MU-END-XT.
- WL-DONE-ARGS removed from all ten workload capsules; lint passes.
Smoke campaign (amd64, 1 rep, rows off per Captain Bob): DOE returns, the
prompt answers mid-trial, all 6 trials chain on events, fail=0 each,
28/28 born/killed/departed, MU-CAMPAIGN: complete in ~61 min. Standard
sequence passes on all three ISAs (with the xHCI fix it exposed, df150e86).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
df150e8626
commit
ac42cf36b5
+49
-38
@@ -29,14 +29,13 @@ Block 5045
|
||||
ENDCASE ;
|
||||
|
||||
Block 5046
|
||||
( 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. )
|
||||
( FABRIC-3.9.8 O-C: event-driven. Workers are born defs-only )
|
||||
( and each is SENT one job: WL-RUN, nothing else. Its end )
|
||||
( reaches Hera as the OS's own EV-DONE (ON-DONE, block 5054) )
|
||||
( -- no job text SENDs anything, and Hera never waits. )
|
||||
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" ;
|
||||
VARIABLE MU-ACTIVE
|
||||
: MU-JOB ( -- c-addr u ) S" WL-RUN" ;
|
||||
|
||||
Block 5047
|
||||
: MU-WORKER-NAME ( n -- c-addr u )
|
||||
@@ -66,9 +65,9 @@ Block 5049
|
||||
VARIABLE MU-FAIL-COUNT
|
||||
: 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 ;
|
||||
MU-FAIL-COUNT @ 1+ MU-FAIL-COUNT !
|
||||
MU-DONE-COUNT @ 1+ MU-DONE-COUNT ! THEN ;
|
||||
: MU-KILL-WORKER ( worker-n -- ) MU-WORKER-NAME KILL ;
|
||||
CREATE MU-RUN-MATRIX MU-MAX-RUNS CELLS ALLOT
|
||||
: MU-MATRIX! ( val idx -- ) CELLS MU-RUN-MATRIX + ! ;
|
||||
: MU-MATRIX@ ( idx -- val ) CELLS MU-RUN-MATRIX + @ ;
|
||||
@@ -119,45 +118,57 @@ Block 5052
|
||||
MU-NW @ 0 DO
|
||||
I MU-SEND-WORKER
|
||||
LOOP ;
|
||||
: MU-WAIT-ALL ( -- )
|
||||
BEGIN MU-DONE-COUNT @ MU-NW @ < WHILE REPEAT ;
|
||||
( O-C: MU-WAIT-ALL is gone. The trial's end runs through )
|
||||
( MU-END-XT, set after MU-END-TRIAL is defined, breaking the )
|
||||
( start -> send -> end -> start cycle in definition order. )
|
||||
VARIABLE MU-END-XT
|
||||
: MU-CHECK-END ( -- )
|
||||
MU-DONE-COUNT @ MU-NW @ < 0= IF MU-END-XT @ EXECUTE THEN ;
|
||||
|
||||
Block 5053
|
||||
: MU-KILL-ALL ( -- )
|
||||
MU-NW @ 0 DO
|
||||
I MU-KILL-WORKER
|
||||
LOOP ;
|
||||
: MU-RUN-TRIAL ( cfg rep run-id -- )
|
||||
MU-RUN-ID ! MU-REP ! MU-CFG !
|
||||
( O-C: a trial STARTS -- births, sends, returns. It ends in )
|
||||
( MU-END-TRIAL, run from ON-DONE when the last worker is done. )
|
||||
: MU-START-TRIAL ( cfg rep -- )
|
||||
MU-REP ! MU-CFG !
|
||||
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-SEND-ALL
|
||||
MU-WAIT-ALL
|
||||
MU-KILL-ALL
|
||||
MU-EMIT-TRIAL-MARKER ;
|
||||
MU-BIRTH-ALL MU-SEND-ALL
|
||||
MU-CHECK-END ;
|
||||
|
||||
Block 5054
|
||||
: MU-CAMPAIGN-STEP ( idx -- )
|
||||
MU-MATRIX@
|
||||
DUP MU-NREPS @ /
|
||||
SWAP MU-NREPS @ MOD
|
||||
MU-RUN-ID @
|
||||
MU-RUN-TRIAL
|
||||
MU-RUN-ID @ 1+ MU-RUN-ID ! ;
|
||||
VARIABLE MU-IDX
|
||||
: MU-START-IDX ( -- )
|
||||
MU-IDX @ MU-MATRIX@
|
||||
DUP MU-NREPS @ / SWAP MU-NREPS @ MOD
|
||||
MU-START-TRIAL ;
|
||||
: MU-FINISH ( -- )
|
||||
0 MU-ACTIVE ! HB-OFF EV-DONE UNJOIN DROP
|
||||
." MU-CAMPAIGN: complete" CR ;
|
||||
: MU-END-TRIAL ( -- )
|
||||
MU-KILL-ALL MU-EMIT-TRIAL-MARKER
|
||||
MU-RUN-ID @ 1+ MU-RUN-ID ! MU-IDX @ 1+ MU-IDX !
|
||||
MU-IDX @ MU-N-RUNS @ < IF MU-START-IDX
|
||||
ELSE MU-FINISH THEN ;
|
||||
' MU-END-TRIAL MU-END-XT !
|
||||
|
||||
Block 5055
|
||||
( EV-DONE handler: count only this campaign's own workers, )
|
||||
( mu0..mu7, and only while a campaign is running. )
|
||||
: MU-OURS? ( c-addr u -- f )
|
||||
2 < IF DROP 0 EXIT THEN
|
||||
DUP C@ 109 = SWAP 1+ C@ 117 = AND ;
|
||||
: ON-DONE ( c-addr u -- )
|
||||
MU-ACTIVE @ 0= IF 2DROP EXIT THEN
|
||||
MU-OURS? 0= IF EXIT THEN
|
||||
MU-DONE-COUNT @ 1+ MU-DONE-COUNT ! MU-CHECK-END ;
|
||||
: MU-EXEC-CAMPAIGN ( seed n-reps start-idx -- )
|
||||
>R
|
||||
DUP MU-NREPS !
|
||||
MU-N-CFG * MU-N-RUNS !
|
||||
SEED
|
||||
MU-INIT-MATRIX MU-SHUFFLE
|
||||
HB-ON
|
||||
R@ MU-RUN-ID !
|
||||
MU-N-RUNS @ R> DO
|
||||
I MU-CAMPAIGN-STEP
|
||||
LOOP
|
||||
HB-OFF
|
||||
." MU-CAMPAIGN: complete" CR ;
|
||||
MU-IDX ! DUP MU-NREPS ! MU-N-CFG * MU-N-RUNS ! SEED
|
||||
MU-INIT-MATRIX MU-SHUFFLE HB-ON MU-IDX @ MU-RUN-ID !
|
||||
MU-IDX @ MU-N-RUNS @ < IF
|
||||
EV-DONE JOIN DROP 1 MU-ACTIVE ! MU-START-IDX
|
||||
ELSE MU-FINISH THEN ;
|
||||
|
||||
Reference in New Issue
Block a user