@graphty/webgpu-graph-algorithms 0.2.0 → 0.3.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.
Files changed (115) hide show
  1. package/README.md +68 -25
  2. package/dist/browser.js +1 -1
  3. package/dist/chunks/{context-E6iKaeuJ.js → context-CRbw2Wyo.js} +178 -19
  4. package/dist/chunks/{context-E6iKaeuJ.js.map → context-CRbw2Wyo.js.map} +1 -1
  5. package/dist/node.js +1 -1
  6. package/dist/src/accelerator.d.ts +9 -6
  7. package/dist/src/accelerator.d.ts.map +1 -1
  8. package/dist/src/accelerator.js +85 -6
  9. package/dist/src/accelerator.js.map +1 -1
  10. package/dist/src/algorithms/components.d.ts +30 -0
  11. package/dist/src/algorithms/components.d.ts.map +1 -0
  12. package/dist/src/algorithms/components.js +300 -0
  13. package/dist/src/algorithms/components.js.map +1 -0
  14. package/dist/src/algorithms/pagerank.d.ts +39 -0
  15. package/dist/src/algorithms/pagerank.d.ts.map +1 -0
  16. package/dist/src/algorithms/pagerank.js +298 -0
  17. package/dist/src/algorithms/pagerank.js.map +1 -0
  18. package/dist/src/algorithms/power-iteration.d.ts +109 -0
  19. package/dist/src/algorithms/power-iteration.d.ts.map +1 -0
  20. package/dist/src/algorithms/power-iteration.js +206 -0
  21. package/dist/src/algorithms/power-iteration.js.map +1 -0
  22. package/dist/src/algorithms/scope.d.ts +26 -0
  23. package/dist/src/algorithms/scope.d.ts.map +1 -0
  24. package/dist/src/algorithms/scope.js +41 -0
  25. package/dist/src/algorithms/scope.js.map +1 -0
  26. package/dist/src/algorithms/spectral.d.ts +50 -0
  27. package/dist/src/algorithms/spectral.d.ts.map +1 -0
  28. package/dist/src/algorithms/spectral.js +247 -0
  29. package/dist/src/algorithms/spectral.js.map +1 -0
  30. package/dist/src/index.d.ts +4 -0
  31. package/dist/src/index.d.ts.map +1 -1
  32. package/dist/src/index.js +4 -0
  33. package/dist/src/index.js.map +1 -1
  34. package/dist/src/kernel/dispatch.d.ts +4 -1
  35. package/dist/src/kernel/dispatch.d.ts.map +1 -1
  36. package/dist/src/kernel/dispatch.js +12 -5
  37. package/dist/src/kernel/dispatch.js.map +1 -1
  38. package/dist/src/kernels.d.ts +20 -4
  39. package/dist/src/kernels.d.ts.map +1 -1
  40. package/dist/src/kernels.js +172 -2
  41. package/dist/src/kernels.js.map +1 -1
  42. package/dist/src/memory/residency.d.ts.map +1 -1
  43. package/dist/src/memory/residency.js +164 -11
  44. package/dist/src/memory/residency.js.map +1 -1
  45. package/dist/src/primitives/core-shape.d.ts +41 -0
  46. package/dist/src/primitives/core-shape.d.ts.map +1 -0
  47. package/dist/src/primitives/core-shape.js +89 -0
  48. package/dist/src/primitives/core-shape.js.map +1 -0
  49. package/dist/src/primitives/segmented-reduce.d.ts.map +1 -1
  50. package/dist/src/primitives/segmented-reduce.js +4 -30
  51. package/dist/src/primitives/segmented-reduce.js.map +1 -1
  52. package/dist/src/primitives/spmv.d.ts +56 -0
  53. package/dist/src/primitives/spmv.d.ts.map +1 -0
  54. package/dist/src/primitives/spmv.js +101 -0
  55. package/dist/src/primitives/spmv.js.map +1 -0
  56. package/dist/src/types/accelerator.d.ts +14 -2
  57. package/dist/src/types/accelerator.d.ts.map +1 -1
  58. package/dist/src/types/algorithms.d.ts +73 -0
  59. package/dist/src/types/algorithms.d.ts.map +1 -0
  60. package/dist/src/types/algorithms.js +17 -0
  61. package/dist/src/types/algorithms.js.map +1 -0
  62. package/dist/src/wgsl/pr-finalize.wgsl.d.ts +11 -0
  63. package/dist/src/wgsl/pr-finalize.wgsl.d.ts.map +1 -0
  64. package/dist/src/wgsl/pr-finalize.wgsl.js +36 -0
  65. package/dist/src/wgsl/pr-finalize.wgsl.js.map +1 -0
  66. package/dist/src/wgsl/pr-scale.wgsl.d.ts +14 -0
  67. package/dist/src/wgsl/pr-scale.wgsl.d.ts.map +1 -0
  68. package/dist/src/wgsl/pr-scale.wgsl.js +48 -0
  69. package/dist/src/wgsl/pr-scale.wgsl.js.map +1 -0
  70. package/dist/src/wgsl/spmv-pull.wgsl.d.ts +15 -0
  71. package/dist/src/wgsl/spmv-pull.wgsl.d.ts.map +1 -0
  72. package/dist/src/wgsl/spmv-pull.wgsl.js +47 -0
  73. package/dist/src/wgsl/spmv-pull.wgsl.js.map +1 -0
  74. package/dist/src/wgsl/wcc-compress.wgsl.d.ts +9 -0
  75. package/dist/src/wgsl/wcc-compress.wgsl.d.ts.map +1 -0
  76. package/dist/src/wgsl/wcc-compress.wgsl.js +26 -0
  77. package/dist/src/wgsl/wcc-compress.wgsl.js.map +1 -0
  78. package/dist/src/wgsl/wcc-link-edges.wgsl.d.ts +13 -0
  79. package/dist/src/wgsl/wcc-link-edges.wgsl.d.ts.map +1 -0
  80. package/dist/src/wgsl/wcc-link-edges.wgsl.js +46 -0
  81. package/dist/src/wgsl/wcc-link-edges.wgsl.js.map +1 -0
  82. package/dist/src/wgsl/wcc-link-sample.wgsl.d.ts +11 -0
  83. package/dist/src/wgsl/wcc-link-sample.wgsl.d.ts.map +1 -0
  84. package/dist/src/wgsl/wcc-link-sample.wgsl.js +45 -0
  85. package/dist/src/wgsl/wcc-link-sample.wgsl.js.map +1 -0
  86. package/dist/src/wgsl/wcc-sample.wgsl.d.ts +10 -0
  87. package/dist/src/wgsl/wcc-sample.wgsl.d.ts.map +1 -0
  88. package/dist/src/wgsl/wcc-sample.wgsl.js +18 -0
  89. package/dist/src/wgsl/wcc-sample.wgsl.js.map +1 -0
  90. package/dist/tsconfig.build.tsbuildinfo +1 -1
  91. package/dist/webgpu-graph-algorithms.js +1550 -29
  92. package/dist/webgpu-graph-algorithms.js.map +1 -1
  93. package/package.json +3 -3
  94. package/src/accelerator.ts +101 -7
  95. package/src/algorithms/components.ts +348 -0
  96. package/src/algorithms/pagerank.ts +343 -0
  97. package/src/algorithms/power-iteration.ts +278 -0
  98. package/src/algorithms/scope.ts +52 -0
  99. package/src/algorithms/spectral.ts +300 -0
  100. package/src/index.ts +18 -0
  101. package/src/kernel/dispatch.ts +12 -5
  102. package/src/kernels.ts +206 -5
  103. package/src/memory/residency.ts +200 -11
  104. package/src/primitives/core-shape.ts +103 -0
  105. package/src/primitives/segmented-reduce.ts +4 -36
  106. package/src/primitives/spmv.ts +155 -0
  107. package/src/types/accelerator.ts +28 -2
  108. package/src/types/algorithms.ts +82 -0
  109. package/src/wgsl/pr-finalize.wgsl.ts +36 -0
  110. package/src/wgsl/pr-scale.wgsl.ts +48 -0
  111. package/src/wgsl/spmv-pull.wgsl.ts +47 -0
  112. package/src/wgsl/wcc-compress.wgsl.ts +26 -0
  113. package/src/wgsl/wcc-link-edges.wgsl.ts +46 -0
  114. package/src/wgsl/wcc-link-sample.wgsl.ts +45 -0
  115. package/src/wgsl/wcc-sample.wgsl.ts +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"power-iteration.js","sourceRoot":"","sources":["../../../src/algorithms/power-iteration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The ReduceScope an algorithm driver hands the primitives (contract 3.11), built over a GpuContext: `scratch` comes
3
+ * from ONE Lease (released by `dispose()` in the algorithm's `finally`, spec 4.4) and `params` from a UniformRing
4
+ * slot, so a batch of k iterations writes k parameter blocks into one buffer and dispatches with dynamic offsets
5
+ * instead of allocating a uniform buffer per dispatch (spec 5.3). The src/ twin of the tests' testReduceScope
6
+ * (test/helpers/segmented-reduce.ts). `slots` sizes the ring for the LARGEST batch the caller records: reserve()
7
+ * wraps, so a ring too small silently reuses a slot another dispatch of the same batch still reads.
8
+ */
9
+ import { type GpuContext } from "../context.js";
10
+ import { type ReduceScope } from "../primitives/reduce.js";
11
+ /** A ReduceScope over a context plus the two lifecycle calls an algorithm makes: flush() before submit, dispose() in its finally. */
12
+ export interface AlgorithmScope extends ReduceScope {
13
+ /** queue.writeBuffer of the params slots written since the last flush (called before the batch is submitted). */
14
+ flush(): void;
15
+ /** Destroys the ring and releases every scratch buffer of the lease; idempotent. */
16
+ dispose(): void;
17
+ }
18
+ /**
19
+ * The scope of one algorithm call.
20
+ * @param ctx - the context
21
+ * @param label - the label prefix of the ring and every scratch buffer
22
+ * @param slots - the params slots of the ring: at least the parameter blocks of the largest batch recorded
23
+ * @returns the scope
24
+ */
25
+ export declare function algorithmScope(ctx: GpuContext, label: string, slots: number): AlgorithmScope;
26
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/algorithms/scope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,qIAAqI;AACrI,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,iHAAiH;IACjH,KAAK,IAAI,IAAI,CAAC;IACd,oFAAoF;IACpF,OAAO,IAAI,IAAI,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAuB5F"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The ReduceScope an algorithm driver hands the primitives (contract 3.11), built over a GpuContext: `scratch` comes
3
+ * from ONE Lease (released by `dispose()` in the algorithm's `finally`, spec 4.4) and `params` from a UniformRing
4
+ * slot, so a batch of k iterations writes k parameter blocks into one buffer and dispatches with dynamic offsets
5
+ * instead of allocating a uniform buffer per dispatch (spec 5.3). The src/ twin of the tests' testReduceScope
6
+ * (test/helpers/segmented-reduce.ts). `slots` sizes the ring for the LARGEST batch the caller records: reserve()
7
+ * wraps, so a ring too small silently reuses a slot another dispatch of the same batch still reads.
8
+ */
9
+ import { UniformRing } from "../kernel/uniform-ring.js";
10
+ /**
11
+ * The scope of one algorithm call.
12
+ * @param ctx - the context
13
+ * @param label - the label prefix of the ring and every scratch buffer
14
+ * @param slots - the params slots of the ring: at least the parameter blocks of the largest batch recorded
15
+ * @returns the scope
16
+ */
17
+ export function algorithmScope(ctx, label, slots) {
18
+ const lease = ctx.pool.lease();
19
+ const ring = new UniformRing(ctx.device, ctx.allocator, slots, `${label}/ring`);
20
+ return {
21
+ device: ctx.device,
22
+ caps: ctx.caps,
23
+ pipelines: ctx.pipelines,
24
+ pool: ctx.pool,
25
+ workgroupSize: ctx.workgroupSize,
26
+ scratch: (byteLength, scratchLabel) => lease.storage(byteLength, `${label}/${scratchLabel}`),
27
+ params(block, values) {
28
+ const slot = ring.reserve(1);
29
+ ring.write(slot, block, values);
30
+ return { binding: ring.binding(block), offset: ring.offsetOf(slot) };
31
+ },
32
+ flush: () => {
33
+ ring.flush();
34
+ },
35
+ dispose() {
36
+ ring.destroy();
37
+ lease.release();
38
+ },
39
+ };
40
+ }
41
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../src/algorithms/scope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAWxD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAe,EAAE,KAAa,EAAE,KAAa;IACxE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;IAChF,OAAO;QACH,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,YAAY,EAAE,CAAC;QAC5F,MAAM,CAAC,KAAK,EAAE,MAAM;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACR,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,OAAO;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * HITS, eigenvector centrality and Katz centrality on the device (spec 3.3 lines 794-796, 8.2 lines 2603-2605):
3
+ * three entry points over the ONE power-iteration driver, differing only in the adjacency the pull walks, the
4
+ * normaliser and the coefficients. Eigenvector is the L2-normalised iteration over the forward core; Katz is
5
+ * `alpha * A^T x + beta` over the reverse view with no per-iteration normaliser; HITS alternates the two pulls with
6
+ * sum normalisation, `a(i) = A^T norm(h(i-1))` and `h(i) = A norm(a(i-1))` (the CPU package's recurrence, which
7
+ * design 9.7 makes the parity target), as TWO interleaved chains of the driver -- the reverse-first chain from the
8
+ * hub seed and the forward-first chain from the authority seed -- so a call is still two runs and two readbacks.
9
+ * Every result is normalised ONCE on the host after the readback (sum for HITS, L2 for the other two), matching
10
+ * the f64 oracle; the per-iteration normaliser never leaves the device (PD-10).
11
+ */
12
+ import { type GraphSnapshot } from "@graphty/graph-format";
13
+ import { type GpuContext } from "../context.js";
14
+ import { type EigenvectorOptions, type GpuHitsResult, type GpuScoresResult, type HitsOptions, type KatzOptions } from "../types/algorithms.js";
15
+ import { type GpuRunOptions } from "../types/run.js";
16
+ /**
17
+ * Eigenvector centrality on the device (spec 3.3, 8.2): the L2-normalised power iteration over the forward
18
+ * adjacency, converging on `delta < n * tolerance`; the scores are L2-normalised.
19
+ * @param ctx - the context whose device runs the kernels
20
+ * @param s - the snapshot (uploaded through ctx.residency, or found there)
21
+ * @param options - maxIterations 100 / tolerance 1e-6 / weighted true, plus dest / signal / onProgress
22
+ * @returns the scores, iterations, converged and precision
23
+ */
24
+ export declare function eigenvectorCentrality(ctx: GpuContext, s: GraphSnapshot, options?: EigenvectorOptions & GpuRunOptions): Promise<GpuScoresResult>;
25
+ /**
26
+ * Katz centrality on the device (spec 3.3, 8.2): `x = alpha * A^T x + beta` over the reverse adjacency with no
27
+ * per-iteration normaliser; the scores are L2-normalised once at the end.
28
+ * @param ctx - the context whose device runs the kernels
29
+ * @param s - the snapshot (uploaded through ctx.residency, or found there)
30
+ * @param options - alpha 0.1 / beta 1 / maxIterations 100 / tolerance 1e-6 / weighted true, plus dest / signal / onProgress
31
+ * @returns the scores, iterations, converged and precision
32
+ */
33
+ export declare function katzCentrality(ctx: GpuContext, s: GraphSnapshot, options?: KatzOptions & GpuRunOptions): Promise<GpuScoresResult>;
34
+ /**
35
+ * HITS on the device (spec 3.3, 8.2): `a(i) = A^T norm(h(i-1))` and `h(i) = A norm(a(i-1))` from uniform seeds,
36
+ * sum-normalised. Those two recurrences interleave into two independent chains, each alternating the reverse and
37
+ * the forward pull, so the driver runs twice: the chain seeded as hubs pulls reverse first and holds h(m) after an
38
+ * even number m of iterations and a(m) after an odd one; the chain seeded as authorities is the mirror image. Each
39
+ * chain stops at its own batch boundary, so the two can end on opposite parities holding the SAME kind; the result
40
+ * takes the latest iterate of each kind across both chains (a chain's last two iterates are one of each kind),
41
+ * which is h(m) and a(m) when both ran m iterations and never two vectors of one kind otherwise.
42
+ * `iterations` is the larger of the two and `converged` their conjunction. `dest`, when given, receives the hubs.
43
+ * Both vectors are sum-normalised.
44
+ * @param ctx - the context whose device runs the kernels
45
+ * @param s - the snapshot (uploaded through ctx.residency, or found there)
46
+ * @param options - maxIterations 100 / tolerance 1e-6 / weighted true, plus dest / signal / onProgress
47
+ * @returns hubs, authorities, iterations, converged and precision
48
+ */
49
+ export declare function hits(ctx: GpuContext, s: GraphSnapshot, options?: HitsOptions & GpuRunOptions): Promise<GpuHitsResult>;
50
+ //# sourceMappingURL=spectral.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spectral.d.ts","sourceRoot":"","sources":["../../../src/algorithms/spectral.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAoIrD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACvC,GAAG,EAAE,UAAU,EACf,CAAC,EAAE,aAAa,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,GAC7C,OAAO,CAAC,eAAe,CAAC,CAqB1B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAChC,GAAG,EAAE,UAAU,EACf,CAAC,EAAE,aAAa,EAChB,OAAO,CAAC,EAAE,WAAW,GAAG,aAAa,GACtC,OAAO,CAAC,eAAe,CAAC,CAuB1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,IAAI,CACtB,GAAG,EAAE,UAAU,EACf,CAAC,EAAE,aAAa,EAChB,OAAO,CAAC,EAAE,WAAW,GAAG,aAAa,GACtC,OAAO,CAAC,aAAa,CAAC,CAoDxB"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * HITS, eigenvector centrality and Katz centrality on the device (spec 3.3 lines 794-796, 8.2 lines 2603-2605):
3
+ * three entry points over the ONE power-iteration driver, differing only in the adjacency the pull walks, the
4
+ * normaliser and the coefficients. Eigenvector is the L2-normalised iteration over the forward core; Katz is
5
+ * `alpha * A^T x + beta` over the reverse view with no per-iteration normaliser; HITS alternates the two pulls with
6
+ * sum normalisation, `a(i) = A^T norm(h(i-1))` and `h(i) = A norm(a(i-1))` (the CPU package's recurrence, which
7
+ * design 9.7 makes the parity target), as TWO interleaved chains of the driver -- the reverse-first chain from the
8
+ * hub seed and the forward-first chain from the authority seed -- so a call is still two runs and two readbacks.
9
+ * Every result is normalised ONCE on the host after the readback (sum for HITS, L2 for the other two), matching
10
+ * the f64 oracle; the per-iteration normaliser never leaves the device (PD-10).
11
+ */
12
+ import { WebGpuGraphError } from "../errors.js";
13
+ import { aborted, checkDest, coreOf, reverseOf, runPowerIteration } from "./power-iteration.js";
14
+ /**
15
+ * Resolves and validates the shared options and the run options' `dest` / `signal`.
16
+ * @param ctx - the context
17
+ * @param s - the snapshot
18
+ * @param options - maxIterations / tolerance / weighted plus dest / signal
19
+ * @param algorithm - the public name, for messages
20
+ * @returns the resolved options
21
+ */
22
+ function resolve(ctx, s, options, algorithm) {
23
+ ctx.assertReady();
24
+ const n = s.nodeCount;
25
+ const maxIterations = options?.maxIterations ?? 100;
26
+ const tolerance = options?.tolerance ?? 1e-6;
27
+ if (!Number.isInteger(maxIterations) || maxIterations < 1) {
28
+ throw new WebGpuGraphError("E_INVALID_ARGUMENT", `${algorithm}: maxIterations must be a positive integer`, {
29
+ argument: "maxIterations",
30
+ value: maxIterations,
31
+ expected: "a positive integer",
32
+ });
33
+ }
34
+ const dest = checkDest(options?.dest, n, algorithm);
35
+ if (options?.signal?.aborted) {
36
+ throw aborted(algorithm);
37
+ }
38
+ // weighted: false runs UNWEIGHTED on a weighted snapshot: the pull folds 1 per arc (prepareSpmvPull's null)
39
+ return { n, maxIterations, tolerance, weights: options?.weighted === false ? null : undefined, dest };
40
+ }
41
+ /**
42
+ * A finite coefficient, or E_INVALID_ARGUMENT.
43
+ * @param value - the caller's value, or undefined for the default
44
+ * @param fallback - the default
45
+ * @param argument - the option name
46
+ * @returns the coefficient
47
+ */
48
+ function finite(value, fallback, argument) {
49
+ const resolved = value ?? fallback;
50
+ if (!Number.isFinite(resolved)) {
51
+ throw new WebGpuGraphError("E_INVALID_ARGUMENT", `katzCentrality: ${argument} must be a finite number`, {
52
+ argument,
53
+ value: resolved,
54
+ expected: "a finite number",
55
+ });
56
+ }
57
+ return resolved;
58
+ }
59
+ /**
60
+ * Copies the raw iterate into its destination divided by its norm (unchanged when the norm is not positive).
61
+ * @param raw - the driver's iterate
62
+ * @param dest - the caller's destination, or null for the raw array itself
63
+ * @param norm - "sum" (L1) or "l2"
64
+ * @returns the normalised scores
65
+ */
66
+ function normalised(raw, dest, norm) {
67
+ let acc = 0;
68
+ for (const v of raw) {
69
+ acc += norm === "sum" ? Math.abs(v) : v * v;
70
+ }
71
+ const scale = norm === "sum" ? acc : Math.sqrt(acc);
72
+ const out = dest ?? raw;
73
+ for (let v = 0; v < raw.length; v++) {
74
+ out[v] = scale > 0 ? raw[v] / scale : raw[v];
75
+ }
76
+ return out;
77
+ }
78
+ /**
79
+ * The score result of one run.
80
+ * @param run - the driver's run
81
+ * @param dest - the caller's destination, or null
82
+ * @param norm - the final normaliser
83
+ * @returns the result
84
+ */
85
+ function scoresOf(run, dest, norm) {
86
+ return {
87
+ scores: normalised(run.scores, dest, norm),
88
+ iterations: run.iterations,
89
+ converged: run.converged,
90
+ precision: "f32",
91
+ };
92
+ }
93
+ /**
94
+ * The n = 0 result: nothing to iterate.
95
+ * @param dest - the caller's destination, or null
96
+ * @param total - the run's progress denominator, reported to onProgress as both done and total
97
+ * @param onProgress - the caller's progress callback
98
+ * @returns the empty result
99
+ */
100
+ function empty(dest, total, onProgress) {
101
+ onProgress?.(total, total);
102
+ return { scores: dest ?? new Float32Array(0), iterations: 0, converged: true, precision: "f32" };
103
+ }
104
+ /**
105
+ * The latest iterate of one kind across the two HITS chains: a chain holds its seed's kind after an even number of
106
+ * iterations m (in `scores`, index m) and the other kind's last iterate one back (in `previous`, index m - 1, never
107
+ * null on an alternating run; the fallback only satisfies the type).
108
+ * @param sameSeed - the chain seeded with the wanted kind
109
+ * @param otherSeed - the chain seeded with the other kind
110
+ * @returns the raw iterate with the higher index
111
+ */
112
+ function latestOfKind(sameSeed, otherSeed) {
113
+ const fromSame = sameSeed.iterationsRun % 2 === 0 ? sameSeed.iterationsRun : sameSeed.iterationsRun - 1;
114
+ const fromOther = otherSeed.iterationsRun % 2 === 1 ? otherSeed.iterationsRun : otherSeed.iterationsRun - 1;
115
+ const chain = fromSame >= fromOther ? sameSeed : otherSeed;
116
+ const index = Math.max(fromSame, fromOther);
117
+ return (index === chain.iterationsRun ? chain.scores : chain.previous) ?? chain.scores;
118
+ }
119
+ /**
120
+ * Eigenvector centrality on the device (spec 3.3, 8.2): the L2-normalised power iteration over the forward
121
+ * adjacency, converging on `delta < n * tolerance`; the scores are L2-normalised.
122
+ * @param ctx - the context whose device runs the kernels
123
+ * @param s - the snapshot (uploaded through ctx.residency, or found there)
124
+ * @param options - maxIterations 100 / tolerance 1e-6 / weighted true, plus dest / signal / onProgress
125
+ * @returns the scores, iterations, converged and precision
126
+ */
127
+ export async function eigenvectorCentrality(ctx, s, options) {
128
+ const algorithm = "eigenvectorCentrality";
129
+ const r = resolve(ctx, s, options, algorithm);
130
+ if (r.n === 0) {
131
+ return empty(r.dest, r.maxIterations, options?.onProgress);
132
+ }
133
+ const run = await runPowerIteration(ctx, r.n, {
134
+ normMode: 2,
135
+ adjacency: coreOf(ctx, s, algorithm),
136
+ alternate: null,
137
+ alpha: 1,
138
+ beta: 0,
139
+ uniformP: 0,
140
+ maxIterations: r.maxIterations,
141
+ tolerance: r.tolerance,
142
+ weights: r.weights,
143
+ label: algorithm,
144
+ signal: options?.signal,
145
+ onProgress: options?.onProgress,
146
+ });
147
+ return scoresOf(run, r.dest, "l2");
148
+ }
149
+ /**
150
+ * Katz centrality on the device (spec 3.3, 8.2): `x = alpha * A^T x + beta` over the reverse adjacency with no
151
+ * per-iteration normaliser; the scores are L2-normalised once at the end.
152
+ * @param ctx - the context whose device runs the kernels
153
+ * @param s - the snapshot (uploaded through ctx.residency, or found there)
154
+ * @param options - alpha 0.1 / beta 1 / maxIterations 100 / tolerance 1e-6 / weighted true, plus dest / signal / onProgress
155
+ * @returns the scores, iterations, converged and precision
156
+ */
157
+ export async function katzCentrality(ctx, s, options) {
158
+ const algorithm = "katzCentrality";
159
+ const alpha = finite(options?.alpha, 0.1, "alpha");
160
+ const beta = finite(options?.beta, 1, "beta");
161
+ const r = resolve(ctx, s, options, algorithm);
162
+ if (r.n === 0) {
163
+ return empty(r.dest, r.maxIterations, options?.onProgress);
164
+ }
165
+ const run = await runPowerIteration(ctx, r.n, {
166
+ normMode: 4,
167
+ adjacency: reverseOf(ctx, s),
168
+ alternate: null,
169
+ alpha,
170
+ beta,
171
+ uniformP: 1,
172
+ maxIterations: r.maxIterations,
173
+ tolerance: r.tolerance,
174
+ weights: r.weights,
175
+ label: algorithm,
176
+ signal: options?.signal,
177
+ onProgress: options?.onProgress,
178
+ });
179
+ return scoresOf(run, r.dest, "l2");
180
+ }
181
+ /**
182
+ * HITS on the device (spec 3.3, 8.2): `a(i) = A^T norm(h(i-1))` and `h(i) = A norm(a(i-1))` from uniform seeds,
183
+ * sum-normalised. Those two recurrences interleave into two independent chains, each alternating the reverse and
184
+ * the forward pull, so the driver runs twice: the chain seeded as hubs pulls reverse first and holds h(m) after an
185
+ * even number m of iterations and a(m) after an odd one; the chain seeded as authorities is the mirror image. Each
186
+ * chain stops at its own batch boundary, so the two can end on opposite parities holding the SAME kind; the result
187
+ * takes the latest iterate of each kind across both chains (a chain's last two iterates are one of each kind),
188
+ * which is h(m) and a(m) when both ran m iterations and never two vectors of one kind otherwise.
189
+ * `iterations` is the larger of the two and `converged` their conjunction. `dest`, when given, receives the hubs.
190
+ * Both vectors are sum-normalised.
191
+ * @param ctx - the context whose device runs the kernels
192
+ * @param s - the snapshot (uploaded through ctx.residency, or found there)
193
+ * @param options - maxIterations 100 / tolerance 1e-6 / weighted true, plus dest / signal / onProgress
194
+ * @returns hubs, authorities, iterations, converged and precision
195
+ */
196
+ export async function hits(ctx, s, options) {
197
+ const algorithm = "hits";
198
+ const r = resolve(ctx, s, options, algorithm);
199
+ const total = 2 * r.maxIterations;
200
+ if (r.n === 0) {
201
+ const { scores, iterations, converged, precision } = empty(r.dest, total, options?.onProgress);
202
+ return { hubs: scores, authorities: new Float32Array(0), iterations, converged, precision };
203
+ }
204
+ const onProgress = options?.onProgress;
205
+ const shared = {
206
+ normMode: 1,
207
+ alpha: 1,
208
+ beta: 0,
209
+ uniformP: 0,
210
+ maxIterations: r.maxIterations,
211
+ tolerance: r.tolerance,
212
+ weights: r.weights,
213
+ signal: options?.signal,
214
+ };
215
+ const forward = coreOf(ctx, s, algorithm);
216
+ const reverse = reverseOf(ctx, s);
217
+ const hubSeeded = await runPowerIteration(ctx, r.n, {
218
+ ...shared,
219
+ adjacency: reverse,
220
+ alternate: forward,
221
+ label: `${algorithm}/hub-seeded`,
222
+ onProgress: onProgress === undefined
223
+ ? undefined
224
+ : (done) => {
225
+ onProgress(done, total);
226
+ },
227
+ });
228
+ const authoritySeeded = await runPowerIteration(ctx, r.n, {
229
+ ...shared,
230
+ adjacency: forward,
231
+ alternate: reverse,
232
+ label: `${algorithm}/authority-seeded`,
233
+ onProgress: onProgress === undefined
234
+ ? undefined
235
+ : (done) => {
236
+ onProgress(r.maxIterations + done, total);
237
+ },
238
+ });
239
+ return {
240
+ hubs: normalised(latestOfKind(hubSeeded, authoritySeeded), r.dest, "sum"),
241
+ authorities: normalised(latestOfKind(authoritySeeded, hubSeeded), null, "sum"),
242
+ iterations: Math.max(hubSeeded.iterations, authoritySeeded.iterations),
243
+ converged: hubSeeded.converged && authoritySeeded.converged,
244
+ precision: "f32",
245
+ };
246
+ }
247
+ //# sourceMappingURL=spectral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spectral.js","sourceRoot":"","sources":["../../../src/algorithms/spectral.ts"],"names":[],"mappings":"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"}
@@ -18,10 +18,14 @@ export { GpuContext } from "./context.js";
18
18
  export { isSoftwareAdapter } from "./device/acquire.js";
19
19
  export type { PassTiming, Profiler } from "./kernel/profiler.js";
20
20
  export { degree } from "./algorithms/degree.js";
21
+ export { connectedComponents } from "./algorithms/components.js";
22
+ export { pageRank, personalizedPageRank } from "./algorithms/pagerank.js";
23
+ export { eigenvectorCentrality, hits, katzCentrality } from "./algorithms/spectral.js";
21
24
  export { createAccelerator } from "./accelerator.js";
22
25
  export { createForceAtlas2 } from "./layouts/forceatlas2.js";
23
26
  export { seedPositions } from "./layouts/seed.js";
24
27
  export type { AcceleratorOptions, AlgorithmAccelerator, ApspResultLike, BellmanFordResultLike, BfsResultLike, CommunityResultLike, CorenessResultLike, CpuAlgorithmOptions, EdgeScoresResultLike, GpuAccelerator, HitsResultLike, LabelResultLike, LayoutAccelerator, LayoutSimulation, MstResultLike, PageRankResultLike, ScoresResultLike, SsspResultLike, } from "./types/accelerator.js";
28
+ export type { ComponentsOptions, EigenvectorOptions, GpuHitsResult, GpuLabelResult, GpuPageRankResult, GpuScoresResult, HitsOptions, KatzOptions, PageRankOptions, } from "./types/algorithms.js";
25
29
  export type { AdapterInfoLike, AdapterSummary, GpuCaps, GpuContextOptions, LimitPolicy, PlanCaps, PlanLimits, ProbeOptions, ProbeResult, RaisableLimit, } from "./types/context.js";
26
30
  export type { ForceAtlas2Stats, ForceAtlas2TraceRecord, GpuLayoutSimulation, GpuLayoutTuning, LayoutStatsBase, RunOptions, } from "./types/layout.js";
27
31
  export type { CommonLayoutOptions, ForceAtlas2Options, FruchtermanReingoldOptions, SimulationOptions, SpringElectricalOptions, } from "./types/options.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;;AAGH,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,cAAc,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,KAAK,oBAAoB,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,YAAY,EACR,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACR,eAAe,EACf,cAAc,EACd,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACR,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,UAAU,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACR,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;;AAGH,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,cAAc,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,KAAK,oBAAoB,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,YAAY,EACR,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACR,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,GAClB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACR,eAAe,EACf,cAAc,EACd,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACR,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,UAAU,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACR,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/src/index.js CHANGED
@@ -20,6 +20,10 @@ export { GpuContext } from "./context.js";
20
20
  export { isSoftwareAdapter } from "./device/acquire.js";
21
21
  // ==================== algorithms (P1: the walking-skeleton diagnostic, spec 3.3)
22
22
  export { degree } from "./algorithms/degree.js";
23
+ // ==================== algorithms (P7: the SpMV family and WCC, spec 8.2, 8.3)
24
+ export { connectedComponents } from "./algorithms/components.js";
25
+ export { pageRank, personalizedPageRank } from "./algorithms/pagerank.js";
26
+ export { eigenvectorCentrality, hits, katzCentrality } from "./algorithms/spectral.js";
23
27
  // ==================== layouts and the accelerator (P3)
24
28
  export { createAccelerator } from "./accelerator.js";
25
29
  export { createForceAtlas2 } from "./layouts/forceatlas2.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD;;;;;;;;;;;;GAYG;AAEH,uGAAuG;AACvG,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,cAAc,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,GAEnB,MAAM,aAAa,CAAC;AAErB,uEAAuE;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,kFAAkF;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,wDAAwD;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD;;;;;;;;;;;;GAYG;AAEH,uGAAuG;AACvG,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,cAAc,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,GAEnB,MAAM,aAAa,CAAC;AAErB,uEAAuE;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,kFAAkF;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,+EAA+E;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEvF,wDAAwD;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -33,7 +33,9 @@ export declare function plan1d(items: number, wg: number, caps: PlanCaps): Dispa
33
33
  */
34
34
  export declare function plan2d(groups: number, caps: PlanCaps): DispatchPlan;
35
35
  /**
36
- * P7 (spec 5.2): groups = min(groups, maxGroups ?? (caps.software ? 64 : 4096)) with the kernel looping by stride. P1-P3: throws E_UNSUPPORTED { feature: "planGridStride" } (lead f).
36
+ * P7 (spec 5.2): groups = min(ceil(items / wg), maxGroups ?? (caps.software ? 64 : 4096), the per-dimension limit) with the kernel looping by `stride = groups * wg`; items 0 -> { x: 0, stride: null }.
37
+ * The cap is the ONE performance default in src/ that may read `caps.software` (spec 2.4, 5.2): a grid-stride map is
38
+ * order-independent, so the result never depends on it and the same body serves both adapters.
37
39
  * PLAN DECISION: `maxGroups?` is spelled `?: number` rather than the contract's `?: number | undefined` because the
38
40
  * root ESLint rule no-duplicate-type-constituents rejects the explicit undefined on an optional parameter (the call
39
41
  * signature is identical).
@@ -41,6 +43,7 @@ export declare function plan2d(groups: number, caps: PlanCaps): DispatchPlan;
41
43
  * @param wg - the workgroup size
42
44
  * @param caps - the capability table
43
45
  * @param maxGroups - the group cap
46
+ * @returns the plan
44
47
  */
45
48
  export declare function planGridStride(items: number, wg: number, caps: PlanCaps, maxGroups?: number): DispatchPlan;
46
49
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/kernel/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oGAAoG;AACpG,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AA8ED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAI9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAGnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAK1G;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAKpF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEnD"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/kernel/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oGAAoG;AACpG,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AA8ED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAI9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAGnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAS1G;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAKpF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEnD"}
@@ -101,7 +101,9 @@ export function plan2d(groups, caps) {
101
101
  return grid(groups, groups, caps);
102
102
  }
103
103
  /**
104
- * P7 (spec 5.2): groups = min(groups, maxGroups ?? (caps.software ? 64 : 4096)) with the kernel looping by stride. P1-P3: throws E_UNSUPPORTED { feature: "planGridStride" } (lead f).
104
+ * P7 (spec 5.2): groups = min(ceil(items / wg), maxGroups ?? (caps.software ? 64 : 4096), the per-dimension limit) with the kernel looping by `stride = groups * wg`; items 0 -> { x: 0, stride: null }.
105
+ * The cap is the ONE performance default in src/ that may read `caps.software` (spec 2.4, 5.2): a grid-stride map is
106
+ * order-independent, so the result never depends on it and the same body serves both adapters.
105
107
  * PLAN DECISION: `maxGroups?` is spelled `?: number` rather than the contract's `?: number | undefined` because the
106
108
  * root ESLint rule no-duplicate-type-constituents rejects the explicit undefined on an optional parameter (the call
107
109
  * signature is identical).
@@ -109,12 +111,17 @@ export function plan2d(groups, caps) {
109
111
  * @param wg - the workgroup size
110
112
  * @param caps - the capability table
111
113
  * @param maxGroups - the group cap
114
+ * @returns the plan
112
115
  */
113
116
  export function planGridStride(items, wg, caps, maxGroups) {
114
- throw new WebGpuGraphError("E_UNSUPPORTED", "planGridStride lands with the grid-stride kernels of P7 (spec 5.2)", {
115
- feature: "planGridStride",
116
- hint: `items ${items}, wg ${wg}, maxGroups ${maxGroups ?? (caps.software ? 64 : 4096)}`,
117
- });
117
+ assertCount("items", items);
118
+ assertWorkgroupSize(wg);
119
+ if (items === 0) {
120
+ return { x: 0, y: 1, z: 1, items, stride: null };
121
+ }
122
+ const cap = Math.min(maxGroups ?? (caps.software ? 64 : 4096), perDimension(caps));
123
+ const groups = Math.min(Math.ceil(items / wg), cap);
124
+ return { x: groups, y: 1, z: 1, items, stride: groups * wg };
118
125
  }
119
126
  /**
120
127
  * P4 (spec 5.4): the (x, y, 1) args a device-side finalize kernel writes for a count. P1-P3: throws E_UNSUPPORTED { feature: "planIndirect" } (lead f).
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/kernel/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/kernel/dispatch.ts"],"names":[],"mappings":"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"}
@@ -6,14 +6,16 @@
6
6
  * test and PipelineCache.warm() iterate this table. P1-T4 lands degree, reduce, fill, fa2-repulsion-exact (K3)
7
7
  * and fa2-speed-finalize (K4) together with every generated block of contract 3.10.2; P2-T2 lands
8
8
  * segmented-reduce; P3-T2 adds fa2-stats-finalize (K1), fa2-attraction (K2), fa2-integrate (K5) and
9
- * fa2-to-scene. This file is the only importer of src/wgsl/** (spec 3.2; test/layers.test.ts).
9
+ * fa2-to-scene; M8b-T3 adds the seven P7 entries: spmv-pull, pr-scale, pr-finalize, wcc-link-sample,
10
+ * wcc-link-edges, wcc-compress and wcc-sample. This file is the only importer of src/wgsl/** (spec 3.2;
11
+ * test/layers.test.ts).
10
12
  */
11
13
  import { UniformBlock } from "./kernel/struct-block.js";
12
14
  import { type BindingDecl, type OverrideDecl, type WgslModuleSpec } from "./kernel/wgsl.js";
13
15
  import { type CoreBinding } from "./memory/residency.js";
14
16
  import { type Binding } from "./types/memory.js";
15
- /** Every module id of P1-P3 (P4+ ids are appended, never renamed). */
16
- export type KernelId = "degree" | "reduce" | "fill" | "segmented-reduce" | "fa2-stats-finalize" | "fa2-attraction" | "fa2-repulsion-exact" | "fa2-speed-finalize" | "fa2-integrate" | "fa2-to-scene";
17
+ /** Every module id of P1-P3 and P7 (later ids are appended, never renamed). */
18
+ export type KernelId = "degree" | "reduce" | "fill" | "segmented-reduce" | "fa2-stats-finalize" | "fa2-attraction" | "fa2-repulsion-exact" | "fa2-speed-finalize" | "fa2-integrate" | "fa2-to-scene" | "spmv-pull" | "pr-scale" | "pr-finalize" | "wcc-link-sample" | "wcc-link-edges" | "wcc-compress" | "wcc-sample";
17
19
  /** One registry entry: everything of a WgslModuleSpec except the per-variant overrides and snippets. */
18
20
  export interface KernelEntry {
19
21
  readonly id: KernelId;
@@ -27,7 +29,7 @@ export interface KernelEntry {
27
29
  /** The snippet marker names the body carries (segmented-reduce: ["VALUE"]). */
28
30
  readonly snippetSlots: readonly string[];
29
31
  /** The phase the entry landed in (documentation and the compile-matrix filter). */
30
- readonly phase: "P1" | "P2" | "P3";
32
+ readonly phase: "P1" | "P2" | "P3" | "P7";
31
33
  }
32
34
  /** `RangeParams` (uniform, 32 B): rows `[start, end)` @0 / @4 of the dispatch, the bound arc window `[arcBase, arcEnd)` @8 / @12 (0 and arcCount when not windowed), `accumulate` @16 (1 combines into `out[i]` instead of overwriting: the P4 windowed loop), `n` @20 (the node count that bounds neighbour indices), `pad0` @24, `pad1` @28. */
33
35
  export declare const RANGE_PARAMS: UniformBlock;
@@ -43,6 +45,20 @@ export declare const FA2_STATE: UniformBlock;
43
45
  export declare const FA2_TRACE: UniformBlock;
44
46
  /** `Fa2Partial` (storage record, 64 B; spec 7.3): one per-workgroup partial -- `sum` @0 (xyz = sum of positions, w = sum of |p - centroid|^2), `min` @16, `max` @32 (w = max of |p - centroid|^2, the exact layoutRadius source), written by K5; `swingTraction` @48 (written by K3's epilogue); `dispFree` @56 (x = sum |dp| over free rows, y = the free count as an f32 <= 256, written by K5). */
45
47
  export declare const FA2_PARTIAL: UniformBlock;
48
+ /** `SpmvParams` (uniform, 32 B; spec 8.2): `n` @0 rows of the pull, the bound arc window `[arcBase, arcEnd)` @4 / @8 (0 and arcCount when not windowed), the grid-stride step `stride` @12, `alpha` @16, `beta` @20 (the `1 - alpha` term), `uniformP` @24 (the uniform personalization mass `1 / n`, 0 for a pure SpMV), `pad0` @28. */
49
+ export declare const SPMV_PARAMS: UniformBlock;
50
+ /** `PrParams` (uniform, 32 B; spec 8.2): `n` @0, `groups` @4 (the per-workgroup partial count the finalize folds), `iteration` @8 (1-based), `trackConvergence` @12 (1 records firstConverged), `convergeThreshold` @16 (`tolerance * n`, the design's `delta < tol * n`), `pad0` @20, `pad1` @24, `pad2` @28. */
51
+ export declare const PR_PARAMS: UniformBlock;
52
+ /**
53
+ * `PrPartial` (storage record, 32 B; spec 8.2). Element 0 is the HEADER, whose first 16 bytes are exactly the four
54
+ * fields the design names -- `danglingMass` @0, `delta` @4, `firstConvergedIteration` @8, `iteration` @12 -- plus
55
+ * `norm` @16, which M8b adds so HITS / eigenvector / Katz keep their normaliser on the device (PD-10). Element
56
+ * `1 + g` is workgroup g's partial: it uses `danglingMass`, `delta` and `norm` as three sums and leaves the two u32
57
+ * fields zero.
58
+ */
59
+ export declare const PR_PARTIAL: UniformBlock;
60
+ /** `WccParams` (uniform, 32 B; spec 8.3): `n` @0, `items` @4 (rows for a sample round, edges for an edge round, 1024 for the sampler), `stride` @8, `r` @12 (the neighbour index of the sampled round, and the sampler's seed), `flagIndex` @16 (the changed word inside `comp`, PD-4), `giant` @20 (`U32_MAX` before the sample), `maxSteps` @24, `pad0` @28. */
61
+ export declare const WCC_PARAMS: UniformBlock;
46
62
  /** THE registry (spec 3.5): every entry, keyed by id. */
47
63
  export declare const KERNELS: Readonly<Record<KernelId, KernelEntry>>;
48
64
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"kernels.d.ts","sourceRoot":"","sources":["../../src/kernels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAYjD,sEAAsE;AACtE,MAAM,MAAM,QAAQ,GACd,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,eAAe,GACf,cAAc,CAAC;AAErB,wGAAwG;AACxG,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CACtC;AAID,kVAAkV;AAClV,eAAO,MAAM,YAAY,EAAE,YASzB,CAAC;AAEH,wJAAwJ;AACxJ,eAAO,MAAM,aAAa,EAAE,YAK1B,CAAC;AAEH,0IAA0I;AAC1I,eAAO,MAAM,WAAW,EAAE,YAKxB,CAAC;AAEH,mbAAmb;AACnb,eAAO,MAAM,UAAU,EAAE,YAmBvB,CAAC;AAEH,ofAAof;AACpf,eAAO,MAAM,SAAS,EAAE,YA8BvB,CAAC;AAEF,yVAAyV;AACzV,eAAO,MAAM,SAAS,EAAE,YAavB,CAAC;AAEF,sYAAsY;AACtY,eAAO,MAAM,WAAW,EAAE,YAUzB,CAAC;AA2OF,yDAAyD;AACzD,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAuD,CAAC;AAsBpH;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACtB,EAAE,EAAE,QAAQ,EACZ,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EACtD,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5C,cAAc,CAYhB;AAkBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CACzB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACzB,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CASrE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACzB,QAAQ,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAGvD"}
1
+ {"version":3,"file":"kernels.d.ts","sourceRoot":"","sources":["../../src/kernels.ts"],"names":[],"mappings":"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"}