Parallelize compute_residuals in IndexIVFPQ (#4654)

Summary:
Add OpenMP parallelization to compute_residuals function.
  This addresses the TODO comment about parallelization.

  Changes:
  - Add #pragma omp parallel for to residual computation loop
  - Use if(n > 1000) to avoid overhead for small batches
  - Each iteration is independent and thread-safe

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

Reviewed By: mnorris11

Differential Revision: D86234690

Pulled By: limqiying

fbshipit-source-id: 49c5ede2890d52a1d69705a72ada190df299e5d5
This commit is contained in:
Ray Tien
2026-03-11 17:50:19 -07:00
committed by meta-codesync[bot]
parent eddea2a607
commit 79e8acb072
+2 -1
View File
@@ -149,7 +149,8 @@ static std::unique_ptr<float[]> compute_residuals(
const idx_t* list_nos) {
size_t d = quantizer->d;
std::unique_ptr<float[]> residuals(new float[n * d]);
// TODO: parallelize?
// Parallelize with OpenMP (each iteration is independent)
#pragma omp parallel for if (n > 1000)
for (size_t i = 0; i < n; i++) {
if (list_nos[i] < 0)
memset(residuals.get() + i * d, 0, sizeof(float) * d);