@danielsimonjr/mathts-matrix 0.7.1 → 0.7.3
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 +223 -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 +162 -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,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Matrix Backend Interface
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract for matrix operation backends.
|
|
5
|
+
* Implementations include JSBackend (pure TypeScript),
|
|
6
|
+
* WASMBackend (AssemblyScript), and GPUBackend (WebGPU).
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { DenseMatrix } from '../types/DenseMatrix.js';
|
|
11
|
+
/**
|
|
12
|
+
* Backend type identifier
|
|
13
|
+
*/
|
|
14
|
+
export type BackendType = 'js' | 'wasm' | 'gpu' | 'parallel';
|
|
15
|
+
/**
|
|
16
|
+
* Backend selection hints
|
|
17
|
+
*/
|
|
18
|
+
export interface BackendHints {
|
|
19
|
+
/** Minimum size to use WASM backend */
|
|
20
|
+
wasmThreshold?: number;
|
|
21
|
+
/** Minimum size to use GPU backend */
|
|
22
|
+
gpuThreshold?: number;
|
|
23
|
+
/** Force a specific backend */
|
|
24
|
+
preferredBackend?: BackendType;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Default backend hints
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_BACKEND_HINTS: Required<BackendHints>;
|
|
30
|
+
/**
|
|
31
|
+
* Abstract backend interface for matrix operations
|
|
32
|
+
*
|
|
33
|
+
* Each backend implements the same operations but may use different
|
|
34
|
+
* underlying implementations (pure JS, WASM SIMD, WebGPU compute shaders).
|
|
35
|
+
*/
|
|
36
|
+
export interface MatrixBackend {
|
|
37
|
+
/**
|
|
38
|
+
* Backend identifier
|
|
39
|
+
*/
|
|
40
|
+
readonly type: BackendType;
|
|
41
|
+
/**
|
|
42
|
+
* Whether the backend is available in the current environment
|
|
43
|
+
*/
|
|
44
|
+
isAvailable(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Initialize the backend (may be async for WASM/GPU)
|
|
47
|
+
*/
|
|
48
|
+
initialize(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Matrix addition: C = A + B
|
|
51
|
+
*/
|
|
52
|
+
add(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
53
|
+
/**
|
|
54
|
+
* Matrix subtraction: C = A - B
|
|
55
|
+
*/
|
|
56
|
+
subtract(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
57
|
+
/**
|
|
58
|
+
* Element-wise multiplication: C = A .* B
|
|
59
|
+
*/
|
|
60
|
+
multiplyElementwise(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
61
|
+
/**
|
|
62
|
+
* Element-wise division: C = A ./ B
|
|
63
|
+
*/
|
|
64
|
+
divideElementwise(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
65
|
+
/**
|
|
66
|
+
* Scalar multiplication: C = A * s
|
|
67
|
+
*/
|
|
68
|
+
scale(a: DenseMatrix, scalar: number): DenseMatrix;
|
|
69
|
+
/**
|
|
70
|
+
* Element-wise absolute value
|
|
71
|
+
*/
|
|
72
|
+
abs(a: DenseMatrix): DenseMatrix;
|
|
73
|
+
/**
|
|
74
|
+
* Element-wise negation
|
|
75
|
+
*/
|
|
76
|
+
negate(a: DenseMatrix): DenseMatrix;
|
|
77
|
+
/**
|
|
78
|
+
* Matrix multiplication: C = A * B
|
|
79
|
+
*/
|
|
80
|
+
multiply(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
81
|
+
/**
|
|
82
|
+
* Matrix transpose
|
|
83
|
+
*/
|
|
84
|
+
transpose(a: DenseMatrix): DenseMatrix;
|
|
85
|
+
/**
|
|
86
|
+
* Sum of all elements (may be async for parallel backends)
|
|
87
|
+
*/
|
|
88
|
+
sum(a: DenseMatrix): number | Promise<number>;
|
|
89
|
+
/**
|
|
90
|
+
* Sum along an axis (0 = columns, 1 = rows)
|
|
91
|
+
*/
|
|
92
|
+
sumAxis(a: DenseMatrix, axis: 0 | 1): DenseMatrix;
|
|
93
|
+
/**
|
|
94
|
+
* Frobenius norm
|
|
95
|
+
*/
|
|
96
|
+
norm(a: DenseMatrix): number;
|
|
97
|
+
/**
|
|
98
|
+
* Dot product of two vectors (may be async for parallel backends)
|
|
99
|
+
*/
|
|
100
|
+
dot(a: DenseMatrix, b: DenseMatrix): number | Promise<number>;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Registry of available backends
|
|
104
|
+
*/
|
|
105
|
+
export declare class BackendRegistry {
|
|
106
|
+
private backends;
|
|
107
|
+
private initialized;
|
|
108
|
+
private hints;
|
|
109
|
+
/**
|
|
110
|
+
* Register a backend
|
|
111
|
+
*/
|
|
112
|
+
register(backend: MatrixBackend): void;
|
|
113
|
+
/**
|
|
114
|
+
* Get a backend by type
|
|
115
|
+
*/
|
|
116
|
+
get(type: BackendType): MatrixBackend | undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Check if a backend is registered and available
|
|
119
|
+
*/
|
|
120
|
+
has(type: BackendType): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Initialize a backend
|
|
123
|
+
*/
|
|
124
|
+
initialize(type: BackendType): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Get all available backends
|
|
127
|
+
*/
|
|
128
|
+
available(): BackendType[];
|
|
129
|
+
/**
|
|
130
|
+
* Update selection hints
|
|
131
|
+
*/
|
|
132
|
+
setHints(hints: BackendHints): void;
|
|
133
|
+
/**
|
|
134
|
+
* Get current hints
|
|
135
|
+
*/
|
|
136
|
+
getHints(): Required<BackendHints>;
|
|
137
|
+
/**
|
|
138
|
+
* Select the best backend for a given operation size
|
|
139
|
+
*/
|
|
140
|
+
selectBackend(elementCount: number): MatrixBackend;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Global backend registry
|
|
144
|
+
*/
|
|
145
|
+
export declare const backendRegistry: BackendRegistry;
|
|
146
|
+
//# sourceMappingURL=Backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Backend.d.ts","sourceRoot":"","sources":["../../src/backends/Backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend Manager
|
|
3
|
+
*
|
|
4
|
+
* Centralized management for matrix operation backends with automatic
|
|
5
|
+
* selection based on matrix size, operation type, and availability.
|
|
6
|
+
* Includes adaptive threshold tuning based on runtime profiling.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { DenseMatrix } from '../types/DenseMatrix.js';
|
|
11
|
+
import type { MatrixBackend, BackendType, BackendHints } from './Backend.js';
|
|
12
|
+
import { type OperationType } from '../config.js';
|
|
13
|
+
import './register-backends.js';
|
|
14
|
+
export type { OperationType };
|
|
15
|
+
/**
|
|
16
|
+
* Extended backend hints with operation-specific thresholds
|
|
17
|
+
*/
|
|
18
|
+
export interface ExtendedBackendHints extends BackendHints {
|
|
19
|
+
/** Specific thresholds by operation type */
|
|
20
|
+
operationThresholds?: Partial<Record<OperationType, {
|
|
21
|
+
wasm?: number;
|
|
22
|
+
gpu?: number;
|
|
23
|
+
}>>;
|
|
24
|
+
/** Enable automatic SIMD detection for WASM */
|
|
25
|
+
autoSIMD?: boolean;
|
|
26
|
+
/** Fallback to JS on backend failure */
|
|
27
|
+
fallbackOnError?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Default extended hints
|
|
31
|
+
*/
|
|
32
|
+
export declare const DEFAULT_EXTENDED_HINTS: Required<ExtendedBackendHints>;
|
|
33
|
+
/**
|
|
34
|
+
* Centralized Backend Manager
|
|
35
|
+
*
|
|
36
|
+
* Provides a unified interface for executing matrix operations with
|
|
37
|
+
* automatic backend selection based on matrix size and operation type.
|
|
38
|
+
* Features adaptive threshold tuning based on runtime profiling.
|
|
39
|
+
*/
|
|
40
|
+
export declare class BackendManager {
|
|
41
|
+
private hints;
|
|
42
|
+
private initialized;
|
|
43
|
+
private initializationPromise;
|
|
44
|
+
private adaptiveState;
|
|
45
|
+
private configUnsubscribe;
|
|
46
|
+
constructor(hints?: ExtendedBackendHints);
|
|
47
|
+
/**
|
|
48
|
+
* Sync manager state with global config
|
|
49
|
+
*/
|
|
50
|
+
private syncWithConfig;
|
|
51
|
+
/**
|
|
52
|
+
* Initialize all available backends
|
|
53
|
+
*/
|
|
54
|
+
initialize(): Promise<void>;
|
|
55
|
+
private doInitialize;
|
|
56
|
+
/**
|
|
57
|
+
* Update backend hints
|
|
58
|
+
*/
|
|
59
|
+
setHints(hints: ExtendedBackendHints): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get current hints
|
|
62
|
+
*/
|
|
63
|
+
getHints(): Required<ExtendedBackendHints>;
|
|
64
|
+
/**
|
|
65
|
+
* Get the best backend for a given operation and matrix size.
|
|
66
|
+
*
|
|
67
|
+
* Selection priority:
|
|
68
|
+
* 1. Preferred backend (if explicitly set)
|
|
69
|
+
* 2. Elements > gpuThreshold -> GPU (if available)
|
|
70
|
+
* 3. Elements > wasmThreshold -> AS WASM (if loaded)
|
|
71
|
+
* 4. JS fallback
|
|
72
|
+
*/
|
|
73
|
+
selectBackend(elementCount: number, operation?: OperationType): MatrixBackend;
|
|
74
|
+
/**
|
|
75
|
+
* Execute an operation with automatic backend selection
|
|
76
|
+
*/
|
|
77
|
+
private executeWithFallback;
|
|
78
|
+
/**
|
|
79
|
+
* Matrix addition with auto backend selection
|
|
80
|
+
*/
|
|
81
|
+
add(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
82
|
+
/**
|
|
83
|
+
* Matrix subtraction with auto backend selection
|
|
84
|
+
*/
|
|
85
|
+
subtract(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
86
|
+
/**
|
|
87
|
+
* Element-wise multiplication with auto backend selection
|
|
88
|
+
*/
|
|
89
|
+
multiplyElementwise(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
90
|
+
/**
|
|
91
|
+
* Element-wise division with auto backend selection
|
|
92
|
+
*/
|
|
93
|
+
divideElementwise(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
94
|
+
/**
|
|
95
|
+
* Scalar multiplication with auto backend selection
|
|
96
|
+
*/
|
|
97
|
+
scale(a: DenseMatrix, scalar: number): DenseMatrix;
|
|
98
|
+
/**
|
|
99
|
+
* Element-wise absolute value with auto backend selection
|
|
100
|
+
*/
|
|
101
|
+
abs(a: DenseMatrix): DenseMatrix;
|
|
102
|
+
/**
|
|
103
|
+
* Element-wise negation with auto backend selection
|
|
104
|
+
*/
|
|
105
|
+
negate(a: DenseMatrix): DenseMatrix;
|
|
106
|
+
/**
|
|
107
|
+
* Matrix multiplication with auto backend selection
|
|
108
|
+
*/
|
|
109
|
+
multiply(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
110
|
+
/**
|
|
111
|
+
* Matrix transpose with auto backend selection
|
|
112
|
+
*/
|
|
113
|
+
transpose(a: DenseMatrix): DenseMatrix;
|
|
114
|
+
/**
|
|
115
|
+
* Sum of all elements with auto backend selection
|
|
116
|
+
*/
|
|
117
|
+
sum(a: DenseMatrix): Promise<number>;
|
|
118
|
+
/**
|
|
119
|
+
* Sum along axis with auto backend selection
|
|
120
|
+
*/
|
|
121
|
+
sumAxis(a: DenseMatrix, axis: 0 | 1): DenseMatrix;
|
|
122
|
+
/**
|
|
123
|
+
* Frobenius norm with auto backend selection
|
|
124
|
+
*/
|
|
125
|
+
norm(a: DenseMatrix): number;
|
|
126
|
+
/**
|
|
127
|
+
* Dot product with auto backend selection
|
|
128
|
+
*/
|
|
129
|
+
dot(a: DenseMatrix, b: DenseMatrix): Promise<number>;
|
|
130
|
+
/**
|
|
131
|
+
* Get list of available backends
|
|
132
|
+
*/
|
|
133
|
+
getAvailableBackends(): BackendType[];
|
|
134
|
+
/**
|
|
135
|
+
* Check if a specific backend is available
|
|
136
|
+
*/
|
|
137
|
+
hasBackend(type: BackendType): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Get current active backend for a given operation size
|
|
140
|
+
*/
|
|
141
|
+
getActiveBackend(elementCount: number, operation?: OperationType): BackendType;
|
|
142
|
+
/**
|
|
143
|
+
* Force a specific backend for all operations
|
|
144
|
+
*/
|
|
145
|
+
forceBackend(type: BackendType | null): void;
|
|
146
|
+
/**
|
|
147
|
+
* Record a performance sample for adaptive tuning
|
|
148
|
+
*/
|
|
149
|
+
recordSample(operation: OperationType, elementCount: number, backend: BackendType, durationMs: number): void;
|
|
150
|
+
/**
|
|
151
|
+
* Adjust thresholds based on collected samples
|
|
152
|
+
*/
|
|
153
|
+
private maybeAdjustThresholds;
|
|
154
|
+
/**
|
|
155
|
+
* Get current adaptive thresholds
|
|
156
|
+
*/
|
|
157
|
+
getAdaptiveThresholds(): Map<OperationType, {
|
|
158
|
+
wasm: number;
|
|
159
|
+
gpu: number;
|
|
160
|
+
}>;
|
|
161
|
+
/**
|
|
162
|
+
* Reset adaptive tuning state
|
|
163
|
+
*/
|
|
164
|
+
resetAdaptiveState(): void;
|
|
165
|
+
/**
|
|
166
|
+
* Get performance statistics
|
|
167
|
+
*/
|
|
168
|
+
getPerformanceStats(): {
|
|
169
|
+
sampleCount: number;
|
|
170
|
+
operationStats: Map<OperationType, {
|
|
171
|
+
avgDuration: number;
|
|
172
|
+
samples: number;
|
|
173
|
+
backendUsage: Record<BackendType, number>;
|
|
174
|
+
}>;
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Cleanup resources
|
|
178
|
+
*/
|
|
179
|
+
destroy(): void;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Default backend manager instance
|
|
183
|
+
*/
|
|
184
|
+
export declare const backendManager: BackendManager;
|
|
185
|
+
/**
|
|
186
|
+
* Create a new backend manager with custom hints
|
|
187
|
+
*/
|
|
188
|
+
export declare function createBackendManager(hints?: ExtendedBackendHints): BackendManager;
|
|
189
|
+
//# sourceMappingURL=BackendManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackendManager.d.ts","sourceRoot":"","sources":["../../src/backends/BackendManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GPU Backend for Matrix Operations
|
|
3
|
+
*
|
|
4
|
+
* WebGPU-accelerated matrix operations for large matrices.
|
|
5
|
+
*/
|
|
6
|
+
import { GPUContext, type GPUContextOptions, BufferPool, ShaderManager, type GPUCapabilities } from '@danielsimonjr/mathts-gpu';
|
|
7
|
+
/**
|
|
8
|
+
* GPU Backend status
|
|
9
|
+
*/
|
|
10
|
+
export type GPUBackendStatus = 'uninitialized' | 'initializing' | 'ready' | 'error' | 'unsupported';
|
|
11
|
+
/**
|
|
12
|
+
* Options for GPU backend
|
|
13
|
+
*/
|
|
14
|
+
export interface GPUBackendOptions extends GPUContextOptions {
|
|
15
|
+
/** Use global GPU context instead of creating a new one */
|
|
16
|
+
useGlobalContext?: boolean;
|
|
17
|
+
/** Buffer pool options */
|
|
18
|
+
bufferPoolOptions?: {
|
|
19
|
+
maxCacheSize?: number;
|
|
20
|
+
evictionTimeout?: number;
|
|
21
|
+
};
|
|
22
|
+
/** Threshold for using GPU (matrix size) */
|
|
23
|
+
threshold?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* GPU Backend for accelerated matrix operations
|
|
27
|
+
*/
|
|
28
|
+
export declare class GPUBackend {
|
|
29
|
+
private context;
|
|
30
|
+
private bufferPool;
|
|
31
|
+
private shaderManager;
|
|
32
|
+
private _status;
|
|
33
|
+
private _capabilities;
|
|
34
|
+
private _lastError;
|
|
35
|
+
private threshold;
|
|
36
|
+
private workgroupSize;
|
|
37
|
+
private useGlobalContext;
|
|
38
|
+
constructor(options?: GPUBackendOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Get the current status
|
|
41
|
+
*/
|
|
42
|
+
get status(): GPUBackendStatus;
|
|
43
|
+
/**
|
|
44
|
+
* Check if backend is ready
|
|
45
|
+
*/
|
|
46
|
+
get isReady(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Get capabilities
|
|
49
|
+
*/
|
|
50
|
+
get capabilities(): GPUCapabilities | null;
|
|
51
|
+
/**
|
|
52
|
+
* Get last error
|
|
53
|
+
*/
|
|
54
|
+
get lastError(): Error | null;
|
|
55
|
+
/**
|
|
56
|
+
* Initialize the GPU backend
|
|
57
|
+
*/
|
|
58
|
+
initialize(options?: GPUBackendOptions): Promise<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Check if GPU should be used for the given matrix size
|
|
61
|
+
*/
|
|
62
|
+
shouldUseGPU(rows: number, cols: number): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Calculate workgroup counts for a matrix
|
|
65
|
+
*/
|
|
66
|
+
calculateWorkgroups(rows: number, cols: number): [number, number, number];
|
|
67
|
+
/**
|
|
68
|
+
* Get the GPU context
|
|
69
|
+
*/
|
|
70
|
+
getContext(): GPUContext;
|
|
71
|
+
/**
|
|
72
|
+
* Get the buffer pool
|
|
73
|
+
*/
|
|
74
|
+
getBufferPool(): BufferPool;
|
|
75
|
+
/**
|
|
76
|
+
* Get the shader manager
|
|
77
|
+
*/
|
|
78
|
+
getShaderManager(): ShaderManager;
|
|
79
|
+
/**
|
|
80
|
+
* Add two matrices element-wise
|
|
81
|
+
*/
|
|
82
|
+
add(a: Float32Array, b: Float32Array, rows: number, cols: number): Promise<Float32Array>;
|
|
83
|
+
/**
|
|
84
|
+
* Multiply two matrices
|
|
85
|
+
*/
|
|
86
|
+
matmul(a: Float32Array, b: Float32Array, M: number, K: number, N: number): Promise<Float32Array>;
|
|
87
|
+
/**
|
|
88
|
+
* Transpose a matrix
|
|
89
|
+
*/
|
|
90
|
+
transpose(a: Float32Array, rows: number, cols: number): Promise<Float32Array>;
|
|
91
|
+
/**
|
|
92
|
+
* Scale a matrix by a scalar
|
|
93
|
+
*/
|
|
94
|
+
scale(a: Float32Array, scalar: number): Promise<Float32Array>;
|
|
95
|
+
/**
|
|
96
|
+
* Get backend statistics
|
|
97
|
+
*/
|
|
98
|
+
getStats(): {
|
|
99
|
+
status: GPUBackendStatus;
|
|
100
|
+
capabilities: GPUCapabilities | null;
|
|
101
|
+
bufferPool: {
|
|
102
|
+
totalBuffers: number;
|
|
103
|
+
inUseBuffers: number;
|
|
104
|
+
cachedBuffers: number;
|
|
105
|
+
} | null;
|
|
106
|
+
shaders: {
|
|
107
|
+
cachedShaders: number;
|
|
108
|
+
cachedPipelines: number;
|
|
109
|
+
} | null;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Destroy the backend
|
|
113
|
+
*/
|
|
114
|
+
destroy(): void;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the global GPU backend
|
|
118
|
+
*/
|
|
119
|
+
export declare function getGlobalGPUBackend(): GPUBackend;
|
|
120
|
+
/**
|
|
121
|
+
* Initialize the global GPU backend
|
|
122
|
+
*/
|
|
123
|
+
export declare function initializeGlobalGPUBackend(options?: GPUBackendOptions): Promise<boolean>;
|
|
124
|
+
/**
|
|
125
|
+
* Destroy the global GPU backend
|
|
126
|
+
*/
|
|
127
|
+
export declare function destroyGlobalGPUBackend(): void;
|
|
128
|
+
//# sourceMappingURL=GPUBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPUBackend.d.ts","sourceRoot":"","sources":["../../src/backends/GPUBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GPU Matrix Backend Adapter
|
|
3
|
+
*
|
|
4
|
+
* Adapts GPUBackend to implement the MatrixBackend interface,
|
|
5
|
+
* enabling seamless integration with the backend selection system.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { MatrixBackend, BackendType } from './Backend.js';
|
|
10
|
+
import { DenseMatrix } from '../types/DenseMatrix.js';
|
|
11
|
+
import { GPUBackend, type GPUBackendOptions } from './GPUBackend.js';
|
|
12
|
+
import { type GPUCapabilities } from '@danielsimonjr/mathts-gpu';
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for GPU Matrix Backend
|
|
15
|
+
*/
|
|
16
|
+
export interface GPUMatrixBackendConfig {
|
|
17
|
+
/** Minimum elements to use GPU (default: 65536 = 256x256) */
|
|
18
|
+
minElements?: number;
|
|
19
|
+
/** Use global GPU backend instance */
|
|
20
|
+
useGlobalBackend?: boolean;
|
|
21
|
+
/** GPU backend options */
|
|
22
|
+
gpuOptions?: GPUBackendOptions;
|
|
23
|
+
/** Fall back to JS on GPU errors */
|
|
24
|
+
fallbackOnError?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* GPU Matrix Backend
|
|
28
|
+
*
|
|
29
|
+
* Implements MatrixBackend interface using WebGPU compute shaders.
|
|
30
|
+
* Provides significant acceleration for large matrices.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const gpu = new GPUMatrixBackend();
|
|
35
|
+
* await gpu.initialize();
|
|
36
|
+
*
|
|
37
|
+
* const result = gpu.multiply(matrixA, matrixB);
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare class GPUMatrixBackend implements MatrixBackend {
|
|
41
|
+
readonly type: BackendType;
|
|
42
|
+
private config;
|
|
43
|
+
private backend;
|
|
44
|
+
private capabilities;
|
|
45
|
+
private initPromise;
|
|
46
|
+
private _available;
|
|
47
|
+
constructor(config?: GPUMatrixBackendConfig);
|
|
48
|
+
/**
|
|
49
|
+
* Check if GPU is available in the current environment
|
|
50
|
+
*/
|
|
51
|
+
isAvailable(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Initialize the GPU backend
|
|
54
|
+
*/
|
|
55
|
+
initialize(): Promise<void>;
|
|
56
|
+
private doInitialize;
|
|
57
|
+
/**
|
|
58
|
+
* Check if operation should use GPU
|
|
59
|
+
*/
|
|
60
|
+
private shouldUseGPU;
|
|
61
|
+
/**
|
|
62
|
+
* Execute GPU operation with fallback
|
|
63
|
+
*/
|
|
64
|
+
private executeWithFallback;
|
|
65
|
+
/**
|
|
66
|
+
* Get GPU capabilities
|
|
67
|
+
*/
|
|
68
|
+
getCapabilities(): GPUCapabilities | null;
|
|
69
|
+
/**
|
|
70
|
+
* Get backend statistics
|
|
71
|
+
*/
|
|
72
|
+
getStats(): ReturnType<GPUBackend['getStats']> | null;
|
|
73
|
+
add(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
74
|
+
/**
|
|
75
|
+
* Async add operation using GPU
|
|
76
|
+
*/
|
|
77
|
+
addAsync(a: DenseMatrix, b: DenseMatrix): Promise<DenseMatrix>;
|
|
78
|
+
subtract(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
79
|
+
multiplyElementwise(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
80
|
+
divideElementwise(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
81
|
+
scale(a: DenseMatrix, scalar: number): DenseMatrix;
|
|
82
|
+
/**
|
|
83
|
+
* Async scale operation using GPU
|
|
84
|
+
*/
|
|
85
|
+
scaleAsync(a: DenseMatrix, scalar: number): Promise<DenseMatrix>;
|
|
86
|
+
abs(a: DenseMatrix): DenseMatrix;
|
|
87
|
+
negate(a: DenseMatrix): DenseMatrix;
|
|
88
|
+
multiply(a: DenseMatrix, b: DenseMatrix): DenseMatrix;
|
|
89
|
+
/**
|
|
90
|
+
* Async matrix multiplication using GPU
|
|
91
|
+
*/
|
|
92
|
+
multiplyAsync(a: DenseMatrix, b: DenseMatrix): Promise<DenseMatrix>;
|
|
93
|
+
transpose(a: DenseMatrix): DenseMatrix;
|
|
94
|
+
/**
|
|
95
|
+
* Async transpose using GPU
|
|
96
|
+
*/
|
|
97
|
+
transposeAsync(a: DenseMatrix): Promise<DenseMatrix>;
|
|
98
|
+
sum(a: DenseMatrix): number;
|
|
99
|
+
sumAxis(a: DenseMatrix, axis: 0 | 1): DenseMatrix;
|
|
100
|
+
norm(a: DenseMatrix): number;
|
|
101
|
+
dot(a: DenseMatrix, b: DenseMatrix): number;
|
|
102
|
+
/**
|
|
103
|
+
* Update configuration
|
|
104
|
+
*/
|
|
105
|
+
updateConfig(config: Partial<GPUMatrixBackendConfig>): void;
|
|
106
|
+
/**
|
|
107
|
+
* Get current configuration
|
|
108
|
+
*/
|
|
109
|
+
getConfig(): Required<GPUMatrixBackendConfig>;
|
|
110
|
+
/**
|
|
111
|
+
* Destroy the backend
|
|
112
|
+
*/
|
|
113
|
+
destroy(): void;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Global GPU matrix backend instance
|
|
117
|
+
*/
|
|
118
|
+
export declare const gpuMatrixBackend: GPUMatrixBackend;
|
|
119
|
+
/**
|
|
120
|
+
* Create a GPU matrix backend with custom configuration
|
|
121
|
+
*/
|
|
122
|
+
export declare function createGPUMatrixBackend(config?: GPUMatrixBackendConfig): GPUMatrixBackend;
|
|
123
|
+
//# sourceMappingURL=GPUMatrixBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPUMatrixBackend.d.ts","sourceRoot":"","sources":["../../src/backends/GPUMatrixBackend.ts"],"names":[],"mappings":"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"}
|