Reduces OMP overhead single query search (#2825)

Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2825

Includes ProductQuantizer::search

Reviewed By: mdouze

Differential Revision: D45028415

fbshipit-source-id: 088b10af18e89088bbd8367ed5e0a266cef5c29d
This commit is contained in:
Alexandr Guzhva 2023-04-18 07:01:30 -07:00 committed by Facebook GitHub Bot
parent c5834c92be
commit 3b13c625c6
2 changed files with 6 additions and 6 deletions

View File

@ -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);
}
@ -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);
}
@ -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;

View File

@ -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);
@ -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);
@ -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);