@danielsimonjr/mathts-matrix 0.7.1 → 0.7.2
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/dist/backends/Backend.d.ts +146 -0
- package/dist/backends/Backend.d.ts.map +1 -0
- package/dist/backends/BackendManager.d.ts +189 -0
- package/dist/backends/BackendManager.d.ts.map +1 -0
- package/dist/backends/GPUBackend.d.ts +128 -0
- package/dist/backends/GPUBackend.d.ts.map +1 -0
- package/dist/backends/GPUMatrixBackend.d.ts +123 -0
- package/dist/backends/GPUMatrixBackend.d.ts.map +1 -0
- package/dist/backends/JSBackend.d.ts +93 -0
- package/dist/backends/JSBackend.d.ts.map +1 -0
- package/dist/backends/ParallelBackend.d.ts +131 -0
- package/dist/backends/ParallelBackend.d.ts.map +1 -0
- package/dist/backends/WASMBackend.d.ts +156 -0
- package/dist/backends/WASMBackend.d.ts.map +1 -0
- package/dist/backends/WasmLoader.d.ts +326 -0
- package/dist/backends/WasmLoader.d.ts.map +1 -0
- package/dist/backends/gpu/BatchExecutor.d.ts +190 -0
- package/dist/backends/gpu/BatchExecutor.d.ts.map +1 -0
- package/dist/backends/gpu/Sync.d.ts +167 -0
- package/dist/backends/gpu/Sync.d.ts.map +1 -0
- package/dist/backends/gpu/builtin-shaders.d.ts +178 -0
- package/dist/backends/gpu/builtin-shaders.d.ts.map +1 -0
- package/dist/backends/gpu/index.d.ts +13 -0
- package/dist/backends/gpu/index.d.ts.map +1 -0
- package/dist/backends/index.d.ts +18 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/register-backends.d.ts +18 -0
- package/dist/backends/register-backends.d.ts.map +1 -0
- package/dist/backends/wasm/detect.d.ts +58 -0
- package/dist/backends/wasm/detect.d.ts.map +1 -0
- package/dist/backends/wasm/fft-wasm.d.ts +120 -0
- package/dist/backends/wasm/fft-wasm.d.ts.map +1 -0
- package/dist/backends/wasm/index.d.ts +9 -0
- package/dist/backends/wasm/index.d.ts.map +1 -0
- package/dist/backends/wasm/integrity.d.ts +18 -0
- package/dist/backends/wasm/integrity.d.ts.map +1 -0
- package/dist/backends/wasm/resolve.d.ts +12 -0
- package/dist/backends/wasm/resolve.d.ts.map +1 -0
- package/dist/{chunk-4VMDO6W2.js → chunk-PNKVD2UK.js} +2 -7
- package/dist/config.d.ts +145 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/index.d.ts +14 -3037
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -9
- package/dist/{integrity-LIWCCDIJ.js → integrity-IBNQNHXP.js} +1 -1
- package/dist/operations/cholesky.d.ts +24 -0
- package/dist/operations/cholesky.d.ts.map +1 -0
- package/dist/operations/common.d.ts +61 -0
- package/dist/operations/common.d.ts.map +1 -0
- package/dist/operations/condest.d.ts +27 -0
- package/dist/operations/condest.d.ts.map +1 -0
- package/dist/operations/eig-wasm.d.ts +35 -0
- package/dist/operations/eig-wasm.d.ts.map +1 -0
- package/dist/operations/eig.d.ts +75 -0
- package/dist/operations/eig.d.ts.map +1 -0
- package/dist/operations/expm.d.ts +46 -0
- package/dist/operations/expm.d.ts.map +1 -0
- package/dist/operations/index.d.ts +21 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/logm.d.ts +59 -0
- package/dist/operations/logm.d.ts.map +1 -0
- package/dist/operations/lu.d.ts +51 -0
- package/dist/operations/lu.d.ts.map +1 -0
- package/dist/operations/pinv.d.ts +36 -0
- package/dist/operations/pinv.d.ts.map +1 -0
- package/dist/operations/qr-family.d.ts +52 -0
- package/dist/operations/qr-family.d.ts.map +1 -0
- package/dist/operations/qr-pivoted.d.ts +39 -0
- package/dist/operations/qr-pivoted.d.ts.map +1 -0
- package/dist/operations/qr.d.ts +35 -0
- package/dist/operations/qr.d.ts.map +1 -0
- package/dist/operations/schur.d.ts +58 -0
- package/dist/operations/schur.d.ts.map +1 -0
- package/dist/operations/sqrtm.d.ts +76 -0
- package/dist/operations/sqrtm.d.ts.map +1 -0
- package/dist/operations/svd-wasm.d.ts +23 -0
- package/dist/operations/svd-wasm.d.ts.map +1 -0
- package/dist/operations/svd.d.ts +70 -0
- package/dist/operations/svd.d.ts.map +1 -0
- package/dist/parallel-matrix.d.ts +222 -0
- package/dist/parallel-matrix.d.ts.map +1 -0
- package/dist/{resolve-DDCEWHWX.js → resolve-2SX6WJ6R.js} +1 -1
- package/dist/typed-operations.d.ts +161 -0
- package/dist/typed-operations.d.ts.map +1 -0
- package/dist/types/DenseMatrix.d.ts +213 -0
- package/dist/types/DenseMatrix.d.ts.map +1 -0
- package/dist/types/Matrix.d.ts +188 -0
- package/dist/types/Matrix.d.ts.map +1 -0
- package/dist/types/SparseMatrix.d.ts +214 -0
- package/dist/types/SparseMatrix.d.ts.map +1 -0
- package/dist/types/dense/arithmetic.d.ts +8 -0
- package/dist/types/dense/arithmetic.d.ts.map +1 -0
- package/dist/types/dense/reduction.d.ts +8 -0
- package/dist/types/dense/reduction.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/wasm/mathts-as.wasm +0 -0
- package/dist/wasm/wasm-manifest.json +1 -1
- package/package.json +70 -70
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WASM Loader - Loads and manages WebAssembly modules
|
|
3
|
+
* Provides a bridge between JavaScript/TypeScript and compiled WASM
|
|
4
|
+
*
|
|
5
|
+
* Optimizations:
|
|
6
|
+
* - Singleton pattern with module caching
|
|
7
|
+
* - Streaming compilation in browsers (WebAssembly.instantiateStreaming)
|
|
8
|
+
* - Memory pooling for frequent allocations
|
|
9
|
+
* - Compiled module caching for faster re-instantiation
|
|
10
|
+
* - Configurable size thresholds for JS fallback
|
|
11
|
+
*
|
|
12
|
+
* AssemblyScript managed-runtime allocation
|
|
13
|
+
* -----------------------------------------
|
|
14
|
+
* AssemblyScript is the sole WASM backend (`mathts-as.wasm`); the legacy
|
|
15
|
+
* second toolchain was removed in the WASM-backend migration (complete 2026-06-26).
|
|
16
|
+
*
|
|
17
|
+
* The AS managed runtime allocates buffers via `__new(byteLength, id)` and
|
|
18
|
+
* its typed-array exports expect a 12-byte *header* pointer (id=5 for
|
|
19
|
+
* Float64Array, id=4 for Int32Array). The header holds
|
|
20
|
+
* [dataStart, dataStart, byteLength] in little-endian u32s. The data block
|
|
21
|
+
* (id=1 = ArrayBuffer) is allocated separately; we pin both so the GC can't
|
|
22
|
+
* reclaim them.
|
|
23
|
+
*
|
|
24
|
+
* Callers receive an opaque `Allocation` handle whose `.ptr` is the header
|
|
25
|
+
* pointer to pass to the WASM function and whose `.array` is a JS view over
|
|
26
|
+
* the data region.
|
|
27
|
+
*/
|
|
28
|
+
import type { LoadingMetrics } from '@danielsimonjr/mathts-core/internal';
|
|
29
|
+
export type { LoadingMetrics };
|
|
30
|
+
export interface WasmModule {
|
|
31
|
+
multiplyDense: (aPtr: number, aRows: number, aCols: number, bPtr: number, bRows: number, bCols: number, resultPtr: number) => void;
|
|
32
|
+
multiplyDenseSIMD: (aPtr: number, aRows: number, aCols: number, bPtr: number, bRows: number, bCols: number, resultPtr: number) => void;
|
|
33
|
+
multiplyVector: (aPtr: number, aRows: number, aCols: number, xPtr: number, resultPtr: number) => void;
|
|
34
|
+
transpose: (dataPtr: number, rows: number, cols: number, resultPtr: number) => void;
|
|
35
|
+
add: (aPtr: number, bPtr: number, size: number, resultPtr: number) => void;
|
|
36
|
+
subtract: (aPtr: number, bPtr: number, size: number, resultPtr: number) => void;
|
|
37
|
+
scalarMultiply: (aPtr: number, scalar: number, size: number, resultPtr: number) => void;
|
|
38
|
+
dotProduct: (aPtr: number, bPtr: number, size: number) => number;
|
|
39
|
+
luDecomposition: (aPtr: number, n: number, permPtr: number) => number;
|
|
40
|
+
qrDecomposition: (aPtr: number, m: number, n: number, qPtr: number) => void;
|
|
41
|
+
choleskyDecomposition: (aPtr: number, n: number, lPtr: number) => number;
|
|
42
|
+
schur: (aPtr: number, n: number, maxIter: number, tol: number, qPtr: number, tPtr: number, workPtr: number) => number;
|
|
43
|
+
luSolve: (luPtr: number, n: number, permPtr: number, bPtr: number, xPtr: number) => void;
|
|
44
|
+
luDeterminant: (luPtr: number, n: number, permPtr: number) => number;
|
|
45
|
+
laDet: (aPtr: number, n: number, workPtr: number) => number;
|
|
46
|
+
laInv: (aPtr: number, n: number, resultPtr: number, workPtr: number) => number;
|
|
47
|
+
laInv2x2: (aPtr: number, resultPtr: number) => number;
|
|
48
|
+
laInv3x3: (aPtr: number, resultPtr: number) => number;
|
|
49
|
+
laCond1: (aPtr: number, n: number, workPtr: number) => number;
|
|
50
|
+
laCondInf: (aPtr: number, n: number, workPtr: number) => number;
|
|
51
|
+
laKron: (aPtr: number, aRows: number, aCols: number, bPtr: number, bRows: number, bCols: number) => number;
|
|
52
|
+
laDot: (aPtr: number, bPtr: number, n: number) => number;
|
|
53
|
+
laCross: (aPtr: number, bPtr: number) => number;
|
|
54
|
+
laNorm2: (xPtr: number, n: number) => number;
|
|
55
|
+
laSolve: (aPtr: number, bPtr: number, n: number, resultPtr: number, workPtr: number) => number;
|
|
56
|
+
laLsolve: (lPtr: number, bPtr: number, n: number, resultPtr: number) => number;
|
|
57
|
+
laUsolve: (uPtr: number, bPtr: number, n: number, resultPtr: number) => number;
|
|
58
|
+
eigsSymmetric: (matrixPtr: number, n: number, precision: number, eigenvaluesPtr: number, eigenvectorsPtr: number, workPtr: number) => number;
|
|
59
|
+
powerIteration: (matrixPtr: number, n: number, eigenvaluePtr: number, eigenvectorPtr: number, workPtr: number, maxIterations: number, tolerance: number) => number;
|
|
60
|
+
spectralRadius: (matrixPtr: number, n: number, workPtr: number, maxIterations: number, tolerance: number) => number;
|
|
61
|
+
inverseIteration: (matrixPtr: number, n: number, shift: number, eigenvectorPtr: number, workPtr: number, maxIterations: number, tolerance: number) => number;
|
|
62
|
+
balanceMatrix: (matrixPtr: number, n: number, scalePtr: number, transformPtr: number) => void;
|
|
63
|
+
reduceToHessenberg: (matrixPtr: number, n: number, transformPtr: number) => void;
|
|
64
|
+
eigenvalues2x2: (a: number, b: number, c: number, d: number, realPtr: number, imagPtr: number) => void;
|
|
65
|
+
qrIterationStep: (matrixPtr: number, n: number, workPtr: number, shift: number) => void;
|
|
66
|
+
qrAlgorithm: (matrixPtr: number, n: number, eigenvaluesRealPtr: number, eigenvaluesImagPtr: number, workPtr: number, maxIterations: number, tolerance: number) => number;
|
|
67
|
+
hessenbergQRStep: (matrixPtr: number, n: number, startRow: number, endRow: number, shift: number) => void;
|
|
68
|
+
expm: (matrixPtr: number, n: number, resultPtr: number, workPtr: number) => number;
|
|
69
|
+
expmSmall: (matrixPtr: number, n: number, resultPtr: number, workPtr: number, terms: number) => void;
|
|
70
|
+
expmv: (matrixPtr: number, n: number, vectorPtr: number, resultPtr: number, workPtr: number, t: number) => void;
|
|
71
|
+
sqrtm: (matrixPtr: number, n: number, resultPtr: number, tolerance: number, maxIterations: number, workPtr: number) => number;
|
|
72
|
+
sqrtmNewtonSchulz: (matrixPtr: number, n: number, resultPtr: number, workPtr: number, maxIterations: number, tolerance: number) => number;
|
|
73
|
+
sqrtmCholesky: (matrixPtr: number, n: number, resultPtr: number, workPtr: number) => number;
|
|
74
|
+
sparseLu: (valuesPtr: number, rowIndPtr: number, colPtrPtr: number, n: number, nnz: number, lValuesPtr: number, lRowIndPtr: number, lColPtrPtr: number, uValuesPtr: number, uRowIndPtr: number, uColPtrPtr: number, permPtr: number, workPtr: number) => number;
|
|
75
|
+
sparseForwardSolve: (lValuesPtr: number, lRowIndPtr: number, lColPtrPtr: number, n: number, bPtr: number, xPtr: number) => void;
|
|
76
|
+
sparseBackwardSolve: (uValuesPtr: number, uRowIndPtr: number, uColPtrPtr: number, n: number, bPtr: number, xPtr: number) => void;
|
|
77
|
+
sparseLuSolve: (lValuesPtr: number, lRowIndPtr: number, lColPtrPtr: number, uValuesPtr: number, uRowIndPtr: number, uColPtrPtr: number, n: number, permPtr: number, bPtr: number, xPtr: number, workPtr: number) => void;
|
|
78
|
+
sparseChol: (valuesPtr: number, rowIndPtr: number, colPtrPtr: number, n: number, nnz: number, lValuesPtr: number, lRowIndPtr: number, lColPtrPtr: number, parentPtr: number, workPtr: number) => number;
|
|
79
|
+
sparseCholSolve: (lValuesPtr: number, lRowIndPtr: number, lColPtrPtr: number, n: number, bPtr: number, xPtr: number, workPtr: number) => void;
|
|
80
|
+
eliminationTree: (rowIndPtr: number, colPtrPtr: number, n: number, parentPtr: number) => void;
|
|
81
|
+
columnCounts: (rowIndPtr: number, colPtrPtr: number, n: number, parentPtr: number, countsPtr: number, workPtr: number) => void;
|
|
82
|
+
amd: (colPtrPtr: number, rowIdxPtr: number, n: number, permPtr: number, workPtr: number) => void;
|
|
83
|
+
amdAggressive: (colPtrPtr: number, rowIdxPtr: number, n: number, permPtr: number, workPtr: number) => void;
|
|
84
|
+
symbolicCholesky: (indexPtr: number, ptrPtr: number, n: number, parentPtr: number, postPtr: number, colCountPtr: number, workPtr: number) => void;
|
|
85
|
+
simdDotF64: (aPtr: number, bPtr: number, length: number) => number;
|
|
86
|
+
simdSumF64: (aPtr: number, length: number) => number;
|
|
87
|
+
simdSumSquaresF64: (aPtr: number, length: number) => number;
|
|
88
|
+
simdNormF64: (aPtr: number, length: number) => number;
|
|
89
|
+
simdMinF64: (aPtr: number, length: number) => number;
|
|
90
|
+
simdMaxF64: (aPtr: number, length: number) => number;
|
|
91
|
+
simdMeanF64: (aPtr: number, length: number) => number;
|
|
92
|
+
simdVarianceF64: (aPtr: number, length: number, ddof: number) => number;
|
|
93
|
+
simdStdF64: (aPtr: number, length: number, ddof: number) => number;
|
|
94
|
+
simdAddF64: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
95
|
+
simdSubF64: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
96
|
+
simdMulF64: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
97
|
+
simdScaleF64: (aPtr: number, scalar: number, resultPtr: number, length: number) => void;
|
|
98
|
+
simdAbsF64: (aPtr: number, resultPtr: number, length: number) => void;
|
|
99
|
+
simdMatMulF64: (aPtr: number, bPtr: number, cPtr: number, m: number, k: number, n: number) => void;
|
|
100
|
+
gcdArray: (aPtr: number, n: number) => number;
|
|
101
|
+
hypotArray: (aPtr: number, n: number) => number;
|
|
102
|
+
norm1: (aPtr: number, n: number) => number;
|
|
103
|
+
norm2: (aPtr: number, n: number) => number;
|
|
104
|
+
normInf: (aPtr: number, n: number) => number;
|
|
105
|
+
normP: (aPtr: number, n: number, p: number) => number;
|
|
106
|
+
erfArray: (aPtr: number, n: number, resultPtr: number) => void;
|
|
107
|
+
zetaArray: (aPtr: number, n: number, resultPtr: number) => void;
|
|
108
|
+
gammaArray: (aPtr: number, n: number, resultPtr: number) => void;
|
|
109
|
+
lgammaArray: (aPtr: number, n: number, resultPtr: number) => void;
|
|
110
|
+
partitionSelect: (dataPtr: number, n: number, k: number, workPtr: number) => number;
|
|
111
|
+
distanceND: (p1Ptr: number, p2Ptr: number, n: number) => number;
|
|
112
|
+
distance2D: (x1: number, y1: number, x2: number, y2: number) => number;
|
|
113
|
+
distance3D: (x1: number, y1: number, z1: number, x2: number, y2: number, z2: number) => number;
|
|
114
|
+
intersect2DLines: (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, resultPtr: number) => void;
|
|
115
|
+
intersect2DInfiniteLines: (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, resultPtr: number) => void;
|
|
116
|
+
distancePointToLine2D: (px: number, py: number, x1: number, y1: number, x2: number, y2: number) => number;
|
|
117
|
+
statsMean: (aPtr: number, n: number) => number;
|
|
118
|
+
statsMedian: (aPtr: number, n: number) => number;
|
|
119
|
+
statsSum: (aPtr: number, n: number) => number;
|
|
120
|
+
statsProd: (aPtr: number, n: number) => number;
|
|
121
|
+
statsMin: (aPtr: number, n: number) => number;
|
|
122
|
+
statsMax: (aPtr: number, n: number) => number;
|
|
123
|
+
statsCumsum: (aPtr: number, n: number) => void;
|
|
124
|
+
statsMad: (aPtr: number, n: number) => number;
|
|
125
|
+
statsCorrelation: (aPtr: number, bPtr: number, n: number) => number;
|
|
126
|
+
statsCovariance: (aPtr: number, bPtr: number, n: number, ddof: number) => number;
|
|
127
|
+
freqz: (bPtr: number, bLen: number, aPtr: number, aLen: number, wPtr: number, wLen: number, hRealPtr: number, hImagPtr: number) => void;
|
|
128
|
+
fft: (dataPtr: number, n: number, inverse: number) => void;
|
|
129
|
+
fft2d: (dataPtr: number, rows: number, cols: number, inverse: number) => void;
|
|
130
|
+
convolve: (signalPtr: number, n: number, kernelPtr: number, m: number, resultPtr: number) => void;
|
|
131
|
+
rfft: (dataPtr: number, n: number, resultPtr: number) => void;
|
|
132
|
+
irfft: (dataPtr: number, n: number, resultPtr: number) => void;
|
|
133
|
+
isPowerOf2: (n: number) => number;
|
|
134
|
+
vectorAdd: (aPtr: number, bPtr: number, n: number, resultPtr: number) => void;
|
|
135
|
+
vectorScale: (aPtr: number, scalar: number, n: number, resultPtr: number) => void;
|
|
136
|
+
vectorCopy: (srcPtr: number, n: number, dstPtr: number) => void;
|
|
137
|
+
maxError: (errorPtr: number, n: number) => number;
|
|
138
|
+
computeStepAdjustment: (maxErr: number, tol: number, order: number, minDelta: number, maxDelta: number) => number;
|
|
139
|
+
rk45Step: (yPtr: number, t: number, h: number, n: number, kPtr: number, yNextPtr: number, yErrorPtr: number) => void;
|
|
140
|
+
rk23Step: (yPtr: number, t: number, h: number, n: number, kPtr: number, yNextPtr: number, yErrorPtr: number) => void;
|
|
141
|
+
bitAndArray?: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
142
|
+
bitOrArray?: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
143
|
+
bitXorArray?: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
144
|
+
bitNotArray?: (inputPtr: number, resultPtr: number, length: number) => void;
|
|
145
|
+
leftShiftArrayPerElement?: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
146
|
+
rightArithShiftArrayPerElement?: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
147
|
+
rightLogShiftArrayPerElement?: (aPtr: number, bPtr: number, resultPtr: number, length: number) => void;
|
|
148
|
+
bitAnd_i32_array?: (a: Int32Array, b: Int32Array, result: Int32Array) => void;
|
|
149
|
+
bitOr_i32_array?: (a: Int32Array, b: Int32Array, result: Int32Array) => void;
|
|
150
|
+
bitXor_i32_array?: (a: Int32Array, b: Int32Array, result: Int32Array) => void;
|
|
151
|
+
bitNot_i32_array?: (a: Int32Array, result: Int32Array) => void;
|
|
152
|
+
leftShift_i32_array?: (a: Int32Array, b: Int32Array, result: Int32Array) => void;
|
|
153
|
+
rightArithShift_i32_array?: (a: Int32Array, b: Int32Array, result: Int32Array) => void;
|
|
154
|
+
rightLogShift_i32_array?: (a: Int32Array, b: Int32Array, result: Int32Array) => void;
|
|
155
|
+
matrix_lu_decompose?: (aHdr: number, n: number, lOutHdr: number, uOutHdr: number, permOutHdr: number) => number;
|
|
156
|
+
matrix_qr_decompose?: (aHdr: number, m: number, n: number, qOutHdr: number, rOutHdr: number) => number;
|
|
157
|
+
matrix_cholesky?: (aHdr: number, n: number, lOutHdr: number) => number;
|
|
158
|
+
matrix_inverse?: (aHdr: number, n: number, resultHdr: number, workHdr: number) => number;
|
|
159
|
+
matrix_determinant?: (aHdr: number, n: number, workHdr: number) => number;
|
|
160
|
+
__new: (size: number, id: number) => number;
|
|
161
|
+
__pin: (ptr: number) => number;
|
|
162
|
+
__unpin: (ptr: number) => void;
|
|
163
|
+
__collect: () => void;
|
|
164
|
+
memory: WebAssembly.Memory;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Opaque allocation handle returned by `allocateFloat64Array` and friends.
|
|
168
|
+
*
|
|
169
|
+
* Callers treat `ptr` as the typed-array *header* pointer to pass to WASM
|
|
170
|
+
* functions. The `array` view is positioned over the data region so callers
|
|
171
|
+
* can `set()` and read it as JS expects.
|
|
172
|
+
*/
|
|
173
|
+
export interface Allocation<TArray extends Float64Array | Int32Array> {
|
|
174
|
+
/** Header pointer to pass to WASM functions. */
|
|
175
|
+
readonly ptr: number;
|
|
176
|
+
/** JS-side view of the data region. */
|
|
177
|
+
array: TArray;
|
|
178
|
+
/** Element length (independent of byte-width). */
|
|
179
|
+
readonly length: number;
|
|
180
|
+
/** Internal: the data-block offset (the ArrayBuffer the header points at). */
|
|
181
|
+
readonly dataPtr: number;
|
|
182
|
+
}
|
|
183
|
+
export declare class WasmLoader {
|
|
184
|
+
private static instance;
|
|
185
|
+
private wasmModule;
|
|
186
|
+
private compiledModule;
|
|
187
|
+
private loading;
|
|
188
|
+
private isNode;
|
|
189
|
+
private lastMetrics;
|
|
190
|
+
private float64Pool;
|
|
191
|
+
private int32Pool;
|
|
192
|
+
private readonly poolSizeThreshold;
|
|
193
|
+
private constructor();
|
|
194
|
+
static getInstance(): WasmLoader;
|
|
195
|
+
/**
|
|
196
|
+
* Load the WASM module
|
|
197
|
+
*/
|
|
198
|
+
load(wasmPath?: string): Promise<WasmModule>;
|
|
199
|
+
/**
|
|
200
|
+
* Precompile the WASM module without instantiation
|
|
201
|
+
* Useful for build-time or startup optimization
|
|
202
|
+
*/
|
|
203
|
+
precompile(wasmPath?: string): Promise<void>;
|
|
204
|
+
private loadModule;
|
|
205
|
+
/**
|
|
206
|
+
* Get the WASM binary path. AssemblyScript is the sole WASM backend
|
|
207
|
+
* (`mathts-as.wasm`); the legacy second toolchain was removed in the
|
|
208
|
+
* WASM-backend migration (complete 2026-06-26).
|
|
209
|
+
*
|
|
210
|
+
* Resolution is package-relative and CWD-independent: the packaged artifact
|
|
211
|
+
* (`dist/wasm/`) is preferred via `resolvePackagedWasm`; when absent, the
|
|
212
|
+
* canonical expected location is returned so the missing-binary warning is
|
|
213
|
+
* actionable (see `defaultWasmLocation` in wasm/resolve.ts — B-3).
|
|
214
|
+
*/
|
|
215
|
+
private getDefaultWasmPath;
|
|
216
|
+
private loadNodeWasm;
|
|
217
|
+
private loadBrowserWasm;
|
|
218
|
+
private getImports;
|
|
219
|
+
/**
|
|
220
|
+
* Get the loaded WASM module
|
|
221
|
+
*/
|
|
222
|
+
getModule(): WasmModule | null;
|
|
223
|
+
/**
|
|
224
|
+
* Get the compiled WASM module (for caching/serialization)
|
|
225
|
+
*/
|
|
226
|
+
getCompiledModule(): WebAssembly.Module | null;
|
|
227
|
+
/**
|
|
228
|
+
* Check if WASM is loaded
|
|
229
|
+
*/
|
|
230
|
+
isLoaded(): boolean;
|
|
231
|
+
/**
|
|
232
|
+
* Check if WASM is precompiled
|
|
233
|
+
*/
|
|
234
|
+
isPrecompiled(): boolean;
|
|
235
|
+
/**
|
|
236
|
+
* Get loading performance metrics
|
|
237
|
+
*/
|
|
238
|
+
getLoadingMetrics(): LoadingMetrics | null;
|
|
239
|
+
/**
|
|
240
|
+
* Allocate Float64Array in WASM memory and copy `data` into it.
|
|
241
|
+
* Uses memory pooling.
|
|
242
|
+
*/
|
|
243
|
+
allocateFloat64Array(data: number[] | Float64Array): Allocation<Float64Array>;
|
|
244
|
+
/**
|
|
245
|
+
* Decode a managed Float64Array RETURNED by an AssemblyScript export
|
|
246
|
+
* (e.g. the `matrix_lu_decompose` / `matrix_qr_decompose` outputs) into a fresh JS copy.
|
|
247
|
+
*
|
|
248
|
+
* AS exports that return a `Float64Array` hand back the typed-array
|
|
249
|
+
* *header* pointer. The header is a 12-byte block laid out as
|
|
250
|
+
* `[buffer, dataStart, byteLength]` (little-endian u32s) — the same shape
|
|
251
|
+
* the loader writes in `makeAsFloat64`. We read `dataStart`/`byteLength`
|
|
252
|
+
* and copy the data region out so it survives any later reuse of WASM
|
|
253
|
+
* memory.
|
|
254
|
+
*/
|
|
255
|
+
readReturnedFloat64Array(headerPtr: number): Float64Array;
|
|
256
|
+
/**
|
|
257
|
+
* Allocate Float64Array without copying data (for output buffers)
|
|
258
|
+
*/
|
|
259
|
+
allocateFloat64ArrayEmpty(length: number): Allocation<Float64Array>;
|
|
260
|
+
/**
|
|
261
|
+
* Allocate Int32Array in WASM memory and copy `data` into it.
|
|
262
|
+
*/
|
|
263
|
+
allocateInt32Array(data: number[] | Int32Array): Allocation<Int32Array>;
|
|
264
|
+
/**
|
|
265
|
+
* Allocate Int32Array without copying data (for output buffers)
|
|
266
|
+
*/
|
|
267
|
+
allocateInt32ArrayEmpty(length: number): Allocation<Int32Array>;
|
|
268
|
+
private allocateAsFloat64;
|
|
269
|
+
private allocateAsInt32;
|
|
270
|
+
private makeAsFloat64;
|
|
271
|
+
private makeAsInt32;
|
|
272
|
+
/**
|
|
273
|
+
* Find a pool entry whose data region is large enough; returns null when
|
|
274
|
+
* no suitable entry is available.
|
|
275
|
+
*/
|
|
276
|
+
private acquireFromAsPool;
|
|
277
|
+
/**
|
|
278
|
+
* Return an allocation to the pool for reuse.
|
|
279
|
+
*
|
|
280
|
+
* `isFloat64` exists for backwards compatibility — callers can still
|
|
281
|
+
* pass it positionally to disambiguate the pool to use on the AS path.
|
|
282
|
+
* Prefer `releaseAllocation` for new code, which discovers the pool
|
|
283
|
+
* automatically.
|
|
284
|
+
*/
|
|
285
|
+
release(ptr: number, isFloat64?: boolean): void;
|
|
286
|
+
/**
|
|
287
|
+
* Free allocated memory (immediate, bypasses pool): unpin the header pointer.
|
|
288
|
+
*/
|
|
289
|
+
free(ptr: number): void;
|
|
290
|
+
/**
|
|
291
|
+
* Clear the memory pool
|
|
292
|
+
*/
|
|
293
|
+
clearPool(): void;
|
|
294
|
+
/**
|
|
295
|
+
* Get pool statistics
|
|
296
|
+
*/
|
|
297
|
+
getPoolStats(): {
|
|
298
|
+
float64: {
|
|
299
|
+
total: number;
|
|
300
|
+
inUse: number;
|
|
301
|
+
totalBytes: number;
|
|
302
|
+
};
|
|
303
|
+
int32: {
|
|
304
|
+
total: number;
|
|
305
|
+
inUse: number;
|
|
306
|
+
totalBytes: number;
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
/**
|
|
310
|
+
* Run garbage collection.
|
|
311
|
+
*/
|
|
312
|
+
collect(): void;
|
|
313
|
+
/**
|
|
314
|
+
* Reset the loader (for testing)
|
|
315
|
+
*/
|
|
316
|
+
reset(): void;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Global WASM loader instance
|
|
320
|
+
*/
|
|
321
|
+
export declare const wasmLoader: WasmLoader;
|
|
322
|
+
/**
|
|
323
|
+
* Initialize WASM module (call once at startup)
|
|
324
|
+
*/
|
|
325
|
+
export declare function initWasm(wasmPath?: string): Promise<WasmModule>;
|
|
326
|
+
//# sourceMappingURL=WasmLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WasmLoader.d.ts","sourceRoot":"","sources":["../../src/backends/WasmLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GPU Batch Executor
|
|
3
|
+
*
|
|
4
|
+
* Manages batched GPU command submission for reduced overhead.
|
|
5
|
+
* Queues multiple operations and executes them together for efficiency.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { GPUContext } from '@danielsimonjr/mathts-gpu';
|
|
10
|
+
import type { ShaderManager } from '@danielsimonjr/mathts-gpu';
|
|
11
|
+
import type { BufferPool } from '@danielsimonjr/mathts-gpu';
|
|
12
|
+
/**
|
|
13
|
+
* Operation types that can be batched
|
|
14
|
+
*/
|
|
15
|
+
export type BatchOperationType = 'add' | 'subtract' | 'multiply' | 'divide' | 'scale' | 'matmul' | 'transpose' | 'reduce_sum' | 'reduce_max' | 'reduce_min';
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for a batched operation
|
|
18
|
+
*/
|
|
19
|
+
export interface BatchOperation {
|
|
20
|
+
/** Operation type */
|
|
21
|
+
type: BatchOperationType;
|
|
22
|
+
/** Input buffer A */
|
|
23
|
+
inputA: GPUBuffer;
|
|
24
|
+
/** Input buffer B (optional for unary ops) */
|
|
25
|
+
inputB?: GPUBuffer;
|
|
26
|
+
/** Output buffer */
|
|
27
|
+
output: GPUBuffer;
|
|
28
|
+
/** Dimensions */
|
|
29
|
+
dimensions: {
|
|
30
|
+
rows: number;
|
|
31
|
+
cols: number;
|
|
32
|
+
k?: number;
|
|
33
|
+
};
|
|
34
|
+
/** Scalar value (for scale operation) */
|
|
35
|
+
scalar?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Result of batch execution
|
|
39
|
+
*/
|
|
40
|
+
export interface BatchResult {
|
|
41
|
+
/** Success status */
|
|
42
|
+
success: boolean;
|
|
43
|
+
/** Number of operations executed */
|
|
44
|
+
operationCount: number;
|
|
45
|
+
/** Execution time in milliseconds */
|
|
46
|
+
duration: number;
|
|
47
|
+
/** Error message if failed */
|
|
48
|
+
error?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Options for batch execution
|
|
52
|
+
*/
|
|
53
|
+
export interface BatchOptions {
|
|
54
|
+
/** Maximum operations per batch before auto-flush */
|
|
55
|
+
maxBatchSize?: number;
|
|
56
|
+
/** Auto-flush when batch is full */
|
|
57
|
+
autoFlush?: boolean;
|
|
58
|
+
/** Wait for GPU completion before returning */
|
|
59
|
+
waitForCompletion?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* GPU Batch Executor
|
|
63
|
+
*
|
|
64
|
+
* Accumulates GPU operations and executes them in batches to reduce
|
|
65
|
+
* command submission overhead. Uses command buffers efficiently.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const executor = new BatchExecutor(context, shaders, bufferPool);
|
|
70
|
+
*
|
|
71
|
+
* executor.add(a, b, output, { rows: 100, cols: 100 });
|
|
72
|
+
* executor.matmul(a, b, output, { rows: 100, cols: 100, k: 100 });
|
|
73
|
+
*
|
|
74
|
+
* await executor.flush();
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare class BatchExecutor {
|
|
78
|
+
private context;
|
|
79
|
+
private shaders;
|
|
80
|
+
private bufferPool;
|
|
81
|
+
private operations;
|
|
82
|
+
private options;
|
|
83
|
+
/**
|
|
84
|
+
* Create a new batch executor
|
|
85
|
+
*/
|
|
86
|
+
constructor(context: GPUContext, shaders: ShaderManager, bufferPool: BufferPool, options?: BatchOptions);
|
|
87
|
+
/**
|
|
88
|
+
* Get current batch size
|
|
89
|
+
*/
|
|
90
|
+
get size(): number;
|
|
91
|
+
/**
|
|
92
|
+
* Check if batch is empty
|
|
93
|
+
*/
|
|
94
|
+
get isEmpty(): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Check if batch is full
|
|
97
|
+
*/
|
|
98
|
+
get isFull(): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Queue an add operation
|
|
101
|
+
*/
|
|
102
|
+
add(inputA: GPUBuffer, inputB: GPUBuffer, output: GPUBuffer, dimensions: {
|
|
103
|
+
rows: number;
|
|
104
|
+
cols: number;
|
|
105
|
+
}): void;
|
|
106
|
+
/**
|
|
107
|
+
* Queue a subtract operation
|
|
108
|
+
*/
|
|
109
|
+
subtract(inputA: GPUBuffer, inputB: GPUBuffer, output: GPUBuffer, dimensions: {
|
|
110
|
+
rows: number;
|
|
111
|
+
cols: number;
|
|
112
|
+
}): void;
|
|
113
|
+
/**
|
|
114
|
+
* Queue an element-wise multiply operation
|
|
115
|
+
*/
|
|
116
|
+
multiply(inputA: GPUBuffer, inputB: GPUBuffer, output: GPUBuffer, dimensions: {
|
|
117
|
+
rows: number;
|
|
118
|
+
cols: number;
|
|
119
|
+
}): void;
|
|
120
|
+
/**
|
|
121
|
+
* Queue a scale operation
|
|
122
|
+
*/
|
|
123
|
+
scale(input: GPUBuffer, output: GPUBuffer, scalar: number, dimensions: {
|
|
124
|
+
rows: number;
|
|
125
|
+
cols: number;
|
|
126
|
+
}): void;
|
|
127
|
+
/**
|
|
128
|
+
* Queue a matrix multiplication operation
|
|
129
|
+
*/
|
|
130
|
+
matmul(inputA: GPUBuffer, inputB: GPUBuffer, output: GPUBuffer, dimensions: {
|
|
131
|
+
rows: number;
|
|
132
|
+
cols: number;
|
|
133
|
+
k: number;
|
|
134
|
+
}): void;
|
|
135
|
+
/**
|
|
136
|
+
* Queue a transpose operation
|
|
137
|
+
*/
|
|
138
|
+
transpose(input: GPUBuffer, output: GPUBuffer, dimensions: {
|
|
139
|
+
rows: number;
|
|
140
|
+
cols: number;
|
|
141
|
+
}): void;
|
|
142
|
+
/**
|
|
143
|
+
* Queue a sum reduction operation
|
|
144
|
+
*/
|
|
145
|
+
reduceSum(input: GPUBuffer, output: GPUBuffer, dimensions: {
|
|
146
|
+
rows: number;
|
|
147
|
+
cols: number;
|
|
148
|
+
}): void;
|
|
149
|
+
/**
|
|
150
|
+
* Queue operation (internal)
|
|
151
|
+
*/
|
|
152
|
+
private queueOperation;
|
|
153
|
+
/**
|
|
154
|
+
* Flush all queued operations (async)
|
|
155
|
+
*/
|
|
156
|
+
flush(): Promise<BatchResult>;
|
|
157
|
+
/**
|
|
158
|
+
* Flush synchronously (fire and forget)
|
|
159
|
+
*/
|
|
160
|
+
flushSync(): void;
|
|
161
|
+
/**
|
|
162
|
+
* Encode a single operation into the command encoder
|
|
163
|
+
*/
|
|
164
|
+
private encodeOperation;
|
|
165
|
+
/**
|
|
166
|
+
* Get pipeline name for operation type
|
|
167
|
+
*/
|
|
168
|
+
private getPipelineName;
|
|
169
|
+
/**
|
|
170
|
+
* Create params buffer for operation
|
|
171
|
+
*/
|
|
172
|
+
private createParamsBuffer;
|
|
173
|
+
/**
|
|
174
|
+
* Calculate workgroup dispatch counts
|
|
175
|
+
*/
|
|
176
|
+
private calculateWorkgroups;
|
|
177
|
+
/**
|
|
178
|
+
* Clear all queued operations without executing
|
|
179
|
+
*/
|
|
180
|
+
clear(): void;
|
|
181
|
+
/**
|
|
182
|
+
* Get statistics about the batch executor
|
|
183
|
+
*/
|
|
184
|
+
getStats(): {
|
|
185
|
+
queuedOperations: number;
|
|
186
|
+
maxBatchSize: number;
|
|
187
|
+
autoFlush: boolean;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=BatchExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchExecutor.d.ts","sourceRoot":"","sources":["../../../src/backends/gpu/BatchExecutor.ts"],"names":[],"mappings":"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"}
|