faiss 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/faiss/version.rb +1 -1
  4. data/vendor/faiss/faiss/AutoTune.h +1 -1
  5. data/vendor/faiss/faiss/Clustering.cpp +35 -4
  6. data/vendor/faiss/faiss/Clustering.h +10 -1
  7. data/vendor/faiss/faiss/IVFlib.cpp +4 -1
  8. data/vendor/faiss/faiss/Index.h +21 -6
  9. data/vendor/faiss/faiss/IndexBinaryHNSW.h +1 -1
  10. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +1 -1
  11. data/vendor/faiss/faiss/IndexFastScan.cpp +22 -4
  12. data/vendor/faiss/faiss/IndexFlat.cpp +11 -7
  13. data/vendor/faiss/faiss/IndexFlatCodes.cpp +159 -5
  14. data/vendor/faiss/faiss/IndexFlatCodes.h +20 -3
  15. data/vendor/faiss/faiss/IndexHNSW.cpp +143 -90
  16. data/vendor/faiss/faiss/IndexHNSW.h +52 -3
  17. data/vendor/faiss/faiss/IndexIVF.cpp +3 -3
  18. data/vendor/faiss/faiss/IndexIVF.h +9 -1
  19. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +15 -0
  20. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +3 -0
  21. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +130 -57
  22. data/vendor/faiss/faiss/IndexIVFFastScan.h +14 -7
  23. data/vendor/faiss/faiss/IndexIVFPQ.cpp +1 -3
  24. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +21 -2
  25. data/vendor/faiss/faiss/IndexLattice.cpp +1 -19
  26. data/vendor/faiss/faiss/IndexLattice.h +3 -22
  27. data/vendor/faiss/faiss/IndexNNDescent.cpp +0 -29
  28. data/vendor/faiss/faiss/IndexNNDescent.h +1 -1
  29. data/vendor/faiss/faiss/IndexNSG.h +1 -1
  30. data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +56 -0
  31. data/vendor/faiss/faiss/IndexNeuralNetCodec.h +49 -0
  32. data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
  33. data/vendor/faiss/faiss/IndexRefine.cpp +5 -5
  34. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +3 -1
  35. data/vendor/faiss/faiss/MetricType.h +7 -2
  36. data/vendor/faiss/faiss/cppcontrib/detail/UintReader.h +95 -17
  37. data/vendor/faiss/faiss/cppcontrib/factory_tools.cpp +152 -0
  38. data/vendor/faiss/faiss/cppcontrib/factory_tools.h +24 -0
  39. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +83 -30
  40. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +36 -4
  41. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +6 -0
  42. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -1
  43. data/vendor/faiss/faiss/gpu/GpuIndex.h +2 -8
  44. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +282 -0
  45. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +6 -0
  46. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +2 -0
  47. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +25 -0
  48. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +26 -21
  49. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +6 -0
  50. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +8 -5
  51. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +65 -0
  52. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +1 -1
  53. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +6 -0
  54. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +4 -1
  55. data/vendor/faiss/faiss/gpu/utils/Timer.h +1 -1
  56. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +25 -0
  57. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +9 -1
  58. data/vendor/faiss/faiss/impl/DistanceComputer.h +46 -0
  59. data/vendor/faiss/faiss/impl/FaissAssert.h +4 -2
  60. data/vendor/faiss/faiss/impl/HNSW.cpp +358 -190
  61. data/vendor/faiss/faiss/impl/HNSW.h +43 -22
  62. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +8 -8
  63. data/vendor/faiss/faiss/impl/LookupTableScaler.h +34 -0
  64. data/vendor/faiss/faiss/impl/NNDescent.cpp +13 -8
  65. data/vendor/faiss/faiss/impl/NSG.cpp +0 -29
  66. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +1 -0
  67. data/vendor/faiss/faiss/impl/ProductQuantizer.h +5 -1
  68. data/vendor/faiss/faiss/impl/ResultHandler.h +151 -32
  69. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +719 -102
  70. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +3 -0
  71. data/vendor/faiss/faiss/impl/code_distance/code_distance-avx2.h +5 -0
  72. data/vendor/faiss/faiss/impl/code_distance/code_distance-avx512.h +248 -0
  73. data/vendor/faiss/faiss/impl/index_read.cpp +29 -15
  74. data/vendor/faiss/faiss/impl/index_read_utils.h +37 -0
  75. data/vendor/faiss/faiss/impl/index_write.cpp +28 -10
  76. data/vendor/faiss/faiss/impl/io.cpp +13 -5
  77. data/vendor/faiss/faiss/impl/io.h +4 -4
  78. data/vendor/faiss/faiss/impl/io_macros.h +6 -0
  79. data/vendor/faiss/faiss/impl/platform_macros.h +22 -0
  80. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +11 -0
  81. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +1 -1
  82. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +448 -1
  83. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +5 -5
  84. data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
  85. data/vendor/faiss/faiss/impl/simd_result_handlers.h +143 -59
  86. data/vendor/faiss/faiss/index_factory.cpp +31 -13
  87. data/vendor/faiss/faiss/index_io.h +12 -5
  88. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +28 -8
  89. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +3 -0
  90. data/vendor/faiss/faiss/invlists/DirectMap.cpp +9 -1
  91. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +55 -17
  92. data/vendor/faiss/faiss/invlists/InvertedLists.h +18 -9
  93. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +21 -6
  94. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +2 -1
  95. data/vendor/faiss/faiss/python/python_callbacks.cpp +3 -3
  96. data/vendor/faiss/faiss/utils/Heap.h +105 -0
  97. data/vendor/faiss/faiss/utils/NeuralNet.cpp +342 -0
  98. data/vendor/faiss/faiss/utils/NeuralNet.h +147 -0
  99. data/vendor/faiss/faiss/utils/bf16.h +36 -0
  100. data/vendor/faiss/faiss/utils/distances.cpp +58 -88
  101. data/vendor/faiss/faiss/utils/distances.h +5 -5
  102. data/vendor/faiss/faiss/utils/distances_simd.cpp +997 -9
  103. data/vendor/faiss/faiss/utils/extra_distances-inl.h +70 -0
  104. data/vendor/faiss/faiss/utils/extra_distances.cpp +85 -137
  105. data/vendor/faiss/faiss/utils/extra_distances.h +3 -2
  106. data/vendor/faiss/faiss/utils/hamming.cpp +1 -1
  107. data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +4 -1
  108. data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +2 -1
  109. data/vendor/faiss/faiss/utils/random.cpp +43 -0
  110. data/vendor/faiss/faiss/utils/random.h +25 -0
  111. data/vendor/faiss/faiss/utils/simdlib.h +10 -1
  112. data/vendor/faiss/faiss/utils/simdlib_avx512.h +296 -0
  113. data/vendor/faiss/faiss/utils/simdlib_neon.h +5 -2
  114. data/vendor/faiss/faiss/utils/simdlib_ppc64.h +1084 -0
  115. data/vendor/faiss/faiss/utils/transpose/transpose-avx512-inl.h +176 -0
  116. data/vendor/faiss/faiss/utils/utils.cpp +10 -3
  117. data/vendor/faiss/faiss/utils/utils.h +3 -0
  118. metadata +16 -4
  119. data/vendor/faiss/faiss/impl/code_distance/code_distance_avx512.h +0 -102
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ // This file contains transposing kernels for AVX512 for // tiny float/int32
11
+ // matrices, such as 16x2.
12
+
13
+ #ifdef __AVX512F__
14
+
15
+ #include <immintrin.h>
16
+
17
+ namespace faiss {
18
+
19
+ // 16x2 -> 2x16
20
+ inline void transpose_16x2(
21
+ const __m512 i0,
22
+ const __m512 i1,
23
+ __m512& o0,
24
+ __m512& o1) {
25
+ // assume we have the following input:
26
+ // i0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
27
+ // i1: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
28
+
29
+ // 0 1 2 3 8 9 10 11 16 17 18 19 24 25 26 27
30
+ const __m512 r0 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(2, 0, 2, 0));
31
+ // 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31
32
+ const __m512 r1 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(3, 1, 3, 1));
33
+
34
+ // 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
35
+ o0 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(2, 0, 2, 0));
36
+ // 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
37
+ o1 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(3, 1, 3, 1));
38
+ }
39
+
40
+ // 16x4 -> 4x16
41
+ inline void transpose_16x4(
42
+ const __m512 i0,
43
+ const __m512 i1,
44
+ const __m512 i2,
45
+ const __m512 i3,
46
+ __m512& o0,
47
+ __m512& o1,
48
+ __m512& o2,
49
+ __m512& o3) {
50
+ // assume that we have the following input:
51
+ // i0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
52
+ // i1: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
53
+ // i2: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
54
+ // i3: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
55
+
56
+ // 0 1 2 3 8 9 10 11 16 17 18 19 24 25 26 27
57
+ const __m512 r0 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(2, 0, 2, 0));
58
+ // 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31
59
+ const __m512 r1 = _mm512_shuffle_f32x4(i0, i1, _MM_SHUFFLE(3, 1, 3, 1));
60
+ // 32 33 34 35 40 41 42 43 48 49 50 51 56 57 58 59
61
+ const __m512 r2 = _mm512_shuffle_f32x4(i2, i3, _MM_SHUFFLE(2, 0, 2, 0));
62
+ // 52 53 54 55 60 61 62 63 52 53 54 55 60 61 62 63
63
+ const __m512 r3 = _mm512_shuffle_f32x4(i2, i3, _MM_SHUFFLE(3, 1, 3, 1));
64
+
65
+ // 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
66
+ const __m512 t0 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(2, 0, 2, 0));
67
+ // 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
68
+ const __m512 t1 = _mm512_shuffle_ps(r0, r1, _MM_SHUFFLE(3, 1, 3, 1));
69
+ // 32 34 52 54 40 42 60 62 48 50 52 54 56 58 60 62
70
+ const __m512 t2 = _mm512_shuffle_ps(r2, r3, _MM_SHUFFLE(2, 0, 2, 0));
71
+ // 33 35 53 55 41 43 61 63 49 51 53 55 57 59 61 63
72
+ const __m512 t3 = _mm512_shuffle_ps(r2, r3, _MM_SHUFFLE(3, 1, 3, 1));
73
+
74
+ const __m512i idx0 = _mm512_set_epi32(
75
+ 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0);
76
+ const __m512i idx1 = _mm512_set_epi32(
77
+ 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1);
78
+
79
+ // 0 4 8 12 16 20 24 28 32 52 40 60 48 52 56 60
80
+ o0 = _mm512_permutex2var_ps(t0, idx0, t2);
81
+ // 1 5 9 13 17 21 25 29 33 53 41 61 49 53 57 61
82
+ o1 = _mm512_permutex2var_ps(t1, idx0, t3);
83
+ // 2 6 10 14 18 22 26 30 34 54 42 62 50 54 58 62
84
+ o2 = _mm512_permutex2var_ps(t0, idx1, t2);
85
+ // 3 7 11 15 19 23 27 31 35 55 43 63 51 55 59 63
86
+ o3 = _mm512_permutex2var_ps(t1, idx1, t3);
87
+ }
88
+
89
+ // 16x8 -> 8x16 transpose
90
+ inline void transpose_16x8(
91
+ const __m512 i0,
92
+ const __m512 i1,
93
+ const __m512 i2,
94
+ const __m512 i3,
95
+ const __m512 i4,
96
+ const __m512 i5,
97
+ const __m512 i6,
98
+ const __m512 i7,
99
+ __m512& o0,
100
+ __m512& o1,
101
+ __m512& o2,
102
+ __m512& o3,
103
+ __m512& o4,
104
+ __m512& o5,
105
+ __m512& o6,
106
+ __m512& o7) {
107
+ // assume that we have the following input:
108
+ // i0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
109
+ // i1: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
110
+ // i2: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
111
+ // i3: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
112
+ // i4: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
113
+ // i5: 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
114
+ // i6: 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
115
+ // i7: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
116
+
117
+ // 0 16 1 17 4 20 5 21 8 24 9 25 12 28 13 29
118
+ const __m512 r0 = _mm512_unpacklo_ps(i0, i1);
119
+ // 2 18 3 19 6 22 7 23 10 26 11 27 14 30 15 31
120
+ const __m512 r1 = _mm512_unpackhi_ps(i0, i1);
121
+ // 32 48 33 49 36 52 37 53 40 56 41 57 44 60 45 61
122
+ const __m512 r2 = _mm512_unpacklo_ps(i2, i3);
123
+ // 34 50 35 51 38 54 39 55 42 58 43 59 46 62 47 63
124
+ const __m512 r3 = _mm512_unpackhi_ps(i2, i3);
125
+ // 64 80 65 81 68 84 69 85 72 88 73 89 76 92 77 93
126
+ const __m512 r4 = _mm512_unpacklo_ps(i4, i5);
127
+ // 66 82 67 83 70 86 71 87 74 90 75 91 78 94 79 95
128
+ const __m512 r5 = _mm512_unpackhi_ps(i4, i5);
129
+ // 96 112 97 113 100 116 101 117 104 120 105 121 108 124 109 125
130
+ const __m512 r6 = _mm512_unpacklo_ps(i6, i7);
131
+ // 98 114 99 115 102 118 103 119 106 122 107 123 110 126 111 127
132
+ const __m512 r7 = _mm512_unpackhi_ps(i6, i7);
133
+
134
+ // 0 16 32 48 4 20 36 52 8 24 40 56 12 28 44 60
135
+ const __m512 t0 = _mm512_shuffle_ps(r0, r2, _MM_SHUFFLE(1, 0, 1, 0));
136
+ // 1 17 33 49 5 21 37 53 9 25 41 57 13 29 45 61
137
+ const __m512 t1 = _mm512_shuffle_ps(r0, r2, _MM_SHUFFLE(3, 2, 3, 2));
138
+ // 2 18 34 50 6 22 38 54 10 26 42 58 14 30 46 62
139
+ const __m512 t2 = _mm512_shuffle_ps(r1, r3, _MM_SHUFFLE(1, 0, 1, 0));
140
+ // 3 19 35 51 7 23 39 55 11 27 43 59 15 31 47 63
141
+ const __m512 t3 = _mm512_shuffle_ps(r1, r3, _MM_SHUFFLE(3, 2, 3, 2));
142
+ // 64 80 96 112 68 84 100 116 72 88 104 120 76 92 108 124
143
+ const __m512 t4 = _mm512_shuffle_ps(r4, r6, _MM_SHUFFLE(1, 0, 1, 0));
144
+ // 65 81 97 113 69 85 101 117 73 89 105 121 77 93 109 125
145
+ const __m512 t5 = _mm512_shuffle_ps(r4, r6, _MM_SHUFFLE(3, 2, 3, 2));
146
+ // 66 82 98 114 70 86 102 118 74 90 106 122 78 94 110 126
147
+ const __m512 t6 = _mm512_shuffle_ps(r5, r7, _MM_SHUFFLE(1, 0, 1, 0));
148
+ // 67 83 99 115 71 87 103 119 75 91 107 123 79 95 111 127
149
+ const __m512 t7 = _mm512_shuffle_ps(r5, r7, _MM_SHUFFLE(3, 2, 3, 2));
150
+
151
+ const __m512i idx0 = _mm512_set_epi32(
152
+ 27, 19, 26, 18, 25, 17, 24, 16, 11, 3, 10, 2, 9, 1, 8, 0);
153
+ const __m512i idx1 = _mm512_set_epi32(
154
+ 31, 23, 30, 22, 29, 21, 28, 20, 15, 7, 14, 6, 13, 5, 12, 4);
155
+
156
+ // 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120
157
+ o0 = _mm512_permutex2var_ps(t0, idx0, t4);
158
+ // 1 9 17 25 33 41 49 57 65 73 81 89 97 105 113 121
159
+ o1 = _mm512_permutex2var_ps(t1, idx0, t5);
160
+ // 2 10 18 26 34 42 50 58 66 74 82 90 98 106 114 122
161
+ o2 = _mm512_permutex2var_ps(t2, idx0, t6);
162
+ // 3 11 19 27 35 43 51 59 67 75 83 91 99 107 115 123
163
+ o3 = _mm512_permutex2var_ps(t3, idx0, t7);
164
+ // 4 12 20 28 36 44 52 60 68 76 84 92 100 108 116 124
165
+ o4 = _mm512_permutex2var_ps(t0, idx1, t4);
166
+ // 5 13 21 29 37 45 53 61 69 77 85 93 101 109 117 125
167
+ o5 = _mm512_permutex2var_ps(t1, idx1, t5);
168
+ // 6 14 22 30 38 46 54 62 70 78 86 94 102 110 118 126
169
+ o6 = _mm512_permutex2var_ps(t2, idx1, t6);
170
+ // 7 15 23 31 39 47 55 63 71 79 87 95 103 111 119 127
171
+ o7 = _mm512_permutex2var_ps(t3, idx1, t7);
172
+ }
173
+
174
+ } // namespace faiss
175
+
176
+ #endif
@@ -7,6 +7,7 @@
7
7
 
