From ed28ecec2062ba19cd63d2d34454d78ccb7ceb55 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Tue, 6 Oct 2026 04:00:12 +0100 Subject: Batch executor stage 5 (024): a recurrence (a local a round reads before it sets it, every set of it x = e of x, numbers, fields, states, the loop's value and locals the block does not set, in no branch's way; its sets planned PLAN_RECUR) runs ahead of the batch round by round as steps decoded once a batch, as the executor computes them (a round's fault gives the batch back), leaving its value at each other read in each lane; the batch's pass skips its sets. matmul's, knapsack's and join's table loops batch: matmul 50 to 46 ms. module_tier makes loops with a recurrence (x1) ahead of appends, sets and sums (seeds 1, 2, 3, 5, 23 alike); RECUR_SOURCE: two updates a round, a division by 0 and a product past the numbers at some round, under work and memory budgets --- core/module-run.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'core/module-run.h') diff --git a/core/module-run.h b/core/module-run.h index 0bc97eb..8945115 100644 --- a/core/module-run.h +++ b/core/module-run.h @@ -55,8 +55,8 @@ static inline bool number_op(uint8_t op, double a, double b, double *out) { } /* An item's or a key's op->plan: its cell a text; a FIND joined to the ITEM_GET after it; a FIND whose row an ITEM_SET - * takes; a LOOP whose block a batch may run (module-batch.c). */ -enum { PLAN_TEXT = 1, PLAN_JOINED = 2, PLAN_ROW = 4, PLAN_BATCH = 8 }; + * takes; a LOOP whose block a batch may run (module-batch.c); a LOCAL_STORE ending x = e of a recurrence in such a block. */ +enum { PLAN_TEXT = 1, PLAN_JOINED = 2, PLAN_ROW = 4, PLAN_BATCH = 8, PLAN_RECUR = 16 }; /* An item instruction's argument: its list and its field. */ static inline uint32_t list_of(uint32_t arg) { return arg & 0xFFFF; } @@ -168,6 +168,11 @@ int pure_batch_run(Frame *, Loop *, unsigned *done); * (x its local, op ADD, MIN or MAX, e computed above x with no branch or * loop): a reduction across a batch's rounds. *at: op's pc. */ bool pure_batch_reduces(const PureModule *, uint32_t pc, uint32_t end, uint32_t *at); +/* Whether the LOCAL_STORE at s, in a block from start setting the locals + * of set (slot: its loop's), ends x = e with e made of x, numbers, fields, + * states, the loop's value and locals the block does not set: a recurrence + * run round by round ahead of a batch. *from: where its statement begins. */ +bool pure_batch_recurs(const PureModule *, uint32_t s, uint32_t start, const uint64_t *set, unsigned slot, uint32_t *from); /* Where a list keeps what compiled code reads of it (module-list.c owns the * layout and says where): its item count, its key set (the words, how many, -- cgit v1.2.3