@@ -261,25 +261,33 @@ class LshIndex : public NNIndex<Distance>
261
261
262
262
int count = 0 ;
263
263
if (params.use_heap ==FLANN_True) {
264
- KNNUniqueResultSet<DistanceType> resultSet (knn);
265
- for (size_t i = 0 ; i < queries.rows ; i++) {
266
- resultSet.clear ();
267
- findNeighbors (resultSet, queries[i], params);
268
- size_t n = std::min (resultSet.size (), knn);
269
- resultSet.copy (indices[i], dists[i], n, params.sorted );
270
- indices_to_ids (indices[i], indices[i], n);
271
- count += n;
264
+ #pragma omp parallel num_threads(params.cores)
265
+ {
266
+ KNNUniqueResultSet<DistanceType> resultSet (knn);
267
+ #pragma omp for schedule(static) reduction(+:count)
268
+ for (size_t i = 0 ; i < queries.rows ; i++) {
269
+ resultSet.clear ();
270
+ findNeighbors (resultSet, queries[i], params);
271
+ size_t n = std::min (resultSet.size (), knn);
272
+ resultSet.copy (indices[i], dists[i], n, params.sorted );
273
+ indices_to_ids (indices[i], indices[i], n);
274
+ count += n;
275
+ }
272
276
}
273
277
}
274
278
else {
275
- KNNResultSet<DistanceType> resultSet (knn);
276
- for (size_t i = 0 ; i < queries.rows ; i++) {
277
- resultSet.clear ();
278
- findNeighbors (resultSet, queries[i], params);
279
- size_t n = std::min (resultSet.size (), knn);
280
- resultSet.copy (indices[i], dists[i], n, params.sorted );
281
- indices_to_ids (indices[i], indices[i], n);
282
- count += n;
279
+ #pragma omp parallel num_threads(params.cores)
280
+ {
281
+ KNNResultSet<DistanceType> resultSet (knn);
282
+ #pragma omp for schedule(static) reduction(+:count)
283
+ for (size_t i = 0 ; i < queries.rows ; i++) {
284
+ resultSet.clear ();
285
+ findNeighbors (resultSet, queries[i], params);
286
+ size_t n = std::min (resultSet.size (), knn);
287
+ resultSet.copy (indices[i], dists[i], n, params.sorted );
288
+ indices_to_ids (indices[i], indices[i], n);
289
+ count += n;
290
+ }
283
291
}
284
292
}
285
293
@@ -306,33 +314,41 @@ class LshIndex : public NNIndex<Distance>
306
314
307
315
int count = 0 ;
308
316
if (params.use_heap ==FLANN_True) {
309
- KNNUniqueResultSet<DistanceType> resultSet (knn);
310
- for (size_t i = 0 ; i < queries.rows ; i++) {
311
- resultSet.clear ();
312
- findNeighbors (resultSet, queries[i], params);
313
- size_t n = std::min (resultSet.size (), knn);
314
- indices[i].resize (n);
315
- dists[i].resize (n);
316
- if (n > 0 ) {
317
- resultSet.copy (&indices[i][0 ], &dists[i][0 ], n, params.sorted );
317
+ #pragma omp parallel num_threads(params.cores)
318
+ {
319
+ KNNUniqueResultSet<DistanceType> resultSet (knn);
320
+ #pragma omp for schedule(static) reduction(+:count)
321
+ for (size_t i = 0 ; i < queries.rows ; i++) {
322
+ resultSet.clear ();
323
+ findNeighbors (resultSet, queries[i], params);
324
+ size_t n = std::min (resultSet.size (), knn);
325
+ indices[i].resize (n);
326
+ dists[i].resize (n);
327
+ if (n > 0 ) {
328
+ resultSet.copy (&indices[i][0 ], &dists[i][0 ], n, params.sorted );
329
+ indices_to_ids (&indices[i][0 ], &indices[i][0 ], n);
330
+ }
331
+ count += n;
318
332
}
319
- indices_to_ids (&indices[i][0 ], &indices[i][0 ], n);
320
- count += n;
321
333
}
322
334
}
323
335
else {
324
- KNNResultSet<DistanceType> resultSet (knn);
325
- for (size_t i = 0 ; i < queries.rows ; i++) {
326
- resultSet.clear ();
327
- findNeighbors (resultSet, queries[i], params);
328
- size_t n = std::min (resultSet.size (), knn);
329
- indices[i].resize (n);
330
- dists[i].resize (n);
331
- if (n > 0 ) {
332
- resultSet.copy (&indices[i][0 ], &dists[i][0 ], n, params.sorted );
336
+ #pragma omp parallel num_threads(params.cores)
337
+ {
338
+ KNNResultSet<DistanceType> resultSet (knn);
339
+ #pragma omp for schedule(static) reduction(+:count)
340
+ for (size_t i = 0 ; i < queries.rows ; i++) {
341
+ resultSet.clear ();
342
+ findNeighbors (resultSet, queries[i], params);
343
+ size_t n = std::min (resultSet.size (), knn);
344
+ indices[i].resize (n);
345
+ dists[i].resize (n);
346
+ if (n > 0 ) {
347
+ resultSet.copy (&indices[i][0 ], &dists[i][0 ], n, params.sorted );
348
+ indices_to_ids (&indices[i][0 ], &indices[i][0 ], n);
349
+ }
350
+ count += n;
333
351
}
334
- indices_to_ids (&indices[i][0 ], &indices[i][0 ], n);
335
- count += n;
336
352
}
337
353
}
338
354
0 commit comments