8
8
  // -*- c++ -*-
9
9
 
10
+ #include <faiss/Index.h>
10
11
  #include <faiss/utils/utils.h>
11
12
 
12
13
  #include <cassert>
@@ -114,10 +115,12 @@ std::string get_compile_options() {
114
115
  options += "OPTIMIZE ";
115
116
  #endif
116
117
 
117
- #ifdef __AVX2__
118
- options += "AVX2 ";
119
- #elif __AVX512F__
118
+ #ifdef __AVX512F__
120
119
  options += "AVX512 ";
120
+ #elif defined(__AVX2__)
121
+ options += "AVX2 ";
122
+ #elif defined(__ARM_FEATURE_SVE)
123
+ options += "SVE NEON ";
121
124
  #elif defined(__aarch64__)
122
125
  options += "NEON ";
123
126
  #else
@@ -129,6 +132,10 @@ std::string get_compile_options() {
129
132
  return options;
130
133
  }
131
134
 
135
+ std::string get_version() {
136
+ return VERSION_STRING;
137
+ }
138
+
132
139
  #ifdef _MSC_VER
133
140
  double getmillisecs() {
134
141
  LARGE_INTEGER ts;
@@ -37,6 +37,9 @@ std::string get_compile_options();
37
37
  * Get some stats about the system
38
38
  **************************************************/
39
39
 
40
+ // Expose FAISS version as a string
41
+ std::string get_version();
42
+
40
43
  /// ms elapsed since some arbitrary epoch
41
44
  double getmillisecs();
42
45
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faiss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-14 00:00:00.000000000 Z
11
+ date: 2024-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -125,6 +125,8 @@ files:
125
125
  - vendor/faiss/faiss/IndexNNDescent.h
126
126
  - vendor/faiss/faiss/IndexNSG.cpp
127
127
  - vendor/faiss/faiss/IndexNSG.h
128
+ - vendor/faiss/faiss/IndexNeuralNetCodec.cpp
129
+ - vendor/faiss/faiss/IndexNeuralNetCodec.h
128
130
  - vendor/faiss/faiss/IndexPQ.cpp
129
131
  - vendor/faiss/faiss/IndexPQ.h
130
132
  - vendor/faiss/faiss/IndexPQFastScan.cpp
@@ -155,6 +157,8 @@ files:
155
157
  - vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h
156
158
  - vendor/faiss/faiss/cppcontrib/detail/CoarseBitType.h
157
159
  - vendor/faiss/faiss/cppcontrib/detail/UintReader.h
160
+ - vendor/faiss/faiss/cppcontrib/factory_tools.cpp
161
+ - vendor/faiss/faiss/cppcontrib/factory_tools.h
158
162
  - vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h
159
163
  - vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h
160
164
  - vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h
@@ -173,6 +177,7 @@ files:
173
177
  - vendor/faiss/faiss/gpu/GpuIcmEncoder.h
174
178
  - vendor/faiss/faiss/gpu/GpuIndex.h
175
179
  - vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h
180
+ - vendor/faiss/faiss/gpu/GpuIndexCagra.h
176
181
  - vendor/faiss/faiss/gpu/GpuIndexFlat.h
177
182
  - vendor/faiss/faiss/gpu/GpuIndexIVF.h
178
183
  - vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h
@@ -247,10 +252,11 @@ files:
247
252
  - vendor/faiss/faiss/impl/ThreadedIndex-inl.h
248
253
  - vendor/faiss/faiss/impl/ThreadedIndex.h
249
254
  - vendor/faiss/faiss/impl/code_distance/code_distance-avx2.h
255
+ - vendor/faiss/faiss/impl/code_distance/code_distance-avx512.h
250
256
  - vendor/faiss/faiss/impl/code_distance/code_distance-generic.h
251
257
  - vendor/faiss/faiss/impl/code_distance/code_distance.h
252
- - vendor/faiss/faiss/impl/code_distance/code_distance_avx512.h
253
258
  - vendor/faiss/faiss/impl/index_read.cpp
259
+ - vendor/faiss/faiss/impl/index_read_utils.h
254
260
  - vendor/faiss/faiss/impl/index_write.cpp
255
261
  - vendor/faiss/faiss/impl/io.cpp
256
262
  - vendor/faiss/faiss/impl/io.h
@@ -285,6 +291,8 @@ files:
285
291
  - vendor/faiss/faiss/utils/AlignedTable.h
286
292
  - vendor/faiss/faiss/utils/Heap.cpp
287
293
  - vendor/faiss/faiss/utils/Heap.h
294
+ - vendor/faiss/faiss/utils/NeuralNet.cpp
295
+ - vendor/faiss/faiss/utils/NeuralNet.h
288
296
  - vendor/faiss/faiss/utils/WorkerThread.cpp
289
297
  - vendor/faiss/faiss/utils/WorkerThread.h
290
298
  - vendor/faiss/faiss/utils/approx_topk/approx_topk.h
@@ -292,6 +300,7 @@ files:
292
300
  - vendor/faiss/faiss/utils/approx_topk/generic.h
293
301
  - vendor/faiss/faiss/utils/approx_topk/mode.h
294
302
  - vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h
303
+ - vendor/faiss/faiss/utils/bf16.h
295
304
  - vendor/faiss/faiss/utils/distances.cpp
296
305
  - vendor/faiss/faiss/utils/distances.h
297
306
  - vendor/faiss/faiss/utils/distances_fused/avx512.cpp
@@ -326,11 +335,14 @@ files:
326
335
  - vendor/faiss/faiss/utils/random.h
327
336
  - vendor/faiss/faiss/utils/simdlib.h
328
337
  - vendor/faiss/faiss/utils/simdlib_avx2.h
338
+ - vendor/faiss/faiss/utils/simdlib_avx512.h
329
339
  - vendor/faiss/faiss/utils/simdlib_emulated.h
330
340
  - vendor/faiss/faiss/utils/simdlib_neon.h
341
+ - vendor/faiss/faiss/utils/simdlib_ppc64.h
331
342
  - vendor/faiss/faiss/utils/sorting.cpp
332
343
  - vendor/faiss/faiss/utils/sorting.h
333
344
  - vendor/faiss/faiss/utils/transpose/transpose-avx2-inl.h
345
+ - vendor/faiss/faiss/utils/transpose/transpose-avx512-inl.h
334
346
  - vendor/faiss/faiss/utils/utils.cpp
335
347
  - vendor/faiss/faiss/utils/utils.h
336
348
  homepage: https://github.com/ankane/faiss-ruby
@@ -352,7 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
352
364
  - !ruby/object:Gem::Version
353
365
  version: '0'
354
366
  requirements: []
355
- rubygems_version: 3.5.3
367
+ rubygems_version: 3.5.16
356
368
  signing_key:
357
369
  specification_version: 4
358
370
  summary: Efficient similarity search and clustering for Ruby
@@ -1,102 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- // // // AVX-512 version. It is not used, but let it be for the future
9
- // // // needs.
10
- // // template <class SearchResultType, typename T = PQDecoder>
11
- // // typename std::enable_if<(std::is_same<T, PQDecoder8>::value), void>::
12
- // // type distance_four_codes(
13
- // // const uint8_t* __restrict code0,
14
- // // const uint8_t* __restrict code1,
15
- // // const uint8_t* __restrict code2,
16
- // // const uint8_t* __restrict code3,
17
- // // float& result0,
18
- // // float& result1,
19
- // // float& result2,
20
- // // float& result3
21
- // // ) const {
22
- // // result0 = 0;
23
- // // result1 = 0;
24
- // // result2 = 0;
25
- // // result3 = 0;
26
-
27
- // // size_t m = 0;
28
- // // const size_t pqM16 = pq.M / 16;
29
-
30
- // // constexpr intptr_t N = 4;
31
-
32
- // // const float* tab = sim_table;
33
-
34
- // // if (pqM16 > 0) {
35
- // // // process 16 values per loop
36
- // // const __m512i ksub = _mm512_set1_epi32(pq.ksub);
37
- // // __m512i offsets_0 = _mm512_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7,
38
- // // 8, 9, 10, 11, 12, 13, 14, 15);
39
- // // offsets_0 = _mm512_mullo_epi32(offsets_0, ksub);
40
-
41
- // // // accumulators of partial sums
42
- // // __m512 partialSums[N];
43
- // // for (intptr_t j = 0; j < N; j++) {
44
- // // partialSums[j] = _mm512_setzero_ps();
45
- // // }
46
-
47
- // // // loop
48
- // // for (m = 0; m < pqM16 * 16; m += 16) {
49
- // // // load 16 uint8 values
50
- // // __m128i mm1[N];
51
- // // mm1[0] = _mm_loadu_si128((const __m128i_u*)(code0 + m));
52
- // // mm1[1] = _mm_loadu_si128((const __m128i_u*)(code1 + m));
53
- // // mm1[2] = _mm_loadu_si128((const __m128i_u*)(code2 + m));
54
- // // mm1[3] = _mm_loadu_si128((const __m128i_u*)(code3 + m));
55
-
56
- // // // process first 8 codes
57
- // // for (intptr_t j = 0; j < N; j++) {
58
- // // // convert uint8 values (low part of __m128i) to int32
59
- // // // values
60
- // // const __m512i idx1 = _mm512_cvtepu8_epi32(mm1[j]);
61
-
62
- // // // add offsets
63
- // // const __m512i indices_to_read_from =
64
- // // _mm512_add_epi32(idx1, offsets_0);
65
-
66
- // // // gather 8 values, similar to 8 operations of
67
- // // // tab[idx]
68
- // // __m512 collected =
69
- // // _mm512_i32gather_ps(
70
- // // indices_to_read_from, tab, sizeof(float));
71
-
72
- // // // collect partial sums
73
- // // partialSums[j] = _mm512_add_ps(partialSums[j],
74
- // // collected);
75
- // // }
76
- // // tab += pq.ksub * 16;
77
-
78
- // // }
79
-
80
- // // // horizontal sum for partialSum
81
- // // result0 += _mm512_reduce_add_ps(partialSums[0]);
82
- // // result1 += _mm512_reduce_add_ps(partialSums[1]);
83
- // // result2 += _mm512_reduce_add_ps(partialSums[2]);
84
- // // result3 += _mm512_reduce_add_ps(partialSums[3]);
85
- // // }
86
-
87
- // // //
88
- // // if (m < pq.M) {
89
- // // // process leftovers
90
- // // PQDecoder decoder0(code0 + m, pq.nbits);
91
- // // PQDecoder decoder1(code1 + m, pq.nbits);
92
- // // PQDecoder decoder2(code2 + m, pq.nbits);
93
- // // PQDecoder decoder3(code3 + m, pq.nbits);
94
- // // for (; m < pq.M; m++) {
95
- // // result0 += tab[decoder0.decode()];
96
- // // result1 += tab[decoder1.decode()];
97
- // // result2 += tab[decoder2.decode()];
98
- // // result3 += tab[decoder3.decode()];
99
- // // tab += pq.ksub;
100
- // // }
101
- // // }
102
- // // }