From 1f8faacd65b5dc85192d05b68bd75a780962c4a6 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Tue, 6 Oct 2026 11:47:40 +0100 Subject: Batch: filters, if !L.has(k) { a line appending } in a batch's block or in a walk's spread items (PLAN_FILTER; L only grown there, one filter a list, none in a nested LOOP): each round asked as the batch opens, its code run in the rounds it said no to, those rounds kept (k and the appends' cells) and asked again at the end in the rounds' order (L as it is and what the kept rounds before add), the rest added at once (pure_list_add_many) once the lists take them and the memory budget all of them (else, or a key added there already, the batch gives its rounds back); a list such a filter grows read in the block only as no earlier round's item would change (its count in the guard, its first, a place when it has no key, a field by key). Keys kept as bits (pure_list_bits) asked by a loop of lanes, fields of a DENSE list found at their keys (pure_list_dense); an outer lane's affine value in four bytes. The suite's BFS batched: PURE_JIT=0 93 to 39.6 ms (the compiled code 7.7, C 10). module_tier's walks filter d (seeds 1, 2, 3, 5, 23 alike: 5,806 filters decided in seed 23's); GRAPH_SOURCE: a graph built by a filter, searched twice, marks whose filter adds another key (EXISTS), under work and memory budgets --- core/module-list.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'core/module-list.h') diff --git a/core/module-list.h b/core/module-list.h index c44366d..e2007a0 100644 --- a/core/module-list.h +++ b/core/module-list.h @@ -186,6 +186,14 @@ bool pure_list_cells(PureList *, PureCells *); bool pure_list_widen(PureList *, unsigned field, uint8_t bytes); /* A batch set cells of it in place: it changed (its version). */ void pure_list_touched(PureList *); +/* A list keyed by a number whose keys are a set of bits (every key a whole + * number below its words * 64: pure_list_contains's): the bits, for a + * batch's HAS (docs/design/024); false when its keys are kept otherwise. */ +bool pure_list_bits(const PureList *, const uint64_t **bits, size_t *words); +/* A DENSE list's cells at their keys (count: the keys its columns hold; + * width as pure_list_cells's; a key there when its bit is), for a batch's + * fields found by key; false when it is not DENSE. */ +bool pure_list_dense(const PureList *, PureCells *); /* Whether n items of numbers and bools go into an event's list at once * (pure_list_add_many) as one after another they would go, the list * staying in its form: a FLAT list not keyed (key -1), at its end; a DENSE -- cgit v1.2.3