Skip to content

Commit

Permalink
Reduces OMP overhead single query search (#2825)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #2825

Includes ProductQuantizer::search

Reviewed By: mdouze

Differential Revision: D45028415

fbshipit-source-id: 088b10af18e89088bbd8367ed5e0a266cef5c29d
  • Loading branch information
Alexandr Guzhva authored and facebook-github-bot committed Apr 18, 2023
1 parent c5834c9 commit 3b13c62
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
6 changes: 3 additions & 3 deletions faiss/impl/ProductQuantizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ void ProductQuantizer::compute_distance_tables(
#endif
if (dsub < 16) {

#pragma omp parallel for
#pragma omp parallel for if (nx > 1)
for (int64_t i = 0; i < nx; i++) {
compute_distance_table(x + i * d, dis_tables + i * ksub * M);
}
Expand Down Expand Up @@ -507,7 +507,7 @@ void ProductQuantizer::compute_inner_prod_tables(
#endif
if (dsub < 16) {

#pragma omp parallel for
#pragma omp parallel for if (nx > 1)
for (int64_t i = 0; i < nx; i++) {
compute_inner_prod_table(x + i * d, dis_tables + i * ksub * M);
}
Expand Down Expand Up @@ -681,7 +681,7 @@ void pq_knn_search_with_tables(
size_t k = res->k, nx = res->nh;
size_t ksub = pq.ksub, M = pq.M;

#pragma omp parallel for
#pragma omp parallel for if (nx > 1)
for (int64_t i = 0; i < nx; i++) {
/* query preparation for asymmetric search: compute look-up tables */
const float* dis_table = dis_tables + i * ksub * M;
Expand Down
6 changes: 3 additions & 3 deletions faiss/utils/distances.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -824,7 +824,7 @@ void pairwise_indexed_L2sqr(
const float* y,
const int64_t* iy,
float* dis) {
#pragma omp parallel for
#pragma omp parallel for if (n > 1)
for (int64_t j = 0; j < n; j++) {
if (ix[j] >= 0 && iy[j] >= 0) {
dis[j] = fvec_L2sqr(x + d * ix[j], y + d * iy[j], d);
Expand All @@ -840,7 +840,7 @@ void pairwise_indexed_inner_product(
const float* y,
const int64_t* iy,
float* dis) {
#pragma omp parallel for
#pragma omp parallel for if (n > 1)
for (int64_t j = 0; j < n; j++) {
if (ix[j] >= 0 && iy[j] >= 0) {
dis[j] = fvec_inner_product(x + d * ix[j], y + d * iy[j], d);
Expand Down Expand Up @@ -941,7 +941,7 @@ void pairwise_L2sqr(
// store in beginning of distance matrix to avoid malloc
float* b_norms = dis;

#pragma omp parallel for
#pragma omp parallel for if (nb > 1)
for (int64_t i = 0; i < nb; i++)
b_norms[i] = fvec_norm_L2sqr(xb + i * ldb, d);

Expand Down

0 comments on commit 3b13c62

Please sign in to comment.