@graphty/webgpu-graph-algorithms 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -52
- package/dist/browser.js +1 -1
- package/dist/chunks/{context-CRbw2Wyo.js → context-BXqgCifx.js} +225 -33
- package/dist/chunks/context-BXqgCifx.js.map +1 -0
- package/dist/node.js +1 -1
- package/dist/src/accelerator.d.ts +12 -10
- package/dist/src/accelerator.d.ts.map +1 -1
- package/dist/src/accelerator.js +32 -10
- package/dist/src/accelerator.js.map +1 -1
- package/dist/src/algorithms/components.d.ts.map +1 -1
- package/dist/src/algorithms/components.js +12 -13
- package/dist/src/algorithms/components.js.map +1 -1
- package/dist/src/algorithms/degree.d.ts +6 -8
- package/dist/src/algorithms/degree.d.ts.map +1 -1
- package/dist/src/algorithms/degree.js +58 -35
- package/dist/src/algorithms/degree.js.map +1 -1
- package/dist/src/algorithms/pagerank.d.ts.map +1 -1
- package/dist/src/algorithms/pagerank.js +16 -14
- package/dist/src/algorithms/pagerank.js.map +1 -1
- package/dist/src/algorithms/power-iteration.d.ts +2 -2
- package/dist/src/algorithms/power-iteration.d.ts.map +1 -1
- package/dist/src/algorithms/power-iteration.js +17 -14
- package/dist/src/algorithms/power-iteration.js.map +1 -1
- package/dist/src/constants.d.ts +85 -8
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +85 -8
- package/dist/src/constants.js.map +1 -1
- package/dist/src/errors.d.ts +3 -2
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +2 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +10 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/kernel/dispatch.d.ts +8 -3
- package/dist/src/kernel/dispatch.d.ts.map +1 -1
- package/dist/src/kernel/dispatch.js +18 -7
- package/dist/src/kernel/dispatch.js.map +1 -1
- package/dist/src/kernel/kernel.d.ts +30 -1
- package/dist/src/kernel/kernel.d.ts.map +1 -1
- package/dist/src/kernel/kernel.js +49 -5
- package/dist/src/kernel/kernel.js.map +1 -1
- package/dist/src/kernel/prelude.d.ts.map +1 -1
- package/dist/src/kernel/prelude.js +9 -1
- package/dist/src/kernel/prelude.js.map +1 -1
- package/dist/src/kernel/profiler.d.ts +15 -3
- package/dist/src/kernel/profiler.d.ts.map +1 -1
- package/dist/src/kernel/profiler.js +27 -4
- package/dist/src/kernel/profiler.js.map +1 -1
- package/dist/src/kernels.d.ts +18 -8
- package/dist/src/kernels.d.ts.map +1 -1
- package/dist/src/kernels.js +345 -22
- package/dist/src/kernels.js.map +1 -1
- package/dist/src/layouts/calibrate.d.ts +51 -0
- package/dist/src/layouts/calibrate.d.ts.map +1 -0
- package/dist/src/layouts/calibrate.js +172 -0
- package/dist/src/layouts/calibrate.js.map +1 -0
- package/dist/src/layouts/force-simulation.d.ts +42 -5
- package/dist/src/layouts/force-simulation.d.ts.map +1 -1
- package/dist/src/layouts/force-simulation.js +84 -22
- package/dist/src/layouts/force-simulation.js.map +1 -1
- package/dist/src/layouts/forceatlas2.d.ts +107 -38
- package/dist/src/layouts/forceatlas2.d.ts.map +1 -1
- package/dist/src/layouts/forceatlas2.js +297 -290
- package/dist/src/layouts/forceatlas2.js.map +1 -1
- package/dist/src/layouts/fruchterman-reingold.d.ts +241 -0
- package/dist/src/layouts/fruchterman-reingold.d.ts.map +1 -0
- package/dist/src/layouts/fruchterman-reingold.js +739 -0
- package/dist/src/layouts/fruchterman-reingold.js.map +1 -0
- package/dist/src/layouts/model-common.d.ts +140 -0
- package/dist/src/layouts/model-common.d.ts.map +1 -0
- package/dist/src/layouts/model-common.js +269 -0
- package/dist/src/layouts/model-common.js.map +1 -0
- package/dist/src/layouts/repulsion-grid.d.ts +152 -0
- package/dist/src/layouts/repulsion-grid.d.ts.map +1 -0
- package/dist/src/layouts/repulsion-grid.js +318 -0
- package/dist/src/layouts/repulsion-grid.js.map +1 -0
- package/dist/src/layouts/spring-electrical.d.ts +224 -0
- package/dist/src/layouts/spring-electrical.d.ts.map +1 -0
- package/dist/src/layouts/spring-electrical.js +665 -0
- package/dist/src/layouts/spring-electrical.js.map +1 -0
- package/dist/src/memory/residency.d.ts +6 -2
- package/dist/src/memory/residency.d.ts.map +1 -1
- package/dist/src/memory/residency.js +84 -14
- package/dist/src/memory/residency.js.map +1 -1
- package/dist/src/primitives/core-shape.d.ts +38 -2
- package/dist/src/primitives/core-shape.d.ts.map +1 -1
- package/dist/src/primitives/core-shape.js +71 -3
- package/dist/src/primitives/core-shape.js.map +1 -1
- package/dist/src/primitives/grid-pyramid.d.ts +71 -0
- package/dist/src/primitives/grid-pyramid.d.ts.map +1 -0
- package/dist/src/primitives/grid-pyramid.js +143 -0
- package/dist/src/primitives/grid-pyramid.js.map +1 -0
- package/dist/src/primitives/grid.d.ts +118 -0
- package/dist/src/primitives/grid.d.ts.map +1 -0
- package/dist/src/primitives/grid.js +225 -0
- package/dist/src/primitives/grid.js.map +1 -0
- package/dist/src/primitives/histogram.d.ts +67 -0
- package/dist/src/primitives/histogram.d.ts.map +1 -0
- package/dist/src/primitives/histogram.js +190 -0
- package/dist/src/primitives/histogram.js.map +1 -0
- package/dist/src/primitives/radix-sort.d.ts +75 -0
- package/dist/src/primitives/radix-sort.d.ts.map +1 -0
- package/dist/src/primitives/radix-sort.js +168 -0
- package/dist/src/primitives/radix-sort.js.map +1 -0
- package/dist/src/primitives/scan.d.ts +44 -0
- package/dist/src/primitives/scan.d.ts.map +1 -0
- package/dist/src/primitives/scan.js +151 -0
- package/dist/src/primitives/scan.js.map +1 -0
- package/dist/src/primitives/segmented-reduce.d.ts +25 -17
- package/dist/src/primitives/segmented-reduce.d.ts.map +1 -1
- package/dist/src/primitives/segmented-reduce.js +166 -47
- package/dist/src/primitives/segmented-reduce.js.map +1 -1
- package/dist/src/primitives/spmv.d.ts +18 -14
- package/dist/src/primitives/spmv.d.ts.map +1 -1
- package/dist/src/primitives/spmv.js +94 -58
- package/dist/src/primitives/spmv.js.map +1 -1
- package/dist/src/primitives/verify.d.ts +49 -0
- package/dist/src/primitives/verify.d.ts.map +1 -0
- package/dist/src/primitives/verify.js +229 -0
- package/dist/src/primitives/verify.js.map +1 -0
- package/dist/src/types/accelerator.d.ts +7 -3
- package/dist/src/types/accelerator.d.ts.map +1 -1
- package/dist/src/types/context.d.ts +53 -0
- package/dist/src/types/context.d.ts.map +1 -1
- package/dist/src/types/layout.d.ts +52 -0
- package/dist/src/types/layout.d.ts.map +1 -1
- package/dist/src/types/options.d.ts +43 -1
- package/dist/src/types/options.d.ts.map +1 -1
- package/dist/src/wgsl/counting-scatter.wgsl.d.ts +8 -0
- package/dist/src/wgsl/counting-scatter.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/counting-scatter.wgsl.js +17 -0
- package/dist/src/wgsl/counting-scatter.wgsl.js.map +1 -0
- package/dist/src/wgsl/fa2-attraction.wgsl.d.ts +23 -8
- package/dist/src/wgsl/fa2-attraction.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-attraction.wgsl.js +100 -17
- package/dist/src/wgsl/fa2-attraction.wgsl.js.map +1 -1
- package/dist/src/wgsl/fa2-integrate.wgsl.d.ts +7 -2
- package/dist/src/wgsl/fa2-integrate.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-integrate.wgsl.js +28 -2
- package/dist/src/wgsl/fa2-integrate.wgsl.js.map +1 -1
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.d.ts +4 -2
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.js +14 -5
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.js.map +1 -1
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.d.ts +12 -1
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.js +54 -0
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.js.map +1 -1
- package/dist/src/wgsl/grid-cell-key.wgsl.d.ts +8 -0
- package/dist/src/wgsl/grid-cell-key.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/grid-cell-key.wgsl.js +30 -0
- package/dist/src/wgsl/grid-cell-key.wgsl.js.map +1 -0
- package/dist/src/wgsl/grid-centroid-hub.wgsl.d.ts +8 -0
- package/dist/src/wgsl/grid-centroid-hub.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/grid-centroid-hub.wgsl.js +29 -0
- package/dist/src/wgsl/grid-centroid-hub.wgsl.js.map +1 -0
- package/dist/src/wgsl/grid-centroid.wgsl.d.ts +8 -0
- package/dist/src/wgsl/grid-centroid.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/grid-centroid.wgsl.js +29 -0
- package/dist/src/wgsl/grid-centroid.wgsl.js.map +1 -0
- package/dist/src/wgsl/grid-downsample.wgsl.d.ts +7 -0
- package/dist/src/wgsl/grid-downsample.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/grid-downsample.wgsl.js +28 -0
- package/dist/src/wgsl/grid-downsample.wgsl.js.map +1 -0
- package/dist/src/wgsl/grid-far-field.wgsl.d.ts +13 -0
- package/dist/src/wgsl/grid-far-field.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/grid-far-field.wgsl.js +98 -0
- package/dist/src/wgsl/grid-far-field.wgsl.js.map +1 -0
- package/dist/src/wgsl/grid-near-field.wgsl.d.ts +19 -0
- package/dist/src/wgsl/grid-near-field.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/grid-near-field.wgsl.js +129 -0
- package/dist/src/wgsl/grid-near-field.wgsl.js.map +1 -0
- package/dist/src/wgsl/histogram.wgsl.d.ts +7 -0
- package/dist/src/wgsl/histogram.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/histogram.wgsl.js +15 -0
- package/dist/src/wgsl/histogram.wgsl.js.map +1 -0
- package/dist/src/wgsl/indirect-finalize.wgsl.d.ts +8 -0
- package/dist/src/wgsl/indirect-finalize.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/indirect-finalize.wgsl.js +26 -0
- package/dist/src/wgsl/indirect-finalize.wgsl.js.map +1 -0
- package/dist/src/wgsl/radix-hist.wgsl.d.ts +9 -0
- package/dist/src/wgsl/radix-hist.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/radix-hist.wgsl.js +31 -0
- package/dist/src/wgsl/radix-hist.wgsl.js.map +1 -0
- package/dist/src/wgsl/radix-scatter.wgsl.d.ts +9 -0
- package/dist/src/wgsl/radix-scatter.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/radix-scatter.wgsl.js +40 -0
- package/dist/src/wgsl/radix-scatter.wgsl.js.map +1 -0
- package/dist/src/wgsl/scan-add.wgsl.d.ts +6 -0
- package/dist/src/wgsl/scan-add.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/scan-add.wgsl.js +14 -0
- package/dist/src/wgsl/scan-add.wgsl.js.map +1 -0
- package/dist/src/wgsl/scan-block.wgsl.d.ts +8 -0
- package/dist/src/wgsl/scan-block.wgsl.d.ts.map +1 -0
- package/dist/src/wgsl/scan-block.wgsl.js +30 -0
- package/dist/src/wgsl/scan-block.wgsl.js.map +1 -0
- package/dist/src/wgsl/segmented-reduce.wgsl.d.ts +22 -8
- package/dist/src/wgsl/segmented-reduce.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/segmented-reduce.wgsl.js +84 -15
- package/dist/src/wgsl/segmented-reduce.wgsl.js.map +1 -1
- package/dist/src/wgsl/spmv-pull.wgsl.d.ts +22 -11
- package/dist/src/wgsl/spmv-pull.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/spmv-pull.wgsl.js +110 -36
- package/dist/src/wgsl/spmv-pull.wgsl.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/webgpu-graph-algorithms.js +5016 -1130
- package/dist/webgpu-graph-algorithms.js.map +1 -1
- package/package.json +10 -7
- package/src/accelerator.ts +46 -12
- package/src/algorithms/components.ts +12 -16
- package/src/algorithms/degree.ts +58 -43
- package/src/algorithms/pagerank.ts +20 -18
- package/src/algorithms/power-iteration.ts +19 -18
- package/src/constants.ts +108 -8
- package/src/errors.ts +3 -1
- package/src/index.ts +25 -5
- package/src/kernel/dispatch.ts +18 -7
- package/src/kernel/kernel.ts +59 -5
- package/src/kernel/prelude.ts +15 -0
- package/src/kernel/profiler.ts +28 -4
- package/src/kernels.ts +378 -24
- package/src/layouts/calibrate.ts +187 -0
- package/src/layouts/force-simulation.ts +111 -26
- package/src/layouts/forceatlas2.ts +346 -324
- package/src/layouts/fruchterman-reingold.ts +918 -0
- package/src/layouts/model-common.ts +323 -0
- package/src/layouts/repulsion-grid.ts +451 -0
- package/src/layouts/spring-electrical.ts +845 -0
- package/src/memory/residency.ts +126 -20
- package/src/primitives/core-shape.ts +91 -4
- package/src/primitives/grid-pyramid.ts +221 -0
- package/src/primitives/grid.ts +349 -0
- package/src/primitives/histogram.ts +273 -0
- package/src/primitives/radix-sort.ts +246 -0
- package/src/primitives/scan.ts +197 -0
- package/src/primitives/segmented-reduce.ts +214 -56
- package/src/primitives/spmv.ts +125 -65
- package/src/primitives/verify.ts +249 -0
- package/src/types/accelerator.ts +15 -3
- package/src/types/context.ts +56 -0
- package/src/types/layout.ts +58 -0
- package/src/types/options.ts +45 -1
- package/src/wgsl/counting-scatter.wgsl.ts +16 -0
- package/src/wgsl/fa2-attraction.wgsl.ts +100 -17
- package/src/wgsl/fa2-integrate.wgsl.ts +28 -2
- package/src/wgsl/fa2-repulsion-exact.wgsl.ts +14 -5
- package/src/wgsl/fa2-stats-finalize.wgsl.ts +54 -0
- package/src/wgsl/grid-cell-key.wgsl.ts +29 -0
- package/src/wgsl/grid-centroid-hub.wgsl.ts +28 -0
- package/src/wgsl/grid-centroid.wgsl.ts +28 -0
- package/src/wgsl/grid-downsample.wgsl.ts +27 -0
- package/src/wgsl/grid-far-field.wgsl.ts +97 -0
- package/src/wgsl/grid-near-field.wgsl.ts +128 -0
- package/src/wgsl/histogram.wgsl.ts +14 -0
- package/src/wgsl/indirect-finalize.wgsl.ts +25 -0
- package/src/wgsl/radix-hist.wgsl.ts +30 -0
- package/src/wgsl/radix-scatter.wgsl.ts +39 -0
- package/src/wgsl/scan-add.wgsl.ts +13 -0
- package/src/wgsl/scan-block.wgsl.ts +29 -0
- package/src/wgsl/segmented-reduce.wgsl.ts +84 -15
- package/src/wgsl/spmv-pull.wgsl.ts +110 -36
- package/dist/chunks/context-CRbw2Wyo.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fruchterman-reingold.js","sourceRoot":"","sources":["../../../src/layouts/fruchterman-reingold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The option and value helpers every force model's resolver and stats decoder share (P5 PD-7): moved verbatim
|
|
3
|
+
* from src/layouts/forceatlas2.ts (P3-T2) so the Fruchterman-Reingold and spring-electrical models of P5 neither
|
|
4
|
+
* copy them nor import a sibling model; and, since P4-T6, the K2 tier binding and dispatch the three models share
|
|
5
|
+
* (`bindAttraction` / `recordAttraction`, P4 PD-7), so every model's bind() / recordIteration() calls one function
|
|
6
|
+
* instead of holding its own copy. Layout zone.
|
|
7
|
+
*/
|
|
8
|
+
import { WebGpuGraphError } from "../errors.js";
|
|
9
|
+
import { type DispatchPlan } from "../kernel/dispatch.js";
|
|
10
|
+
import { type BoundKernel, type Kernel } from "../kernel/kernel.js";
|
|
11
|
+
import { type UniformValues } from "../kernel/struct-block.js";
|
|
12
|
+
import { type Binding } from "../types/memory.js";
|
|
13
|
+
import { type ModelResources } from "./force-simulation.js";
|
|
14
|
+
/** An override record as the kernel layer takes it. */
|
|
15
|
+
export type Overrides = Readonly<Record<string, number | boolean>>;
|
|
16
|
+
/** The K2 (`fa2-attraction`) dispatches of one iteration: `[kernel, bind group, plan]` in dispatch order TIER 2, TIER 1, TIER 0 (only the tiers whose row range is non-empty). */
|
|
17
|
+
export interface AttractionBound {
|
|
18
|
+
readonly kernels: readonly (readonly [Kernel, BoundKernel, DispatchPlan])[];
|
|
19
|
+
}
|
|
20
|
+
/** The group-1 / group-2 bindings of K2 every tier dispatch shares: `pos` (vec4f, mass in w), `force` (stride-3 f32) and the Fa2Params slot of the UniformRing. @public the bindings parameter of bindAttraction */
|
|
21
|
+
export interface AttractionBindings {
|
|
22
|
+
readonly pos: Binding;
|
|
23
|
+
readonly force: Binding;
|
|
24
|
+
readonly params: Binding;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Compiles (through the cache) and binds the `fa2-attraction` pipelines a load needs against the graph group and
|
|
28
|
+
* { pos, force, P } (P4 PD-7): TIER 0 always; TIER 1 when a row of degree 32..1023 exists (`[hiEnd, midEnd)` is
|
|
29
|
+
* non-empty); TIER 2 when a row of degree >= 1024 exists (`hiEnd > 0`). The dispatch plans are one workgroup per
|
|
30
|
+
* row for TIER 2, `WG / 32` rows per workgroup for TIER 1 and one row per thread for TIER 0, over each tier's row
|
|
31
|
+
* count (the K2 body reads its range from `Fa2Params.hiEnd` / `midEnd` / `tierStart` / `tierEnd`). The TIER 1 / 2
|
|
32
|
+
* pipelines compile on the first load that needs them (a one-time cost at that load); a model's `specs()` lists
|
|
33
|
+
* the TIER 0 spec only, because it has no `n` to know which tiers a load needs. A device whose workgroup size is
|
|
34
|
+
* below 32 cannot fold the mid tier: E_UNSUPPORTED { feature: "fa2-attraction.tiers" } when a permutation is bound.
|
|
35
|
+
* @param resources - the load's resources (core, tiers, weights, pipelines, caps)
|
|
36
|
+
* @param k2 - the K2 override record of the model (LINLOG / DISTRIBUTED / LAW plus USE_PERM / HAS_WEIGHTS; TIER is overwritten per dispatch)
|
|
37
|
+
* @param bindings - the group-1 / group-2 bindings shared by every tier
|
|
38
|
+
* @returns the bound dispatches in order TIER 2, 1, 0
|
|
39
|
+
*/
|
|
40
|
+
export declare function bindAttraction(resources: ModelResources, k2: Overrides, bindings: AttractionBindings): Promise<AttractionBound>;
|
|
41
|
+
/**
|
|
42
|
+
* Records the K2 dispatches of one iteration in order TIER 2, TIER 1, TIER 0 with the iteration's params offset.
|
|
43
|
+
* @param pass - the open compute pass
|
|
44
|
+
* @param bound - what bindAttraction produced
|
|
45
|
+
* @param paramsOffset - the UniformRing byte offset of this iteration's Fa2Params
|
|
46
|
+
*/
|
|
47
|
+
export declare function recordAttraction(pass: GPUComputePassEncoder, bound: AttractionBound, paramsOffset: number): void;
|
|
48
|
+
/** Bytes of the stride-3 f32 force arrays per node. */
|
|
49
|
+
export declare const FORCE_BYTES_PER_NODE = 12;
|
|
50
|
+
/** The name of the model-owned FillParams buffer (a BufferSpec, reached through ModelResources.buffer). */
|
|
51
|
+
export declare const FILL_PARAMS_BUFFER = "fillParams";
|
|
52
|
+
/**
|
|
53
|
+
* A short, safe rendering of an argument value for error messages (never String() on an object).
|
|
54
|
+
* @param value - the value
|
|
55
|
+
* @returns the rendering
|
|
56
|
+
*/
|
|
57
|
+
export declare function describeValue(value: unknown): string;
|
|
58
|
+
/**
|
|
59
|
+
* The E_INVALID_ARGUMENT error of an option check (contract 3.1: { argument, value, expected }).
|
|
60
|
+
* @param argument - the option name
|
|
61
|
+
* @param value - the value given
|
|
62
|
+
* @param expected - what was expected
|
|
63
|
+
* @returns the error (not thrown here)
|
|
64
|
+
*/
|
|
65
|
+
export declare function invalid(argument: string, value: unknown, expected: string): WebGpuGraphError;
|
|
66
|
+
/**
|
|
67
|
+
* A numeric option: the given value when defined, else the fallback; validated by `check` (the value is checked as
|
|
68
|
+
* `unknown` so a JS caller's string or object is E_INVALID_ARGUMENT too).
|
|
69
|
+
* @param name - the option name
|
|
70
|
+
* @param given - the value given (undefined = absent)
|
|
71
|
+
* @param fallback - the previous record's value or the default
|
|
72
|
+
* @param check - the range predicate over a finite number
|
|
73
|
+
* @param expected - the range in words (the error message)
|
|
74
|
+
* @returns the value
|
|
75
|
+
*/
|
|
76
|
+
export declare function pickNumber(name: string, given: number | undefined, fallback: number, check: (value: number) => boolean, expected: string): number;
|
|
77
|
+
/**
|
|
78
|
+
* A boolean option: the given value when defined, else the fallback; a non-boolean is E_INVALID_ARGUMENT.
|
|
79
|
+
* @param name - the option name
|
|
80
|
+
* @param given - the value given (undefined = absent)
|
|
81
|
+
* @param fallback - the previous record's value or the default
|
|
82
|
+
* @returns the value
|
|
83
|
+
*/
|
|
84
|
+
export declare function pickBoolean(name: string, given: boolean | undefined, fallback: boolean): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* The layout dimension: 2 or 3.
|
|
87
|
+
* @param given - the value given (undefined = absent)
|
|
88
|
+
* @param fallback - the previous record's value or the default
|
|
89
|
+
* @returns 2 or 3
|
|
90
|
+
*/
|
|
91
|
+
export declare function pickDim(given: 2 | 3 | undefined, fallback: 2 | 3): 2 | 3;
|
|
92
|
+
/**
|
|
93
|
+
* The scene-unit center: an array-like of 2 (z = 0) or 3 finite numbers.
|
|
94
|
+
* @param given - the value given (undefined = absent)
|
|
95
|
+
* @param fallback - the previous record's value or the default
|
|
96
|
+
* @returns the three components
|
|
97
|
+
*/
|
|
98
|
+
export declare function pickCenter(given: ArrayLike<number> | undefined, fallback: readonly [number, number, number]): readonly [number, number, number];
|
|
99
|
+
/**
|
|
100
|
+
* The seed: a finite number, or null (unseeded; 0 keeps the port's "0 = unseeded" quirk through the Lcg).
|
|
101
|
+
* @param given - the value given (undefined = absent)
|
|
102
|
+
* @param fallback - the previous record's value or the default
|
|
103
|
+
* @returns the seed or null
|
|
104
|
+
*/
|
|
105
|
+
export declare function pickSeed(given: number | null | undefined, fallback: number | null): number | null;
|
|
106
|
+
/**
|
|
107
|
+
* Integer >= 1.
|
|
108
|
+
* @param value - a finite number
|
|
109
|
+
* @returns whether it is a positive integer
|
|
110
|
+
*/
|
|
111
|
+
export declare function isPositiveInteger(value: number): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* The u32 word written into Fa2Params.seed: 0 for null, else floor(|seed|) mod 2^32.
|
|
114
|
+
* @param seed - the resolved seed
|
|
115
|
+
* @returns the u32 value
|
|
116
|
+
*/
|
|
117
|
+
export declare function seedWord(seed: number | null): number;
|
|
118
|
+
/**
|
|
119
|
+
* A scalar field of a block's read() result.
|
|
120
|
+
* @param values - the values read
|
|
121
|
+
* @param name - the field name
|
|
122
|
+
* @returns the number
|
|
123
|
+
*/
|
|
124
|
+
export declare function scalar(values: UniformValues, name: string): number;
|
|
125
|
+
/**
|
|
126
|
+
* A vector field of a block's read() result.
|
|
127
|
+
* @param values - the values read
|
|
128
|
+
* @param name - the field name
|
|
129
|
+
* @returns the components
|
|
130
|
+
*/
|
|
131
|
+
export declare function vector(values: UniformValues, name: string): readonly number[];
|
|
132
|
+
/**
|
|
133
|
+
* The override record a kernel gets: its defaults overlaid with the values present in the merged set (contract 3.9:
|
|
134
|
+
* a name a spec does not declare is rejected at compose time, so nothing else is passed through).
|
|
135
|
+
* @param merged - the merged override set of the model (plus USE_PERM / HAS_WEIGHTS from the simulation)
|
|
136
|
+
* @param defaults - the kernel's accepted names with their defaults
|
|
137
|
+
* @returns the kernel's override record, every accepted name explicit
|
|
138
|
+
*/
|
|
139
|
+
export declare function subset(merged: Overrides, defaults: Overrides): Overrides;
|
|
140
|
+
//# sourceMappingURL=model-common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-common.d.ts","sourceRoot":"","sources":["../../../src/layouts/model-common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The option and value helpers every force model's resolver and stats decoder share (P5 PD-7): moved verbatim
|
|
3
|
+
* from src/layouts/forceatlas2.ts (P3-T2) so the Fruchterman-Reingold and spring-electrical models of P5 neither
|
|
4
|
+
* copy them nor import a sibling model; and, since P4-T6, the K2 tier binding and dispatch the three models share
|
|
5
|
+
* (`bindAttraction` / `recordAttraction`, P4 PD-7), so every model's bind() / recordIteration() calls one function
|
|
6
|
+
* instead of holding its own copy. Layout zone.
|
|
7
|
+
*/
|
|
8
|
+
import { WebGpuGraphError } from "../errors.js";
|
|
9
|
+
import { plan1d } from "../kernel/dispatch.js";
|
|
10
|
+
import { graphBindings, kernelSpec } from "../kernels.js";
|
|
11
|
+
import { MID_TIER_LANES } from "../primitives/core-shape.js";
|
|
12
|
+
/**
|
|
13
|
+
* Compiles (through the cache) and binds the `fa2-attraction` pipelines a load needs against the graph group and
|
|
14
|
+
* { pos, force, P } (P4 PD-7): TIER 0 always; TIER 1 when a row of degree 32..1023 exists (`[hiEnd, midEnd)` is
|
|
15
|
+
* non-empty); TIER 2 when a row of degree >= 1024 exists (`hiEnd > 0`). The dispatch plans are one workgroup per
|
|
16
|
+
* row for TIER 2, `WG / 32` rows per workgroup for TIER 1 and one row per thread for TIER 0, over each tier's row
|
|
17
|
+
* count (the K2 body reads its range from `Fa2Params.hiEnd` / `midEnd` / `tierStart` / `tierEnd`). The TIER 1 / 2
|
|
18
|
+
* pipelines compile on the first load that needs them (a one-time cost at that load); a model's `specs()` lists
|
|
19
|
+
* the TIER 0 spec only, because it has no `n` to know which tiers a load needs. A device whose workgroup size is
|
|
20
|
+
* below 32 cannot fold the mid tier: E_UNSUPPORTED { feature: "fa2-attraction.tiers" } when a permutation is bound.
|
|
21
|
+
* @param resources - the load's resources (core, tiers, weights, pipelines, caps)
|
|
22
|
+
* @param k2 - the K2 override record of the model (LINLOG / DISTRIBUTED / LAW plus USE_PERM / HAS_WEIGHTS; TIER is overwritten per dispatch)
|
|
23
|
+
* @param bindings - the group-1 / group-2 bindings shared by every tier
|
|
24
|
+
* @returns the bound dispatches in order TIER 2, 1, 0
|
|
25
|
+
*/
|
|
26
|
+
export async function bindAttraction(resources, k2, bindings) {
|
|
27
|
+
const { n, core, perm, tiers, weights, pipelines, caps } = resources;
|
|
28
|
+
const so = tiers?.segmentOffsets;
|
|
29
|
+
const hiEnd = so?.[1] ?? 0;
|
|
30
|
+
const midEnd = so?.[2] ?? 0;
|
|
31
|
+
const ranges = [
|
|
32
|
+
{ tier: 2, rows: hiEnd },
|
|
33
|
+
{ tier: 1, rows: midEnd - hiEnd },
|
|
34
|
+
{ tier: 0, rows: n - midEnd },
|
|
35
|
+
];
|
|
36
|
+
const group = {
|
|
37
|
+
...graphBindings(core, perm, weights),
|
|
38
|
+
pos: bindings.pos,
|
|
39
|
+
force: bindings.force,
|
|
40
|
+
P: bindings.params,
|
|
41
|
+
};
|
|
42
|
+
const kernels = [];
|
|
43
|
+
for (const { tier, rows } of ranges) {
|
|
44
|
+
if (tier !== 0 && rows <= 0) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
// sequential on purpose: PipelineCache.get compiles inside a validation scope, one stack per device
|
|
48
|
+
const kernel = await pipelines.kernel(kernelSpec("fa2-attraction", { ...k2, TIER: tier }));
|
|
49
|
+
const wg = kernel.workgroupSize;
|
|
50
|
+
if (tier !== 0 && wg < MID_TIER_LANES) {
|
|
51
|
+
throw new WebGpuGraphError("E_UNSUPPORTED", `fa2-attraction: the mid tier folds ${MID_TIER_LANES} lanes per row, more than the workgroup size ${wg}`, { feature: "fa2-attraction.tiers" });
|
|
52
|
+
}
|
|
53
|
+
if (rows <= 0) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
let rowsPerGroup = wg;
|
|
57
|
+
if (tier === 2) {
|
|
58
|
+
rowsPerGroup = 1;
|
|
59
|
+
}
|
|
60
|
+
else if (tier === 1) {
|
|
61
|
+
rowsPerGroup = wg / MID_TIER_LANES;
|
|
62
|
+
}
|
|
63
|
+
kernels.push([kernel, kernel.bind(group), plan1d(rows, rowsPerGroup, caps)]);
|
|
64
|
+
}
|
|
65
|
+
return { kernels };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Records the K2 dispatches of one iteration in order TIER 2, TIER 1, TIER 0 with the iteration's params offset.
|
|
69
|
+
* @param pass - the open compute pass
|
|
70
|
+
* @param bound - what bindAttraction produced
|
|
71
|
+
* @param paramsOffset - the UniformRing byte offset of this iteration's Fa2Params
|
|
72
|
+
*/
|
|
73
|
+
export function recordAttraction(pass, bound, paramsOffset) {
|
|
74
|
+
for (const [kernel, group, plan] of bound.kernels) {
|
|
75
|
+
kernel.dispatch(pass, group, plan, [paramsOffset]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Bytes of the stride-3 f32 force arrays per node. */
|
|
79
|
+
export const FORCE_BYTES_PER_NODE = 12;
|
|
80
|
+
/** The name of the model-owned FillParams buffer (a BufferSpec, reached through ModelResources.buffer). */
|
|
81
|
+
export const FILL_PARAMS_BUFFER = "fillParams";
|
|
82
|
+
/** 2^32, the modulus of the u32 seed word (computed with `%`, never a bitwise operator). */
|
|
83
|
+
const U32_MODULUS = 4294967296;
|
|
84
|
+
/**
|
|
85
|
+
* A short, safe rendering of an argument value for error messages (never String() on an object).
|
|
86
|
+
* @param value - the value
|
|
87
|
+
* @returns the rendering
|
|
88
|
+
*/
|
|
89
|
+
export function describeValue(value) {
|
|
90
|
+
if (value === null) {
|
|
91
|
+
return "null";
|
|
92
|
+
}
|
|
93
|
+
if (typeof value === "number" || typeof value === "boolean" || typeof value === "string") {
|
|
94
|
+
return String(value);
|
|
95
|
+
}
|
|
96
|
+
if (typeof value === "undefined") {
|
|
97
|
+
return "undefined";
|
|
98
|
+
}
|
|
99
|
+
if (typeof value === "object" && "length" in value && typeof value.length === "number") {
|
|
100
|
+
return `[${value.length} values]`;
|
|
101
|
+
}
|
|
102
|
+
return typeof value;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The E_INVALID_ARGUMENT error of an option check (contract 3.1: { argument, value, expected }).
|
|
106
|
+
* @param argument - the option name
|
|
107
|
+
* @param value - the value given
|
|
108
|
+
* @param expected - what was expected
|
|
109
|
+
* @returns the error (not thrown here)
|
|
110
|
+
*/
|
|
111
|
+
export function invalid(argument, value, expected) {
|
|
112
|
+
return new WebGpuGraphError("E_INVALID_ARGUMENT", `${argument} must be ${expected}; got ${describeValue(value)}`, {
|
|
113
|
+
argument,
|
|
114
|
+
value,
|
|
115
|
+
expected,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* A numeric option: the given value when defined, else the fallback; validated by `check` (the value is checked as
|
|
120
|
+
* `unknown` so a JS caller's string or object is E_INVALID_ARGUMENT too).
|
|
121
|
+
* @param name - the option name
|
|
122
|
+
* @param given - the value given (undefined = absent)
|
|
123
|
+
* @param fallback - the previous record's value or the default
|
|
124
|
+
* @param check - the range predicate over a finite number
|
|
125
|
+
* @param expected - the range in words (the error message)
|
|
126
|
+
* @returns the value
|
|
127
|
+
*/
|
|
128
|
+
export function pickNumber(name, given, fallback, check, expected) {
|
|
129
|
+
const value = given === undefined ? fallback : given;
|
|
130
|
+
if (typeof value !== "number" || !Number.isFinite(value) || !check(value)) {
|
|
131
|
+
throw invalid(name, value, expected);
|
|
132
|
+
}
|
|
133
|
+
return value;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* A boolean option: the given value when defined, else the fallback; a non-boolean is E_INVALID_ARGUMENT.
|
|
137
|
+
* @param name - the option name
|
|
138
|
+
* @param given - the value given (undefined = absent)
|
|
139
|
+
* @param fallback - the previous record's value or the default
|
|
140
|
+
* @returns the value
|
|
141
|
+
*/
|
|
142
|
+
export function pickBoolean(name, given, fallback) {
|
|
143
|
+
const value = given === undefined ? fallback : given;
|
|
144
|
+
if (typeof value !== "boolean") {
|
|
145
|
+
throw invalid(name, value, "a boolean");
|
|
146
|
+
}
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The layout dimension: 2 or 3.
|
|
151
|
+
* @param given - the value given (undefined = absent)
|
|
152
|
+
* @param fallback - the previous record's value or the default
|
|
153
|
+
* @returns 2 or 3
|
|
154
|
+
*/
|
|
155
|
+
export function pickDim(given, fallback) {
|
|
156
|
+
const value = given === undefined ? fallback : given;
|
|
157
|
+
if (value !== 2 && value !== 3) {
|
|
158
|
+
throw invalid("dim", value, "2 or 3");
|
|
159
|
+
}
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* The scene-unit center: an array-like of 2 (z = 0) or 3 finite numbers.
|
|
164
|
+
* @param given - the value given (undefined = absent)
|
|
165
|
+
* @param fallback - the previous record's value or the default
|
|
166
|
+
* @returns the three components
|
|
167
|
+
*/
|
|
168
|
+
export function pickCenter(given, fallback) {
|
|
169
|
+
if (given === undefined) {
|
|
170
|
+
return fallback;
|
|
171
|
+
}
|
|
172
|
+
const expected = "an array of 2 or 3 finite numbers";
|
|
173
|
+
const value = given;
|
|
174
|
+
if (typeof value !== "object" || value === null || !("length" in value)) {
|
|
175
|
+
throw invalid("center", given, expected);
|
|
176
|
+
}
|
|
177
|
+
const { length } = value;
|
|
178
|
+
if (length !== 2 && length !== 3) {
|
|
179
|
+
throw invalid("center", given, expected);
|
|
180
|
+
}
|
|
181
|
+
const x = given[0];
|
|
182
|
+
const y = given[1];
|
|
183
|
+
const z = length === 3 ? given[2] : 0;
|
|
184
|
+
if (typeof x !== "number" ||
|
|
185
|
+
typeof y !== "number" ||
|
|
186
|
+
typeof z !== "number" ||
|
|
187
|
+
!Number.isFinite(x) ||
|
|
188
|
+
!Number.isFinite(y) ||
|
|
189
|
+
!Number.isFinite(z)) {
|
|
190
|
+
throw invalid("center", given, expected);
|
|
191
|
+
}
|
|
192
|
+
return [x, y, z];
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The seed: a finite number, or null (unseeded; 0 keeps the port's "0 = unseeded" quirk through the Lcg).
|
|
196
|
+
* @param given - the value given (undefined = absent)
|
|
197
|
+
* @param fallback - the previous record's value or the default
|
|
198
|
+
* @returns the seed or null
|
|
199
|
+
*/
|
|
200
|
+
export function pickSeed(given, fallback) {
|
|
201
|
+
if (given === undefined) {
|
|
202
|
+
return fallback;
|
|
203
|
+
}
|
|
204
|
+
const value = given;
|
|
205
|
+
if (value !== null && (typeof value !== "number" || !Number.isFinite(value))) {
|
|
206
|
+
throw invalid("seed", given, "a finite number or null");
|
|
207
|
+
}
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Integer >= 1.
|
|
212
|
+
* @param value - a finite number
|
|
213
|
+
* @returns whether it is a positive integer
|
|
214
|
+
*/
|
|
215
|
+
export function isPositiveInteger(value) {
|
|
216
|
+
return Number.isInteger(value) && value >= 1;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* The u32 word written into Fa2Params.seed: 0 for null, else floor(|seed|) mod 2^32.
|
|
220
|
+
* @param seed - the resolved seed
|
|
221
|
+
* @returns the u32 value
|
|
222
|
+
*/
|
|
223
|
+
export function seedWord(seed) {
|
|
224
|
+
if (seed === null) {
|
|
225
|
+
return 0;
|
|
226
|
+
}
|
|
227
|
+
return Math.floor(Math.abs(seed)) % U32_MODULUS;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* A scalar field of a block's read() result.
|
|
231
|
+
* @param values - the values read
|
|
232
|
+
* @param name - the field name
|
|
233
|
+
* @returns the number
|
|
234
|
+
*/
|
|
235
|
+
export function scalar(values, name) {
|
|
236
|
+
const value = values[name];
|
|
237
|
+
if (typeof value !== "number") {
|
|
238
|
+
throw invalid(name, value, "a scalar field");
|
|
239
|
+
}
|
|
240
|
+
return value;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* A vector field of a block's read() result.
|
|
244
|
+
* @param values - the values read
|
|
245
|
+
* @param name - the field name
|
|
246
|
+
* @returns the components
|
|
247
|
+
*/
|
|
248
|
+
export function vector(values, name) {
|
|
249
|
+
const value = values[name];
|
|
250
|
+
if (typeof value === "number") {
|
|
251
|
+
throw invalid(name, value, "a vector field");
|
|
252
|
+
}
|
|
253
|
+
return value;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* The override record a kernel gets: its defaults overlaid with the values present in the merged set (contract 3.9:
|
|
257
|
+
* a name a spec does not declare is rejected at compose time, so nothing else is passed through).
|
|
258
|
+
* @param merged - the merged override set of the model (plus USE_PERM / HAS_WEIGHTS from the simulation)
|
|
259
|
+
* @param defaults - the kernel's accepted names with their defaults
|
|
260
|
+
* @returns the kernel's override record, every accepted name explicit
|
|
261
|
+
*/
|
|
262
|
+
export function subset(merged, defaults) {
|
|
263
|
+
const out = {};
|
|
264
|
+
for (const name of Object.keys(defaults)) {
|
|
265
|
+
out[name] = name in merged ? merged[name] : defaults[name];
|
|
266
|
+
}
|
|
267
|
+
return out;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=model-common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-common.js","sourceRoot":"","sources":["../../../src/layouts/model-common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The grid-tier repulsion stage of the force models (spec 7.7, 7.4; P4-T10): G1-G3 through the T8 grid build, G4-G5
|
|
3
|
+
* through the T9 pyramid, then G6 (`grid-far-field`) and G7 (`grid-near-field`, K3's pair law and epilogue) over
|
|
4
|
+
* `plan1d(n)`, followed by K4 (`fa2-speed-finalize`) exactly as `RepulsionExact` records it. The named grid buffers
|
|
5
|
+
* are the model's `BufferSpec`s (`buffers()`, so `inspect(name)` reaches them); the anonymous scratch of the sort
|
|
6
|
+
* and the scan and the static params of the pyramid draw on ONE `Lease` of the context's pool taken at `create()`
|
|
7
|
+
* (the scan planner takes its block-sum levels at prepare time) and released by `dispose()` (PD-11, DEP-P4-D: a
|
|
8
|
+
* per-batch lease would rebuild the G2-G4 bind groups every batch; a model creates one stage per bind(), so a stage
|
|
9
|
+
* is bound once). The stage is the ONE class every model reaches the grid tier through (PD-22): the FR and
|
|
10
|
+
* spring-electrical models pass `LAW` 1 / 2 in their override set, which reaches G6's per-cell law and G7's pair law
|
|
11
|
+
* (P4-T13).
|
|
12
|
+
*/
|
|
13
|
+
import { type PipelineCache } from "../kernel/pipeline-cache.js";
|
|
14
|
+
import { type WgslModuleSpec } from "../kernel/wgsl.js";
|
|
15
|
+
import { type BufferPool } from "../memory/buffer-pool.js";
|
|
16
|
+
import { type GridSpec } from "../primitives/grid.js";
|
|
17
|
+
import { type PlanCaps } from "../types/context.js";
|
|
18
|
+
import { type Binding } from "../types/memory.js";
|
|
19
|
+
import { type BufferSpec } from "./force-simulation.js";
|
|
20
|
+
import { type RepulsionExactOverrides, type RepulsionExactResources } from "./repulsion-exact.js";
|
|
21
|
+
/** The stage names the grid tier records, in dispatch order (the `upTo` vocabulary of recordRepulsion). */
|
|
22
|
+
declare const GRID_STAGES: readonly ["G1", "G2", "G3", "G4", "G5", "G6", "G7"];
|
|
23
|
+
/** A grid stage name. */
|
|
24
|
+
export type GridStage = (typeof GRID_STAGES)[number];
|
|
25
|
+
/**
|
|
26
|
+
* The buffers the grid-tier repulsion stage binds: the exact tier's plus the named grid buffers of `buffers()`. The
|
|
27
|
+
* parameter type of RepulsionGrid.bind (knip: exported for the signature, not imported by name).
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export interface RepulsionGridResources extends RepulsionExactResources {
|
|
31
|
+
readonly cellKey: Binding;
|
|
32
|
+
readonly cellVal: Binding;
|
|
33
|
+
readonly sortedKey: Binding;
|
|
34
|
+
readonly sortedIdx: Binding;
|
|
35
|
+
readonly cellHist: Binding;
|
|
36
|
+
readonly cellStart: Binding;
|
|
37
|
+
readonly hubList: Binding;
|
|
38
|
+
readonly hubCounters: Binding;
|
|
39
|
+
readonly hubArgs: Binding;
|
|
40
|
+
readonly pyramid: Binding;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The override set G6 / G7 / K4 compile with: K3's three plus the repulsion law (0 FA2, 1 FR, 2 coulomb; P4-T13,
|
|
44
|
+
* PD-22).
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export interface RepulsionGridOverrides extends RepulsionExactOverrides {
|
|
48
|
+
readonly LAW: 0 | 1 | 2;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* What the stage needs of the context to build its scope: the pieces `ModelResources` carries. The parameter type
|
|
52
|
+
* of RepulsionGrid.create (knip: exported for the signature, not imported by name).
|
|
53
|
+
* @public
|
|
54
|
+
*/
|
|
55
|
+
export interface RepulsionGridScope {
|
|
56
|
+
readonly device: GPUDevice;
|
|
57
|
+
readonly caps: PlanCaps;
|
|
58
|
+
readonly pipelines: PipelineCache;
|
|
59
|
+
readonly pool: BufferPool;
|
|
60
|
+
}
|
|
61
|
+
/** G1-G7 then K4 (spec 7.7, 7.4): the grid tier's repulsion stage. */
|
|
62
|
+
export declare class RepulsionGrid {
|
|
63
|
+
/** The overrides G6 / G7 / K4 were compiled with (a frozen copy of the argument of create()). */
|
|
64
|
+
readonly overrides: RepulsionGridOverrides;
|
|
65
|
+
/** The grid geometry the stage was prepared for. */
|
|
66
|
+
readonly spec: GridSpec;
|
|
67
|
+
private readonly caps;
|
|
68
|
+
private readonly workgroupSize;
|
|
69
|
+
private readonly box;
|
|
70
|
+
private readonly build;
|
|
71
|
+
private readonly pyramid;
|
|
72
|
+
private readonly far;
|
|
73
|
+
private readonly near;
|
|
74
|
+
private readonly speedFinalize;
|
|
75
|
+
private bound;
|
|
76
|
+
/**
|
|
77
|
+
* Holds the planners and kernels; create() is the only caller.
|
|
78
|
+
* @param scope - the context pieces
|
|
79
|
+
* @param workgroupSize - the device's workgroup size (every kernel compiles with it)
|
|
80
|
+
* @param overrides - the override set G6 / G7 / K4 were compiled with
|
|
81
|
+
* @param spec - the grid
|
|
82
|
+
* @param box - the lease box the scope's scratch() and params() read
|
|
83
|
+
* @param build - the T8 planner (G1-G3)
|
|
84
|
+
* @param pyramid - the T9 planner (G4-G5)
|
|
85
|
+
* @param kernels - G6 (`far`), G7 (`near`) and K4 (`speedFinalize`)
|
|
86
|
+
*/
|
|
87
|
+
private constructor();
|
|
88
|
+
/**
|
|
89
|
+
* The model-owned buffers of the grid tier (spec 7.3; PD-11): `cellKey` / `cellVal` / `sortedKey` / `sortedIdx`
|
|
90
|
+
* 4n, `cellHist` / `cellStart` 4 (cells + 2) zeroed, `hubList` one word per possible hub cell, `hubArgs` one
|
|
91
|
+
* indirect slot, `pyramid` 16 B per pyramid cell zeroed. `hubCounters` (16 B, zeroed) is the MODEL's on every
|
|
92
|
+
* tier (PD-14: K1 binds it on the exact tier too). n = 0 reports one node's worth of bytes (spec 3.6).
|
|
93
|
+
* @param n - the node count
|
|
94
|
+
* @param spec - the grid
|
|
95
|
+
* @returns the specs
|
|
96
|
+
*/
|
|
97
|
+
static buffers(n: number, spec: GridSpec): readonly BufferSpec[];
|
|
98
|
+
/**
|
|
99
|
+
* The module specs of the grid tier under an override set (for warm() and the compile matrix): the build's
|
|
100
|
+
* (G1, the sort path `spec.deterministic` selects, the histogram, the scan, the fill), the pyramid's (G4, the
|
|
101
|
+
* finalize, G4b, G5), G6, G7 and K4.
|
|
102
|
+
* @param overrides - the override set of the stage
|
|
103
|
+
* @param spec - the grid (only its `deterministic` flag matters: the pipeline key carries no geometry)
|
|
104
|
+
* @returns the specs
|
|
105
|
+
*/
|
|
106
|
+
static specs(overrides: RepulsionGridOverrides, spec: GridSpec): readonly WgslModuleSpec[];
|
|
107
|
+
/**
|
|
108
|
+
* Compiles every kernel of the tier through the cache (sequentially: PipelineCache.get compiles inside a
|
|
109
|
+
* validation scope, one stack per device) over a scope whose scratch and params draw on the stage's lease.
|
|
110
|
+
* @param scope - the context pieces (device, caps, pipelines, pool)
|
|
111
|
+
* @param workgroupSize - the device's workgroup size
|
|
112
|
+
* @param overrides - the SWING_MODE / STRONG_GRAVITY / GRAVITY_CENTER / LAW set of this stage
|
|
113
|
+
* @param spec - the grid
|
|
114
|
+
* @returns the stage, ready for bind()
|
|
115
|
+
*/
|
|
116
|
+
static create(scope: RepulsionGridScope, workgroupSize: number, overrides: RepulsionGridOverrides, spec: GridSpec): Promise<RepulsionGrid>;
|
|
117
|
+
/**
|
|
118
|
+
* Builds every bind group once per load(): the build's and the pyramid's bind() (which take their scratch and
|
|
119
|
+
* write their static params through the lease), then G6, G7 and K4 against the named buffers (the 3.10.1
|
|
120
|
+
* binding names). A second bind() takes fresh scratch from the same lease and the first bind()'s scratch stays
|
|
121
|
+
* held until dispose(): the one lease also holds the prepare-time allocations (the scan's block-sum levels), so
|
|
122
|
+
* it cannot be released on a rebind (the model creates one stage per bind(), so a rebind never happens).
|
|
123
|
+
* @param resources - the buffers of spec 7.3 plus the grid's
|
|
124
|
+
*/
|
|
125
|
+
bind(resources: RepulsionGridResources): void;
|
|
126
|
+
/**
|
|
127
|
+
* Records G1..G7 for `n` nodes with the params slot's dynamic offset, stopping after `upTo` when given (spec 7.4
|
|
128
|
+
* grid sequence; the inspect() stage split, spec 11.9 item 2): G1-G3 through the build planner, G4-G5 through the
|
|
129
|
+
* pyramid planner, then G6 and G7 over plan1d(n).
|
|
130
|
+
* @param pass - the open compute pass of the batch
|
|
131
|
+
* @param n - the node count (in [1, the capacity of the grid buffers])
|
|
132
|
+
* @param paramsOffset - the dynamic offset of this iteration's Fa2Params slot in the uniform ring
|
|
133
|
+
* @param upTo - the last grid stage to record (default "G7")
|
|
134
|
+
*/
|
|
135
|
+
recordRepulsion(pass: GPUComputePassEncoder, n: number, paramsOffset: number, upTo?: GridStage): void;
|
|
136
|
+
/**
|
|
137
|
+
* Records K4 only (one workgroup).
|
|
138
|
+
* @param pass - the open compute pass
|
|
139
|
+
* @param paramsOffset - the dynamic offset of the Fa2Params slot
|
|
140
|
+
*/
|
|
141
|
+
recordSpeedFinalize(pass: GPUComputePassEncoder, paramsOffset: number): void;
|
|
142
|
+
/** Releases the lease (the sort and scan scratch, the static params) and drops the bind groups; idempotent. */
|
|
143
|
+
dispose(): void;
|
|
144
|
+
/**
|
|
145
|
+
* The bound groups, or E_NOT_LOADED when bind() has not run.
|
|
146
|
+
* @param method - the caller's name for the message
|
|
147
|
+
* @returns the bound groups
|
|
148
|
+
*/
|
|
149
|
+
private requireBound;
|
|
150
|
+
}
|
|
151
|
+
export {};
|
|
152
|
+
//# sourceMappingURL=repulsion-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repulsion-grid.d.ts","sourceRoot":"","sources":["../../../src/layouts/repulsion-grid.ts"],"names":[],"mappings":"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"}
|