@danielsimonjr/mathts-matrix 0.7.0 → 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.
Files changed (99) hide show
  1. package/dist/backends/Backend.d.ts +146 -0
  2. package/dist/backends/Backend.d.ts.map +1 -0
  3. package/dist/backends/BackendManager.d.ts +189 -0
  4. package/dist/backends/BackendManager.d.ts.map +1 -0
  5. package/dist/backends/GPUBackend.d.ts +128 -0
  6. package/dist/backends/GPUBackend.d.ts.map +1 -0
  7. package/dist/backends/GPUMatrixBackend.d.ts +123 -0
  8. package/dist/backends/GPUMatrixBackend.d.ts.map +1 -0
  9. package/dist/backends/JSBackend.d.ts +93 -0
  10. package/dist/backends/JSBackend.d.ts.map +1 -0
  11. package/dist/backends/ParallelBackend.d.ts +131 -0
  12. package/dist/backends/ParallelBackend.d.ts.map +1 -0
  13. package/dist/backends/WASMBackend.d.ts +156 -0
  14. package/dist/backends/WASMBackend.d.ts.map +1 -0
  15. package/dist/backends/WasmLoader.d.ts +326 -0
  16. package/dist/backends/WasmLoader.d.ts.map +1 -0
  17. package/dist/backends/gpu/BatchExecutor.d.ts +190 -0
  18. package/dist/backends/gpu/BatchExecutor.d.ts.map +1 -0
  19. package/dist/backends/gpu/Sync.d.ts +167 -0
  20. package/dist/backends/gpu/Sync.d.ts.map +1 -0
  21. package/dist/backends/gpu/builtin-shaders.d.ts +178 -0
  22. package/dist/backends/gpu/builtin-shaders.d.ts.map +1 -0
  23. package/dist/backends/gpu/index.d.ts +13 -0
  24. package/dist/backends/gpu/index.d.ts.map +1 -0
  25. package/dist/backends/index.d.ts +18 -0
  26. package/dist/backends/index.d.ts.map +1 -0
  27. package/dist/backends/register-backends.d.ts +18 -0
  28. package/dist/backends/register-backends.d.ts.map +1 -0
  29. package/dist/backends/wasm/detect.d.ts +58 -0
  30. package/dist/backends/wasm/detect.d.ts.map +1 -0
  31. package/dist/backends/wasm/fft-wasm.d.ts +120 -0
  32. package/dist/backends/wasm/fft-wasm.d.ts.map +1 -0
  33. package/dist/backends/wasm/index.d.ts +9 -0
  34. package/dist/backends/wasm/index.d.ts.map +1 -0
  35. package/dist/backends/wasm/integrity.d.ts +18 -0
  36. package/dist/backends/wasm/integrity.d.ts.map +1 -0
  37. package/dist/backends/wasm/resolve.d.ts +12 -0
  38. package/dist/backends/wasm/resolve.d.ts.map +1 -0
  39. package/dist/{chunk-4VMDO6W2.js → chunk-PNKVD2UK.js} +2 -7
  40. package/dist/config.d.ts +145 -0
  41. package/dist/config.d.ts.map +1 -0
  42. package/dist/index.d.ts +14 -3037
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +9 -9
  45. package/dist/{integrity-LIWCCDIJ.js → integrity-IBNQNHXP.js} +1 -1
  46. package/dist/operations/cholesky.d.ts +24 -0
  47. package/dist/operations/cholesky.d.ts.map +1 -0
  48. package/dist/operations/common.d.ts +61 -0
  49. package/dist/operations/common.d.ts.map +1 -0
  50. package/dist/operations/condest.d.ts +27 -0
  51. package/dist/operations/condest.d.ts.map +1 -0
  52. package/dist/operations/eig-wasm.d.ts +35 -0
  53. package/dist/operations/eig-wasm.d.ts.map +1 -0
  54. package/dist/operations/eig.d.ts +75 -0
  55. package/dist/operations/eig.d.ts.map +1 -0
  56. package/dist/operations/expm.d.ts +46 -0
  57. package/dist/operations/expm.d.ts.map +1 -0
  58. package/dist/operations/index.d.ts +21 -0
  59. package/dist/operations/index.d.ts.map +1 -0
  60. package/dist/operations/logm.d.ts +59 -0
  61. package/dist/operations/logm.d.ts.map +1 -0
  62. package/dist/operations/lu.d.ts +51 -0
  63. package/dist/operations/lu.d.ts.map +1 -0
  64. package/dist/operations/pinv.d.ts +36 -0
  65. package/dist/operations/pinv.d.ts.map +1 -0
  66. package/dist/operations/qr-family.d.ts +52 -0
  67. package/dist/operations/qr-family.d.ts.map +1 -0
  68. package/dist/operations/qr-pivoted.d.ts +39 -0
  69. package/dist/operations/qr-pivoted.d.ts.map +1 -0
  70. package/dist/operations/qr.d.ts +35 -0
  71. package/dist/operations/qr.d.ts.map +1 -0
  72. package/dist/operations/schur.d.ts +58 -0
  73. package/dist/operations/schur.d.ts.map +1 -0
  74. package/dist/operations/sqrtm.d.ts +76 -0
  75. package/dist/operations/sqrtm.d.ts.map +1 -0
  76. package/dist/operations/svd-wasm.d.ts +23 -0
  77. package/dist/operations/svd-wasm.d.ts.map +1 -0
  78. package/dist/operations/svd.d.ts +70 -0
  79. package/dist/operations/svd.d.ts.map +1 -0
  80. package/dist/parallel-matrix.d.ts +222 -0
  81. package/dist/parallel-matrix.d.ts.map +1 -0
  82. package/dist/{resolve-DDCEWHWX.js → resolve-2SX6WJ6R.js} +1 -1
  83. package/dist/typed-operations.d.ts +161 -0
  84. package/dist/typed-operations.d.ts.map +1 -0
  85. package/dist/types/DenseMatrix.d.ts +213 -0
  86. package/dist/types/DenseMatrix.d.ts.map +1 -0
  87. package/dist/types/Matrix.d.ts +188 -0
  88. package/dist/types/Matrix.d.ts.map +1 -0
  89. package/dist/types/SparseMatrix.d.ts +214 -0
  90. package/dist/types/SparseMatrix.d.ts.map +1 -0
  91. package/dist/types/dense/arithmetic.d.ts +8 -0
  92. package/dist/types/dense/arithmetic.d.ts.map +1 -0
  93. package/dist/types/dense/reduction.d.ts +8 -0
  94. package/dist/types/dense/reduction.d.ts.map +1 -0
  95. package/dist/types/index.d.ts +9 -0
  96. package/dist/types/index.d.ts.map +1 -0
  97. package/dist/wasm/mathts-as.wasm +0 -0
  98. package/dist/wasm/wasm-manifest.json +1 -1
  99. 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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"}