faiss 0.2.0 → 0.2.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/LICENSE.txt +1 -1
- data/README.md +7 -7
- data/ext/faiss/extconf.rb +6 -3
- data/ext/faiss/numo.hpp +4 -4
- data/ext/faiss/utils.cpp +1 -1
- data/ext/faiss/utils.h +1 -1
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +292 -291
- data/vendor/faiss/faiss/AutoTune.h +55 -56
- data/vendor/faiss/faiss/Clustering.cpp +365 -194
- data/vendor/faiss/faiss/Clustering.h +102 -35
- data/vendor/faiss/faiss/IVFlib.cpp +171 -195
- data/vendor/faiss/faiss/IVFlib.h +48 -51
- data/vendor/faiss/faiss/Index.cpp +85 -103
- data/vendor/faiss/faiss/Index.h +54 -48
- data/vendor/faiss/faiss/Index2Layer.cpp +126 -224
- data/vendor/faiss/faiss/Index2Layer.h +22 -36
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +407 -0
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +195 -0
- data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
- data/vendor/faiss/faiss/IndexBinary.h +140 -132
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
- data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
- data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
- data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
- data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
- data/vendor/faiss/faiss/IndexFlat.cpp +115 -176
- data/vendor/faiss/faiss/IndexFlat.h +42 -59
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +67 -0
- data/vendor/faiss/faiss/IndexFlatCodes.h +47 -0
- data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
- data/vendor/faiss/faiss/IndexHNSW.h +57 -41
- data/vendor/faiss/faiss/IndexIVF.cpp +545 -453
- data/vendor/faiss/faiss/IndexIVF.h +169 -118
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +316 -0
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +121 -0
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +247 -252
- data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +459 -517
- data/vendor/faiss/faiss/IndexIVFPQ.h +75 -67
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
- data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +163 -150
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +38 -25
- data/vendor/faiss/faiss/IndexLSH.cpp +66 -113
- data/vendor/faiss/faiss/IndexLSH.h +20 -38
- data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
- data/vendor/faiss/faiss/IndexLattice.h +11 -16
- data/vendor/faiss/faiss/IndexNNDescent.cpp +229 -0
- data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
- data/vendor/faiss/faiss/IndexNSG.cpp +301 -0
- data/vendor/faiss/faiss/IndexNSG.h +85 -0
- data/vendor/faiss/faiss/IndexPQ.cpp +387 -495
- data/vendor/faiss/faiss/IndexPQ.h +64 -82
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
- data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
- data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
- data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
- data/vendor/faiss/faiss/IndexRefine.cpp +139 -127
- data/vendor/faiss/faiss/IndexRefine.h +32 -23
- data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
- data/vendor/faiss/faiss/IndexReplicas.h +62 -56
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +111 -172
- data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -59
- data/vendor/faiss/faiss/IndexShards.cpp +256 -240
- data/vendor/faiss/faiss/IndexShards.h +85 -73
- data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
- data/vendor/faiss/faiss/MatrixStats.h +7 -10
- data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
- data/vendor/faiss/faiss/MetaIndexes.h +40 -34
- data/vendor/faiss/faiss/MetricType.h +7 -7
- data/vendor/faiss/faiss/VectorTransform.cpp +654 -475
- data/vendor/faiss/faiss/VectorTransform.h +64 -89
- data/vendor/faiss/faiss/clone_index.cpp +78 -73
- data/vendor/faiss/faiss/clone_index.h +4 -9
- data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
- data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
- data/vendor/faiss/faiss/gpu/GpuCloner.cpp +198 -171
- data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
- data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
- data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
- data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
- data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +60 -0
- data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
- data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
- data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
- data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
- data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
- data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
- data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
- data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
- data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
- data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
- data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
- data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
- data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
- data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
- data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
- data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
- data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
- data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
- data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
- data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
- data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
- data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
- data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
- data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
- data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +503 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +175 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
- data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
- data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
- data/vendor/faiss/faiss/impl/FaissException.h +41 -29
- data/vendor/faiss/faiss/impl/HNSW.cpp +606 -617
- data/vendor/faiss/faiss/impl/HNSW.h +179 -200
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +855 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +244 -0
- data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
- data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
- data/vendor/faiss/faiss/impl/NSG.cpp +679 -0
- data/vendor/faiss/faiss/impl/NSG.h +199 -0
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
- data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
- data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
- data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +758 -0
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +188 -0
- data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +647 -707
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
- data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
- data/vendor/faiss/faiss/impl/index_read.cpp +631 -480
- data/vendor/faiss/faiss/impl/index_write.cpp +547 -407
- data/vendor/faiss/faiss/impl/io.cpp +76 -95
- data/vendor/faiss/faiss/impl/io.h +31 -41
- data/vendor/faiss/faiss/impl/io_macros.h +60 -29
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +301 -0
- data/vendor/faiss/faiss/impl/kmeans1d.h +48 -0
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
- data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
- data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
- data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
- data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
- data/vendor/faiss/faiss/index_factory.cpp +619 -397
- data/vendor/faiss/faiss/index_factory.h +8 -6
- data/vendor/faiss/faiss/index_io.h +23 -26
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
- data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
- data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
- data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
- data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
- data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
- data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
- data/vendor/faiss/faiss/utils/Heap.h +186 -209
- data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
- data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
- data/vendor/faiss/faiss/utils/distances.cpp +305 -312
- data/vendor/faiss/faiss/utils/distances.h +170 -122
- data/vendor/faiss/faiss/utils/distances_simd.cpp +498 -508
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
- data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
- data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
- data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
- data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
- data/vendor/faiss/faiss/utils/hamming.h +62 -85
- data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
- data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
- data/vendor/faiss/faiss/utils/partitioning.h +26 -21
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
- data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
- data/vendor/faiss/faiss/utils/random.cpp +39 -63
- data/vendor/faiss/faiss/utils/random.h +13 -16
- data/vendor/faiss/faiss/utils/simdlib.h +4 -2
- data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
- data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
- data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
- data/vendor/faiss/faiss/utils/utils.cpp +304 -287
- data/vendor/faiss/faiss/utils/utils.h +54 -49
- metadata +29 -4
|
@@ -5,49 +5,34 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
// -*- c++ -*-
|
|
9
|
-
|
|
10
8
|
/* All distance functions for L2 and IP distances.
|
|
11
|
-
* The actual functions are implemented in distances.cpp and distances_simd.cpp
|
|
9
|
+
* The actual functions are implemented in distances.cpp and distances_simd.cpp
|
|
10
|
+
*/
|
|
12
11
|
|
|
13
12
|
#pragma once
|
|
14
13
|
|
|
15
14
|
#include <stdint.h>
|
|
16
15
|
|
|
17
|
-
#include <faiss/utils/Heap.h>
|
|
18
16
|
#include <faiss/impl/platform_macros.h>
|
|
19
|
-
|
|
17
|
+
#include <faiss/utils/Heap.h>
|
|
20
18
|
|
|
21
19
|
namespace faiss {
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
/*********************************************************
|
|
24
22
|
* Optimized distance/norm/inner prod computations
|
|
25
23
|
*********************************************************/
|
|
26
24
|
|
|
27
|
-
|
|
28
25
|
/// Squared L2 distance between two vectors
|
|
29
|
-
float fvec_L2sqr
|
|
30
|
-
const float * x,
|
|
31
|
-
const float * y,
|
|
32
|
-
size_t d);
|
|
26
|
+
float fvec_L2sqr(const float* x, const float* y, size_t d);
|
|
33
27
|
|
|
34
28
|
/// inner product
|
|
35
|
-
float
|
|
36
|
-
const float * x,
|
|
37
|
-
const float * y,
|
|
38
|
-
size_t d);
|
|
29
|
+
float fvec_inner_product(const float* x, const float* y, size_t d);
|
|
39
30
|
|
|
40
31
|
/// L1 distance
|
|
41
|
-
float fvec_L1
|
|
42
|
-
const float * x,
|
|
43
|
-
const float * y,
|
|
44
|
-
size_t d);
|
|
45
|
-
|
|
46
|
-
float fvec_Linf (
|
|
47
|
-
const float * x,
|
|
48
|
-
const float * y,
|
|
49
|
-
size_t d);
|
|
32
|
+
float fvec_L1(const float* x, const float* y, size_t d);
|
|
50
33
|
|
|
34
|
+
/// infinity distance
|
|
35
|
+
float fvec_Linf(const float* x, const float* y, size_t d);
|
|
51
36
|
|
|
52
37
|
/** Compute pairwise distances between sets of vectors
|
|
53
38
|
*
|
|
@@ -55,78 +40,120 @@ float fvec_Linf (
|
|
|
55
40
|
* @param nq nb of query vectors
|
|
56
41
|
* @param nb nb of database vectors
|
|
57
42
|
* @param xq query vectors (size nq * d)
|
|
58
|
-
* @param xb database
|
|
43
|
+
* @param xb database vectors (size nb * d)
|
|
59
44
|
* @param dis output distances (size nq * nb)
|
|
60
45
|
* @param ldq,ldb, ldd strides for the matrices
|
|
61
46
|
*/
|
|
62
|
-
void pairwise_L2sqr
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
47
|
+
void pairwise_L2sqr(
|
|
48
|
+
int64_t d,
|
|
49
|
+
int64_t nq,
|
|
50
|
+
const float* xq,
|
|
51
|
+
int64_t nb,
|
|
52
|
+
const float* xb,
|
|
53
|
+
float* dis,
|
|
54
|
+
int64_t ldq = -1,
|
|
55
|
+
int64_t ldb = -1,
|
|
56
|
+
int64_t ldd = -1);
|
|
67
57
|
|
|
68
58
|
/* compute the inner product between nx vectors x and one y */
|
|
69
|
-
void fvec_inner_products_ny
|
|
70
|
-
float
|
|
71
|
-
const float
|
|
72
|
-
const float
|
|
73
|
-
size_t d,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const float
|
|
80
|
-
|
|
81
|
-
|
|
59
|
+
void fvec_inner_products_ny(
|
|
60
|
+
float* ip, /* output inner product */
|
|
61
|
+
const float* x,
|
|
62
|
+
const float* y,
|
|
63
|
+
size_t d,
|
|
64
|
+
size_t ny);
|
|
65
|
+
|
|
66
|
+
/* compute ny square L2 distance between x and a set of contiguous y vectors */
|
|
67
|
+
void fvec_L2sqr_ny(
|
|
68
|
+
float* dis,
|
|
69
|
+
const float* x,
|
|
70
|
+
const float* y,
|
|
71
|
+
size_t d,
|
|
72
|
+
size_t ny);
|
|
82
73
|
|
|
83
74
|
/** squared norm of a vector */
|
|
84
|
-
float fvec_norm_L2sqr
|
|
85
|
-
size_t d);
|
|
75
|
+
float fvec_norm_L2sqr(const float* x, size_t d);
|
|
86
76
|
|
|
87
77
|
/** compute the L2 norms for a set of vectors
|
|
88
78
|
*
|
|
89
|
-
* @param
|
|
79
|
+
* @param norms output norms, size nx
|
|
90
80
|
* @param x set of vectors, size nx * d
|
|
91
81
|
*/
|
|
92
|
-
void fvec_norms_L2
|
|
82
|
+
void fvec_norms_L2(float* norms, const float* x, size_t d, size_t nx);
|
|
93
83
|
|
|
94
|
-
/// same as fvec_norms_L2, but computes
|
|
95
|
-
void fvec_norms_L2sqr
|
|
84
|
+
/// same as fvec_norms_L2, but computes squared norms
|
|
85
|
+
void fvec_norms_L2sqr(float* norms, const float* x, size_t d, size_t nx);
|
|
96
86
|
|
|
97
87
|
/* L2-renormalize a set of vector. Nothing done if the vector is 0-normed */
|
|
98
|
-
void fvec_renorm_L2
|
|
99
|
-
|
|
88
|
+
void fvec_renorm_L2(size_t d, size_t nx, float* x);
|
|
100
89
|
|
|
101
|
-
/* This function exists because the Torch counterpart is
|
|
90
|
+
/* This function exists because the Torch counterpart is extremely slow
|
|
102
91
|
(not multi-threaded + unexpected overhead even in single thread).
|
|
103
92
|
It is here to implement the usual property |x-y|^2=|x|^2+|y|^2-2<x|y> */
|
|
104
|
-
void inner_product_to_L2sqr
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
93
|
+
void inner_product_to_L2sqr(
|
|
94
|
+
float* dis,
|
|
95
|
+
const float* nr1,
|
|
96
|
+
const float* nr2,
|
|
97
|
+
size_t n1,
|
|
98
|
+
size_t n2);
|
|
99
|
+
|
|
100
|
+
/*********************************************************
|
|
101
|
+
* Vector to vector functions
|
|
102
|
+
*********************************************************/
|
|
103
|
+
|
|
104
|
+
/** compute c := a + b for vectors
|
|
105
|
+
*
|
|
106
|
+
* c and a can overlap, c and b can overlap
|
|
107
|
+
*
|
|
108
|
+
* @param a size d
|
|
109
|
+
* @param b size d
|
|
110
|
+
* @param c size d
|
|
111
|
+
*/
|
|
112
|
+
void fvec_add(size_t d, const float* a, const float* b, float* c);
|
|
113
|
+
|
|
114
|
+
/** compute c := a + b for a, c vectors and b a scalar
|
|
115
|
+
*
|
|
116
|
+
* c and a can overlap
|
|
117
|
+
*
|
|
118
|
+
* @param a size d
|
|
119
|
+
* @param c size d
|
|
120
|
+
*/
|
|
121
|
+
void fvec_add(size_t d, const float* a, float b, float* c);
|
|
122
|
+
|
|
123
|
+
/** compute c := a - b for vectors
|
|
124
|
+
*
|
|
125
|
+
* c and a can overlap, c and b can overlap
|
|
126
|
+
*
|
|
127
|
+
* @param a size d
|
|
128
|
+
* @param b size d
|
|
129
|
+
* @param c size d
|
|
130
|
+
*/
|
|
131
|
+
void fvec_sub(size_t d, const float* a, const float* b, float* c);
|
|
108
132
|
|
|
109
133
|
/***************************************************************************
|
|
110
134
|
* Compute a subset of distances
|
|
111
135
|
***************************************************************************/
|
|
112
136
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
void fvec_inner_products_by_idx
|
|
116
|
-
float
|
|
117
|
-
const float
|
|
118
|
-
const float
|
|
119
|
-
const int64_t
|
|
120
|
-
size_t d,
|
|
137
|
+
/* compute the inner product between x and a subset y of ny vectors,
|
|
138
|
+
whose indices are given by idy. */
|
|
139
|
+
void fvec_inner_products_by_idx(
|
|
140
|
+
float* ip,
|
|
141
|
+
const float* x,
|
|
142
|
+
const float* y,
|
|
143
|
+
const int64_t* ids,
|
|
144
|
+
size_t d,
|
|
145
|
+
size_t nx,
|
|
146
|
+
size_t ny);
|
|
121
147
|
|
|
122
148
|
/* same but for a subset in y indexed by idsy (ny vectors in total) */
|
|
123
|
-
void fvec_L2sqr_by_idx
|
|
124
|
-
float
|
|
125
|
-
const float
|
|
126
|
-
const float
|
|
127
|
-
const int64_t
|
|
128
|
-
size_t d,
|
|
129
|
-
|
|
149
|
+
void fvec_L2sqr_by_idx(
|
|
150
|
+
float* dis,
|
|
151
|
+
const float* x,
|
|
152
|
+
const float* y,
|
|
153
|
+
const int64_t* ids, /* ids of y vecs */
|
|
154
|
+
size_t d,
|
|
155
|
+
size_t nx,
|
|
156
|
+
size_t ny);
|
|
130
157
|
|
|
131
158
|
/** compute dis[j] = L2sqr(x[ix[j]], y[iy[j]]) forall j=0..n-1
|
|
132
159
|
*
|
|
@@ -136,18 +163,24 @@ void fvec_L2sqr_by_idx (
|
|
|
136
163
|
* @param iy size n
|
|
137
164
|
* @param dis size n
|
|
138
165
|
*/
|
|
139
|
-
void pairwise_indexed_L2sqr
|
|
140
|
-
size_t d,
|
|
141
|
-
|
|
142
|
-
const float
|
|
143
|
-
|
|
166
|
+
void pairwise_indexed_L2sqr(
|
|
167
|
+
size_t d,
|
|
168
|
+
size_t n,
|
|
169
|
+
const float* x,
|
|
170
|
+
const int64_t* ix,
|
|
171
|
+
const float* y,
|
|
172
|
+
const int64_t* iy,
|
|
173
|
+
float* dis);
|
|
144
174
|
|
|
145
175
|
/* same for inner product */
|
|
146
|
-
void pairwise_indexed_inner_product
|
|
147
|
-
size_t d,
|
|
148
|
-
|
|
149
|
-
const float
|
|
150
|
-
|
|
176
|
+
void pairwise_indexed_inner_product(
|
|
177
|
+
size_t d,
|
|
178
|
+
size_t n,
|
|
179
|
+
const float* x,
|
|
180
|
+
const int64_t* ix,
|
|
181
|
+
const float* y,
|
|
182
|
+
const int64_t* iy,
|
|
183
|
+
float* dis);
|
|
151
184
|
|
|
152
185
|
/***************************************************************************
|
|
153
186
|
* KNN functions
|
|
@@ -171,46 +204,51 @@ FAISS_API extern int distance_compute_min_k_reservoir;
|
|
|
171
204
|
* @param y database vectors, size ny * d
|
|
172
205
|
* @param res result array, which also provides k. Sorted on output
|
|
173
206
|
*/
|
|
174
|
-
void knn_inner_product
|
|
175
|
-
const float
|
|
176
|
-
const float
|
|
177
|
-
size_t d,
|
|
178
|
-
|
|
207
|
+
void knn_inner_product(
|
|
208
|
+
const float* x,
|
|
209
|
+
const float* y,
|
|
210
|
+
size_t d,
|
|
211
|
+
size_t nx,
|
|
212
|
+
size_t ny,
|
|
213
|
+
float_minheap_array_t* res);
|
|
179
214
|
|
|
180
215
|
/** Same as knn_inner_product, for the L2 distance
|
|
181
216
|
* @param y_norm2 norms for the y vectors (nullptr or size ny)
|
|
182
217
|
*/
|
|
183
|
-
void knn_L2sqr
|
|
184
|
-
const float
|
|
185
|
-
const float
|
|
186
|
-
size_t d,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
218
|
+
void knn_L2sqr(
|
|
219
|
+
const float* x,
|
|
220
|
+
const float* y,
|
|
221
|
+
size_t d,
|
|
222
|
+
size_t nx,
|
|
223
|
+
size_t ny,
|
|
224
|
+
float_maxheap_array_t* res,
|
|
225
|
+
const float* y_norm2 = nullptr);
|
|
190
226
|
|
|
191
227
|
/* Find the nearest neighbors for nx queries in a set of ny vectors
|
|
192
228
|
* indexed by ids. May be useful for re-ranking a pre-selected vector list
|
|
193
229
|
*/
|
|
194
|
-
void knn_inner_products_by_idx
|
|
195
|
-
const float
|
|
196
|
-
const float
|
|
197
|
-
const int64_t
|
|
198
|
-
size_t d,
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
230
|
+
void knn_inner_products_by_idx(
|
|
231
|
+
const float* x,
|
|
232
|
+
const float* y,
|
|
233
|
+
const int64_t* ids,
|
|
234
|
+
size_t d,
|
|
235
|
+
size_t nx,
|
|
236
|
+
size_t ny,
|
|
237
|
+
float_minheap_array_t* res);
|
|
238
|
+
|
|
239
|
+
void knn_L2sqr_by_idx(
|
|
240
|
+
const float* x,
|
|
241
|
+
const float* y,
|
|
242
|
+
const int64_t* ids,
|
|
243
|
+
size_t d,
|
|
244
|
+
size_t nx,
|
|
245
|
+
size_t ny,
|
|
246
|
+
float_maxheap_array_t* res);
|
|
207
247
|
|
|
208
248
|
/***************************************************************************
|
|
209
249
|
* Range search
|
|
210
250
|
***************************************************************************/
|
|
211
251
|
|
|
212
|
-
|
|
213
|
-
|
|
214
252
|
/// Forward declaration, see AuxIndexStructures.h
|
|
215
253
|
struct RangeSearchResult;
|
|
216
254
|
|
|
@@ -222,21 +260,24 @@ struct RangeSearchResult;
|
|
|
222
260
|
* @param radius search radius around the x vectors
|
|
223
261
|
* @param result result structure
|
|
224
262
|
*/
|
|
225
|
-
void range_search_L2sqr
|
|
226
|
-
const float
|
|
227
|
-
const float
|
|
228
|
-
size_t d,
|
|
263
|
+
void range_search_L2sqr(
|
|
264
|
+
const float* x,
|
|
265
|
+
const float* y,
|
|
266
|
+
size_t d,
|
|
267
|
+
size_t nx,
|
|
268
|
+
size_t ny,
|
|
229
269
|
float radius,
|
|
230
|
-
RangeSearchResult
|
|
270
|
+
RangeSearchResult* result);
|
|
231
271
|
|
|
232
272
|
/// same as range_search_L2sqr for the inner product similarity
|
|
233
|
-
void range_search_inner_product
|
|
234
|
-
const float
|
|
235
|
-
const float
|
|
236
|
-
size_t d,
|
|
273
|
+
void range_search_inner_product(
|
|
274
|
+
const float* x,
|
|
275
|
+
const float* y,
|
|
276
|
+
size_t d,
|
|
277
|
+
size_t nx,
|
|
278
|
+
size_t ny,
|
|
237
279
|
float radius,
|
|
238
|
-
RangeSearchResult
|
|
239
|
-
|
|
280
|
+
RangeSearchResult* result);
|
|
240
281
|
|
|
241
282
|
/***************************************************************************
|
|
242
283
|
* PQ tables computations
|
|
@@ -244,9 +285,16 @@ void range_search_inner_product (
|
|
|
244
285
|
|
|
245
286
|
/// specialized function for PQ2
|
|
246
287
|
void compute_PQ_dis_tables_dsub2(
|
|
247
|
-
size_t d,
|
|
248
|
-
size_t
|
|
288
|
+
size_t d,
|
|
289
|
+
size_t ksub,
|
|
290
|
+
const float* centroids,
|
|
291
|
+
size_t nx,
|
|
292
|
+
const float* x,
|
|
249
293
|
bool is_inner_product,
|
|
250
|
-
float
|
|
294
|
+
float* dis_tables);
|
|
295
|
+
|
|
296
|
+
/***************************************************************************
|
|
297
|
+
* Templatized versions of distance functions
|
|
298
|
+
***************************************************************************/
|
|
251
299
|
|
|
252
300
|
} // namespace faiss
|