verso-db 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +81 -49
- package/dist/BinaryHeap.d.ts +16 -5
- package/dist/BinaryHeap.d.ts.map +1 -1
- package/dist/BinaryHeap.js +138 -0
- package/dist/BinaryHeap.js.map +1 -0
- package/dist/Collection.d.ts +98 -17
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +1186 -0
- package/dist/Collection.js.map +1 -0
- package/dist/HNSWIndex.d.ts +170 -15
- package/dist/HNSWIndex.d.ts.map +1 -1
- package/dist/HNSWIndex.js +2818 -0
- package/dist/HNSWIndex.js.map +1 -0
- package/dist/MaxBinaryHeap.d.ts +2 -60
- package/dist/MaxBinaryHeap.d.ts.map +1 -1
- package/dist/MaxBinaryHeap.js +5 -0
- package/dist/MaxBinaryHeap.js.map +1 -0
- package/dist/SearchWorker.d.ts +104 -0
- package/dist/SearchWorker.d.ts.map +1 -0
- package/dist/SearchWorker.js +573 -0
- package/dist/SearchWorker.js.map +1 -0
- package/dist/VectorDB.d.ts +19 -5
- package/dist/VectorDB.d.ts.map +1 -1
- package/dist/VectorDB.js +246 -0
- package/dist/VectorDB.js.map +1 -0
- package/dist/WorkerPool.d.ts +92 -0
- package/dist/WorkerPool.d.ts.map +1 -0
- package/dist/WorkerPool.js +266 -0
- package/dist/WorkerPool.js.map +1 -0
- package/dist/backends/JsDistanceBackend.d.ts +3 -20
- package/dist/backends/JsDistanceBackend.d.ts.map +1 -1
- package/dist/backends/JsDistanceBackend.js +163 -0
- package/dist/backends/JsDistanceBackend.js.map +1 -0
- package/dist/encoding/DeltaEncoder.d.ts +2 -2
- package/dist/encoding/DeltaEncoder.d.ts.map +1 -1
- package/dist/encoding/DeltaEncoder.js +199 -0
- package/dist/encoding/DeltaEncoder.js.map +1 -0
- package/dist/errors.js +97 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +16 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -3419
- package/dist/index.js.map +1 -0
- package/dist/presets.d.ts +9 -9
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +205 -0
- package/dist/presets.js.map +1 -0
- package/dist/quantization/ScalarQuantizer.d.ts +10 -34
- package/dist/quantization/ScalarQuantizer.d.ts.map +1 -1
- package/dist/quantization/ScalarQuantizer.js +346 -0
- package/dist/quantization/ScalarQuantizer.js.map +1 -0
- package/dist/storage/BatchWriter.d.ts.map +1 -1
- package/dist/storage/BatchWriter.js +351 -0
- package/dist/storage/BatchWriter.js.map +1 -0
- package/dist/storage/BunStorageBackend.d.ts +12 -5
- package/dist/storage/BunStorageBackend.d.ts.map +1 -1
- package/dist/storage/BunStorageBackend.js +182 -0
- package/dist/storage/BunStorageBackend.js.map +1 -0
- package/dist/storage/MemoryBackend.d.ts.map +1 -1
- package/dist/storage/MemoryBackend.js +109 -0
- package/dist/storage/MemoryBackend.js.map +1 -0
- package/dist/storage/OPFSBackend.d.ts +9 -1
- package/dist/storage/OPFSBackend.d.ts.map +1 -1
- package/dist/storage/OPFSBackend.js +325 -0
- package/dist/storage/OPFSBackend.js.map +1 -0
- package/dist/storage/StorageBackend.d.ts +1 -1
- package/dist/storage/StorageBackend.js +12 -0
- package/dist/storage/StorageBackend.js.map +1 -0
- package/dist/storage/WriteAheadLog.d.ts +15 -11
- package/dist/storage/WriteAheadLog.d.ts.map +1 -1
- package/dist/storage/WriteAheadLog.js +321 -0
- package/dist/storage/WriteAheadLog.js.map +1 -0
- package/dist/storage/createStorageBackend.d.ts +4 -0
- package/dist/storage/createStorageBackend.d.ts.map +1 -1
- package/dist/storage/createStorageBackend.js +119 -0
- package/dist/storage/createStorageBackend.js.map +1 -0
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +33 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/nodeFsRuntime.d.ts +14 -0
- package/dist/storage/nodeFsRuntime.d.ts.map +1 -0
- package/dist/storage/nodeFsRuntime.js +105 -0
- package/dist/storage/nodeFsRuntime.js.map +1 -0
- package/package.json +47 -23
- package/dist/Storage.d.ts +0 -54
- package/dist/Storage.d.ts.map +0 -1
- package/dist/backends/DistanceBackend.d.ts +0 -5
- package/dist/backends/DistanceBackend.d.ts.map +0 -1
- package/src/BinaryHeap.ts +0 -131
- package/src/Collection.ts +0 -695
- package/src/HNSWIndex.ts +0 -1839
- package/src/MaxBinaryHeap.ts +0 -175
- package/src/Storage.ts +0 -435
- package/src/VectorDB.ts +0 -109
- package/src/backends/DistanceBackend.ts +0 -17
- package/src/backends/JsDistanceBackend.ts +0 -227
- package/src/encoding/DeltaEncoder.ts +0 -217
- package/src/errors.ts +0 -110
- package/src/index.ts +0 -138
- package/src/presets.ts +0 -229
- package/src/quantization/ScalarQuantizer.ts +0 -383
- package/src/storage/BatchWriter.ts +0 -336
- package/src/storage/BunStorageBackend.ts +0 -161
- package/src/storage/MemoryBackend.ts +0 -120
- package/src/storage/OPFSBackend.ts +0 -250
- package/src/storage/StorageBackend.ts +0 -74
- package/src/storage/WriteAheadLog.ts +0 -326
- package/src/storage/createStorageBackend.ts +0 -137
- package/src/storage/index.ts +0 -53
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker pool for parallel query processing.
|
|
3
|
+
* Dispatches queries to workers via round-robin for concurrent execution.
|
|
4
|
+
* Falls back to sequential processing when workers are unavailable.
|
|
5
|
+
*/
|
|
6
|
+
import { VectorDBError } from './errors.js';
|
|
7
|
+
export class WorkerPool {
|
|
8
|
+
numWorkers;
|
|
9
|
+
workers = [];
|
|
10
|
+
nextQueryId = 0;
|
|
11
|
+
roundRobinIndex = 0;
|
|
12
|
+
initialized = false;
|
|
13
|
+
fallbackIndex = null;
|
|
14
|
+
/**
|
|
15
|
+
* Create a worker pool for parallel HNSW search.
|
|
16
|
+
*
|
|
17
|
+
* @param numWorkers Number of workers (default: available hardware concurrency or 4)
|
|
18
|
+
*/
|
|
19
|
+
constructor(numWorkers) {
|
|
20
|
+
this.numWorkers = numWorkers;
|
|
21
|
+
if (!numWorkers) {
|
|
22
|
+
this.numWorkers = typeof navigator !== 'undefined'
|
|
23
|
+
? (navigator.hardwareConcurrency ?? 4)
|
|
24
|
+
: 4;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Initialize workers with shared index data.
|
|
29
|
+
* When the index uses SharedArrayBuffer, workers receive zero-copy
|
|
30
|
+
* views into the same vector memory. Otherwise, data is copied.
|
|
31
|
+
*
|
|
32
|
+
* @param index The HNSW index to distribute to workers
|
|
33
|
+
*/
|
|
34
|
+
async init(index) {
|
|
35
|
+
this.fallbackIndex = index;
|
|
36
|
+
// Check if Worker is available
|
|
37
|
+
if (typeof Worker === 'undefined') {
|
|
38
|
+
// Workers not available, will use fallback
|
|
39
|
+
this.initialized = true;
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Enable SharedArrayBuffer on the index for zero-copy vector sharing
|
|
43
|
+
index.enableSharedMemory();
|
|
44
|
+
const sharedData = index.getSharedSearchData();
|
|
45
|
+
if (!sharedData) {
|
|
46
|
+
// Index can't produce shared data, use fallback
|
|
47
|
+
this.initialized = true;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const workerModulePath = import.meta.url.endsWith('.ts')
|
|
51
|
+
? './SearchWorker.ts'
|
|
52
|
+
: './SearchWorker.js';
|
|
53
|
+
const workerUrl = new URL(workerModulePath, import.meta.url).href;
|
|
54
|
+
const initPromises = [];
|
|
55
|
+
for (let i = 0; i < this.numWorkers; i++) {
|
|
56
|
+
try {
|
|
57
|
+
const worker = new Worker(workerUrl, { type: 'module' });
|
|
58
|
+
const handle = {
|
|
59
|
+
worker,
|
|
60
|
+
readyResolve: null,
|
|
61
|
+
pendingResolve: new Map(),
|
|
62
|
+
pendingReject: new Map(),
|
|
63
|
+
};
|
|
64
|
+
worker.onmessage = (event) => {
|
|
65
|
+
const msg = event.data;
|
|
66
|
+
if (msg.type === 'ready') {
|
|
67
|
+
if (handle.readyResolve) {
|
|
68
|
+
handle.readyResolve();
|
|
69
|
+
handle.readyResolve = null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (msg.type === 'result') {
|
|
73
|
+
const resolve = handle.pendingResolve.get(msg.queryId);
|
|
74
|
+
if (resolve) {
|
|
75
|
+
handle.pendingResolve.delete(msg.queryId);
|
|
76
|
+
handle.pendingReject.delete(msg.queryId);
|
|
77
|
+
resolve(msg.results);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (msg.type === 'error') {
|
|
81
|
+
const reject = handle.pendingReject.get(msg.queryId);
|
|
82
|
+
if (reject) {
|
|
83
|
+
handle.pendingResolve.delete(msg.queryId);
|
|
84
|
+
handle.pendingReject.delete(msg.queryId);
|
|
85
|
+
reject(new Error(msg.error));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
worker.onerror = (event) => {
|
|
90
|
+
for (const reject of handle.pendingReject.values()) {
|
|
91
|
+
reject(new Error(`Worker error: ${event.message}`));
|
|
92
|
+
}
|
|
93
|
+
handle.pendingResolve.clear();
|
|
94
|
+
handle.pendingReject.clear();
|
|
95
|
+
};
|
|
96
|
+
const readyPromise = new Promise((resolve) => {
|
|
97
|
+
handle.readyResolve = resolve;
|
|
98
|
+
});
|
|
99
|
+
worker.postMessage({
|
|
100
|
+
type: 'init',
|
|
101
|
+
...sharedData,
|
|
102
|
+
});
|
|
103
|
+
this.workers.push(handle);
|
|
104
|
+
initPromises.push(readyPromise);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Worker creation failed, will use fallback for remaining
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (initPromises.length > 0) {
|
|
112
|
+
const timeout = new Promise((_, reject) => {
|
|
113
|
+
const timer = setTimeout(() => reject(new Error('WorkerPool initialization timed out after 10s')), 10000);
|
|
114
|
+
if (typeof timer === 'object' && 'unref' in timer) {
|
|
115
|
+
timer.unref();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
await Promise.race([Promise.all(initPromises), timeout]);
|
|
119
|
+
}
|
|
120
|
+
this.initialized = true;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Search for k nearest neighbors using worker pool.
|
|
124
|
+
* Dispatches to next available worker via round-robin.
|
|
125
|
+
*
|
|
126
|
+
* @param query Query vector
|
|
127
|
+
* @param k Number of results
|
|
128
|
+
* @param efSearch Search effort parameter
|
|
129
|
+
* @returns Array of {id, distance} results
|
|
130
|
+
*/
|
|
131
|
+
async search(query, k, efSearch) {
|
|
132
|
+
if (!this.initialized) {
|
|
133
|
+
throw new VectorDBError('WorkerPool not initialized. Call init() first.', 'VALIDATION_ERROR');
|
|
134
|
+
}
|
|
135
|
+
// Fallback to sequential if no workers available
|
|
136
|
+
if (this.workers.length === 0 && this.fallbackIndex) {
|
|
137
|
+
return this.fallbackIndex.searchKNN(query, k, efSearch);
|
|
138
|
+
}
|
|
139
|
+
const queryId = this.nextQueryId++;
|
|
140
|
+
const workerIdx = this.roundRobinIndex % this.workers.length;
|
|
141
|
+
this.roundRobinIndex++;
|
|
142
|
+
const handle = this.workers[workerIdx];
|
|
143
|
+
return new Promise((resolve, reject) => {
|
|
144
|
+
handle.pendingResolve.set(queryId, resolve);
|
|
145
|
+
handle.pendingReject.set(queryId, reject);
|
|
146
|
+
handle.worker.postMessage({
|
|
147
|
+
type: 'search',
|
|
148
|
+
queryId,
|
|
149
|
+
query,
|
|
150
|
+
k,
|
|
151
|
+
efSearch: efSearch || Math.max(k * 2, 50),
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Quantized search using worker pool.
|
|
157
|
+
* Workers perform int8 candidate scan + float32 rescore.
|
|
158
|
+
*
|
|
159
|
+
* @param query Query vector
|
|
160
|
+
* @param k Number of results
|
|
161
|
+
* @param candidateMultiplier Multiplier for rescore candidates
|
|
162
|
+
* @param efSearch Search effort parameter
|
|
163
|
+
* @returns Array of {id, distance} results
|
|
164
|
+
*/
|
|
165
|
+
async searchQuantized(query, k, candidateMultiplier = 3, efSearch) {
|
|
166
|
+
if (!this.initialized) {
|
|
167
|
+
throw new VectorDBError('WorkerPool not initialized. Call init() first.', 'VALIDATION_ERROR');
|
|
168
|
+
}
|
|
169
|
+
// Fallback to sequential
|
|
170
|
+
if (this.workers.length === 0 && this.fallbackIndex) {
|
|
171
|
+
return this.fallbackIndex.searchKNNQuantized(query, k, candidateMultiplier, efSearch);
|
|
172
|
+
}
|
|
173
|
+
const queryId = this.nextQueryId++;
|
|
174
|
+
const workerIdx = this.roundRobinIndex % this.workers.length;
|
|
175
|
+
this.roundRobinIndex++;
|
|
176
|
+
const handle = this.workers[workerIdx];
|
|
177
|
+
return new Promise((resolve, reject) => {
|
|
178
|
+
handle.pendingResolve.set(queryId, resolve);
|
|
179
|
+
handle.pendingReject.set(queryId, reject);
|
|
180
|
+
handle.worker.postMessage({
|
|
181
|
+
type: 'search',
|
|
182
|
+
queryId,
|
|
183
|
+
query,
|
|
184
|
+
k,
|
|
185
|
+
efSearch: efSearch || Math.max(k * candidateMultiplier * 2, 50),
|
|
186
|
+
quantized: true,
|
|
187
|
+
candidateMultiplier,
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Batch search: dispatch multiple queries in parallel across workers.
|
|
193
|
+
*
|
|
194
|
+
* @param queries Array of query vectors
|
|
195
|
+
* @param k Number of results per query
|
|
196
|
+
* @param efSearch Search effort parameter
|
|
197
|
+
* @returns Array of results, one per query
|
|
198
|
+
*/
|
|
199
|
+
async searchBatch(queries, k, efSearch) {
|
|
200
|
+
if (!this.initialized) {
|
|
201
|
+
throw new VectorDBError('WorkerPool not initialized. Call init() first.', 'VALIDATION_ERROR');
|
|
202
|
+
}
|
|
203
|
+
// Fallback to sequential
|
|
204
|
+
if (this.workers.length === 0 && this.fallbackIndex) {
|
|
205
|
+
return queries.map(q => this.fallbackIndex.searchKNN(q, k, efSearch));
|
|
206
|
+
}
|
|
207
|
+
const promises = queries.map(q => this.search(q, k, efSearch));
|
|
208
|
+
return Promise.all(promises);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Batch quantized search across workers.
|
|
212
|
+
*/
|
|
213
|
+
async searchBatchQuantized(queries, k, candidateMultiplier = 3, efSearch) {
|
|
214
|
+
if (!this.initialized) {
|
|
215
|
+
throw new VectorDBError('WorkerPool not initialized. Call init() first.', 'VALIDATION_ERROR');
|
|
216
|
+
}
|
|
217
|
+
if (this.workers.length === 0 && this.fallbackIndex) {
|
|
218
|
+
return queries.map(q => this.fallbackIndex.searchKNNQuantized(q, k, candidateMultiplier, efSearch));
|
|
219
|
+
}
|
|
220
|
+
const promises = queries.map(q => this.searchQuantized(q, k, candidateMultiplier, efSearch));
|
|
221
|
+
return Promise.all(promises);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Send incremental graph updates to all workers.
|
|
225
|
+
* Workers update their neighbor lists without full re-initialization.
|
|
226
|
+
* New vectors are already visible via SharedArrayBuffer.
|
|
227
|
+
*/
|
|
228
|
+
broadcastGraphUpdate(newNodes, entryPointId, maxLevel) {
|
|
229
|
+
for (const handle of this.workers) {
|
|
230
|
+
handle.worker.postMessage({
|
|
231
|
+
type: 'graphUpdate',
|
|
232
|
+
newNodes,
|
|
233
|
+
});
|
|
234
|
+
if (entryPointId !== undefined && maxLevel !== undefined) {
|
|
235
|
+
handle.worker.postMessage({
|
|
236
|
+
type: 'updateEntryPoint',
|
|
237
|
+
entryPointId,
|
|
238
|
+
maxLevel,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Terminate all workers and clean up.
|
|
245
|
+
*/
|
|
246
|
+
destroy() {
|
|
247
|
+
for (const handle of this.workers) {
|
|
248
|
+
handle.worker.terminate();
|
|
249
|
+
for (const reject of handle.pendingReject.values()) {
|
|
250
|
+
reject(new Error('Worker pool destroyed'));
|
|
251
|
+
}
|
|
252
|
+
handle.pendingResolve.clear();
|
|
253
|
+
handle.pendingReject.clear();
|
|
254
|
+
}
|
|
255
|
+
this.workers = [];
|
|
256
|
+
this.initialized = false;
|
|
257
|
+
this.fallbackIndex = null;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get the number of active workers.
|
|
261
|
+
*/
|
|
262
|
+
get workerCount() {
|
|
263
|
+
return this.workers.length;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=WorkerPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPool.js","sourceRoot":"","sources":["../src/WorkerPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,14 @@
|
|
|
1
|
-
import { DistanceBackend } from './DistanceBackend';
|
|
2
1
|
/**
|
|
3
|
-
* Optimized JavaScript distance
|
|
4
|
-
*
|
|
2
|
+
* Optimized JavaScript distance functions with SIMD-style unrolling.
|
|
3
|
+
* These provide ~1.5-2x speedup over naive loops by reducing loop overhead
|
|
5
4
|
* and enabling better CPU pipelining.
|
|
6
5
|
*/
|
|
7
|
-
export declare class JsDistanceBackend implements DistanceBackend {
|
|
8
|
-
batchL2(base: Float32Array, dim: number, ids: Uint32Array, query: Float32Array, out: Float32Array): void;
|
|
9
|
-
batchDot(base: Float32Array, dim: number, ids: Uint32Array, query: Float32Array, out: Float32Array): void;
|
|
10
|
-
/**
|
|
11
|
-
* Compute dot product with 4-wide manual unrolling for better performance.
|
|
12
|
-
* Uses separate accumulators to enable instruction-level parallelism.
|
|
13
|
-
*/
|
|
14
|
-
private dotProductUnrolled;
|
|
15
|
-
/**
|
|
16
|
-
* Compute L2 squared distance with 4-wide manual unrolling.
|
|
17
|
-
*/
|
|
18
|
-
private l2SquaredUnrolled;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Fast inline distance functions for single-vector comparisons.
|
|
22
|
-
* These avoid the batch interface overhead for point-to-point distance calculations.
|
|
23
|
-
*/
|
|
24
6
|
export declare function dotProductFast(a: Float32Array, b: Float32Array): number;
|
|
25
7
|
export declare function l2SquaredFast(a: Float32Array, b: Float32Array): number;
|
|
26
8
|
/**
|
|
27
9
|
* Normalize a vector in place.
|
|
28
10
|
* Uses 8-wide unrolling for better ILP.
|
|
11
|
+
* Returns the original norm of the vector.
|
|
29
12
|
*/
|
|
30
13
|
export declare function normalizeInPlace(v: Float32Array): number;
|
|
31
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsDistanceBackend.d.ts","sourceRoot":"","sources":["../../src/backends/JsDistanceBackend.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"JsDistanceBackend.d.ts","sourceRoot":"","sources":["../../src/backends/JsDistanceBackend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CA2BvE;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAoCtE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAoCxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,UAAQ,EAAE,aAAa,UAAQ,GAAG,MAAM,CAuCzH"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimized JavaScript distance functions with SIMD-style unrolling.
|
|
3
|
+
* These provide ~1.5-2x speedup over naive loops by reducing loop overhead
|
|
4
|
+
* and enabling better CPU pipelining.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Fast inline distance functions for single-vector comparisons.
|
|
8
|
+
* Uses 8-wide unrolling with separate accumulators for instruction-level parallelism.
|
|
9
|
+
*/
|
|
10
|
+
import { DimensionMismatchError } from '../errors.js';
|
|
11
|
+
function assertMatchingDimensions(a, b, context) {
|
|
12
|
+
if (a.length !== b.length) {
|
|
13
|
+
throw new DimensionMismatchError(a.length, b.length, context);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function dotProductFast(a, b) {
|
|
17
|
+
assertMatchingDimensions(a, b, 'dotProductFast');
|
|
18
|
+
const len = a.length;
|
|
19
|
+
// Use 8 accumulators for better ILP (instruction-level parallelism)
|
|
20
|
+
let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
|
|
21
|
+
let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
|
|
22
|
+
let i = 0;
|
|
23
|
+
// 8-wide unrolling for high-dimensional vectors (768D, 1536D)
|
|
24
|
+
const limit8 = len - 7;
|
|
25
|
+
for (; i < limit8; i += 8) {
|
|
26
|
+
sum0 += a[i] * b[i];
|
|
27
|
+
sum1 += a[i + 1] * b[i + 1];
|
|
28
|
+
sum2 += a[i + 2] * b[i + 2];
|
|
29
|
+
sum3 += a[i + 3] * b[i + 3];
|
|
30
|
+
sum4 += a[i + 4] * b[i + 4];
|
|
31
|
+
sum5 += a[i + 5] * b[i + 5];
|
|
32
|
+
sum6 += a[i + 6] * b[i + 6];
|
|
33
|
+
sum7 += a[i + 7] * b[i + 7];
|
|
34
|
+
}
|
|
35
|
+
// Handle remaining elements
|
|
36
|
+
for (; i < len; i++) {
|
|
37
|
+
sum0 += a[i] * b[i];
|
|
38
|
+
}
|
|
39
|
+
return sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7;
|
|
40
|
+
}
|
|
41
|
+
export function l2SquaredFast(a, b) {
|
|
42
|
+
assertMatchingDimensions(a, b, 'l2SquaredFast');
|
|
43
|
+
const len = a.length;
|
|
44
|
+
// Use 8 accumulators for better ILP
|
|
45
|
+
let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
|
|
46
|
+
let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
|
|
47
|
+
let i = 0;
|
|
48
|
+
// 8-wide unrolling for high-dimensional vectors
|
|
49
|
+
const limit8 = len - 7;
|
|
50
|
+
for (; i < limit8; i += 8) {
|
|
51
|
+
const d0 = a[i] - b[i];
|
|
52
|
+
const d1 = a[i + 1] - b[i + 1];
|
|
53
|
+
const d2 = a[i + 2] - b[i + 2];
|
|
54
|
+
const d3 = a[i + 3] - b[i + 3];
|
|
55
|
+
const d4 = a[i + 4] - b[i + 4];
|
|
56
|
+
const d5 = a[i + 5] - b[i + 5];
|
|
57
|
+
const d6 = a[i + 6] - b[i + 6];
|
|
58
|
+
const d7 = a[i + 7] - b[i + 7];
|
|
59
|
+
sum0 += d0 * d0;
|
|
60
|
+
sum1 += d1 * d1;
|
|
61
|
+
sum2 += d2 * d2;
|
|
62
|
+
sum3 += d3 * d3;
|
|
63
|
+
sum4 += d4 * d4;
|
|
64
|
+
sum5 += d5 * d5;
|
|
65
|
+
sum6 += d6 * d6;
|
|
66
|
+
sum7 += d7 * d7;
|
|
67
|
+
}
|
|
68
|
+
// Handle remaining elements
|
|
69
|
+
for (; i < len; i++) {
|
|
70
|
+
const d = a[i] - b[i];
|
|
71
|
+
sum0 += d * d;
|
|
72
|
+
}
|
|
73
|
+
return sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Normalize a vector in place.
|
|
77
|
+
* Uses 8-wide unrolling for better ILP.
|
|
78
|
+
* Returns the original norm of the vector.
|
|
79
|
+
*/
|
|
80
|
+
export function normalizeInPlace(v) {
|
|
81
|
+
const len = v.length;
|
|
82
|
+
let s0 = 0, s1 = 0, s2 = 0, s3 = 0;
|
|
83
|
+
let s4 = 0, s5 = 0, s6 = 0, s7 = 0;
|
|
84
|
+
let i = 0;
|
|
85
|
+
const limit8 = len - 7;
|
|
86
|
+
for (; i < limit8; i += 8) {
|
|
87
|
+
s0 += v[i] * v[i];
|
|
88
|
+
s1 += v[i + 1] * v[i + 1];
|
|
89
|
+
s2 += v[i + 2] * v[i + 2];
|
|
90
|
+
s3 += v[i + 3] * v[i + 3];
|
|
91
|
+
s4 += v[i + 4] * v[i + 4];
|
|
92
|
+
s5 += v[i + 5] * v[i + 5];
|
|
93
|
+
s6 += v[i + 6] * v[i + 6];
|
|
94
|
+
s7 += v[i + 7] * v[i + 7];
|
|
95
|
+
}
|
|
96
|
+
for (; i < len; i++) {
|
|
97
|
+
s0 += v[i] * v[i];
|
|
98
|
+
}
|
|
99
|
+
const norm = Math.sqrt(s0 + s1 + s2 + s3 + s4 + s5 + s6 + s7);
|
|
100
|
+
if (norm < 1e-10) {
|
|
101
|
+
// Zero or near-zero vector: leave as-is to avoid Infinity/NaN from division
|
|
102
|
+
return norm;
|
|
103
|
+
}
|
|
104
|
+
const invNorm = 1 / norm;
|
|
105
|
+
// 8-wide unrolling for the division loop matches the norm computation above
|
|
106
|
+
const divLimit8 = len - 7;
|
|
107
|
+
let j = 0;
|
|
108
|
+
for (; j < divLimit8; j += 8) {
|
|
109
|
+
v[j] *= invNorm;
|
|
110
|
+
v[j + 1] *= invNorm;
|
|
111
|
+
v[j + 2] *= invNorm;
|
|
112
|
+
v[j + 3] *= invNorm;
|
|
113
|
+
v[j + 4] *= invNorm;
|
|
114
|
+
v[j + 5] *= invNorm;
|
|
115
|
+
v[j + 6] *= invNorm;
|
|
116
|
+
v[j + 7] *= invNorm;
|
|
117
|
+
}
|
|
118
|
+
for (; j < len; j++)
|
|
119
|
+
v[j] *= invNorm;
|
|
120
|
+
return norm;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Compute cosine distance between two vectors.
|
|
124
|
+
* For pre-normalized vectors, this is simply 1 - dot(a, b).
|
|
125
|
+
* Uses 8-wide unrolling for norm computation.
|
|
126
|
+
*/
|
|
127
|
+
export function cosineDistanceFast(a, b, aIsNormalized = false, bIsNormalized = false) {
|
|
128
|
+
assertMatchingDimensions(a, b, 'cosineDistanceFast');
|
|
129
|
+
const dot = dotProductFast(a, b);
|
|
130
|
+
if (aIsNormalized && bIsNormalized) {
|
|
131
|
+
// Both vectors are normalized, cosine distance = 1 - dot
|
|
132
|
+
const dist = 1 - dot;
|
|
133
|
+
return dist < 1e-10 ? 0 : dist;
|
|
134
|
+
}
|
|
135
|
+
// Need to compute norms with 8-wide unrolling
|
|
136
|
+
const len = a.length;
|
|
137
|
+
let nA0 = 0, nA1 = 0, nA2 = 0, nA3 = 0;
|
|
138
|
+
let nB0 = 0, nB1 = 0, nB2 = 0, nB3 = 0;
|
|
139
|
+
let i = 0;
|
|
140
|
+
const limit8 = len - 7;
|
|
141
|
+
for (; i < limit8; i += 8) {
|
|
142
|
+
nA0 += a[i] * a[i] + a[i + 4] * a[i + 4];
|
|
143
|
+
nA1 += a[i + 1] * a[i + 1] + a[i + 5] * a[i + 5];
|
|
144
|
+
nA2 += a[i + 2] * a[i + 2] + a[i + 6] * a[i + 6];
|
|
145
|
+
nA3 += a[i + 3] * a[i + 3] + a[i + 7] * a[i + 7];
|
|
146
|
+
nB0 += b[i] * b[i] + b[i + 4] * b[i + 4];
|
|
147
|
+
nB1 += b[i + 1] * b[i + 1] + b[i + 5] * b[i + 5];
|
|
148
|
+
nB2 += b[i + 2] * b[i + 2] + b[i + 6] * b[i + 6];
|
|
149
|
+
nB3 += b[i + 3] * b[i + 3] + b[i + 7] * b[i + 7];
|
|
150
|
+
}
|
|
151
|
+
for (; i < len; i++) {
|
|
152
|
+
nA0 += a[i] * a[i];
|
|
153
|
+
nB0 += b[i] * b[i];
|
|
154
|
+
}
|
|
155
|
+
const normA = nA0 + nA1 + nA2 + nA3;
|
|
156
|
+
const normB = nB0 + nB1 + nB2 + nB3;
|
|
157
|
+
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
158
|
+
if (magnitude === 0)
|
|
159
|
+
return 1;
|
|
160
|
+
const dist = 1 - (dot / magnitude);
|
|
161
|
+
return dist < 1e-10 ? 0 : dist;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=JsDistanceBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsDistanceBackend.js","sourceRoot":"","sources":["../../src/backends/JsDistanceBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ export declare function varintSize(value: number): number;
|
|
|
33
33
|
* Delta-encode a sorted array of neighbor IDs
|
|
34
34
|
* Returns the encoded buffer
|
|
35
35
|
*/
|
|
36
|
-
export declare function deltaEncodeNeighbors(neighbors: number[]): Uint8Array;
|
|
36
|
+
export declare function deltaEncodeNeighbors(neighbors: number[], preSorted?: boolean): Uint8Array;
|
|
37
37
|
/**
|
|
38
38
|
* Decode a delta-encoded neighbor list
|
|
39
39
|
* Returns the original neighbor IDs (sorted)
|
|
@@ -43,7 +43,7 @@ export declare function deltaDecodeNeighbors(buffer: Uint8Array, count: number):
|
|
|
43
43
|
* Calculate the encoded size for a neighbor list without actually encoding
|
|
44
44
|
* Useful for calculating total buffer size before serialization
|
|
45
45
|
*/
|
|
46
|
-
export declare function deltaEncodedSize(neighbors: number[]): number;
|
|
46
|
+
export declare function deltaEncodedSize(neighbors: number[], preSorted?: boolean): number;
|
|
47
47
|
/**
|
|
48
48
|
* Batch encode multiple neighbor lists efficiently
|
|
49
49
|
* Returns a single buffer with all encoded lists concatenated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeltaEncoder.d.ts","sourceRoot":"","sources":["../../src/encoding/DeltaEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"DeltaEncoder.d.ts","sourceRoot":"","sources":["../../src/encoding/DeltaEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAWtF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA0BjF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,UAAQ,GAAG,UAAU,CAyCvF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBhF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,UAAQ,GAAG,MAAM,CAuB/E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG;IAC3D,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CA0BA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,EAAE,EAAE,CAaZ"}
|