@@ -117,7 +117,8 @@ class FlatIndexNode : public IndexNode {
117
117
faiss::SearchParameters search_params;
118
118
search_params.sel = id_selector;
119
119
120
- index_->search (1 , (const uint8_t *)x + index * dim / 8 , k, cur_i_dis, cur_ids, &search_params);
120
+ index_->search (1 , (const uint8_t *)x + index * ((dim + 7 ) / 8 ), k, cur_i_dis, cur_ids,
121
+ &search_params);
121
122
122
123
if (index_->metric_type == faiss::METRIC_Hamming) {
123
124
for (int64_t j = 0 ; j < k; j++) {
@@ -189,7 +190,8 @@ class FlatIndexNode : public IndexNode {
189
190
faiss::SearchParameters search_params;
190
191
search_params.sel = id_selector;
191
192
192
- index_->range_search (1 , (const uint8_t *)xq + index * dim / 8 , radius, &res, &search_params);
193
+ index_->range_search (1 , (const uint8_t *)xq + index * ((dim + 7 ) / 8 ), radius, &res,
194
+ &search_params);
193
195
}
194
196
auto elem_cnt = res.lims [1 ];
195
197
result_dist_array[index ].resize (elem_cnt);
@@ -238,9 +240,9 @@ class FlatIndexNode : public IndexNode {
238
240
if constexpr (std::is_same<IndexType, faiss::IndexBinaryFlat>::value) {
239
241
uint8_t * data = nullptr ;
240
242
try {
241
- data = new uint8_t [rows * dim / 8 ];
243
+ data = new uint8_t [rows * (( dim + 7 ) / 8 ) ];
242
244
for (int64_t i = 0 ; i < rows; i++) {
243
- index_->reconstruct (ids[i], data + i * dim / 8 );
245
+ index_->reconstruct (ids[i], data + i * (( dim + 7 ) / 8 ) );
244
246
}
245
247
return GenResultDataSet (rows, dim, data);
246
248
} catch (const std::exception & e) {
0 commit comments