Add NegativeDistanceComputer::distances_batch_4 override (#3149)

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

Enables vectorized distance calculation in [NegativeDistanceComputer](b109d086a2/faiss/IndexHNSW.cpp (L74)), whenever supported by the [NegativeDistanceComputer::basedis](b109d086a2/faiss/IndexHNSW.cpp (L76)).

Otherwise the default sequential calculation of [DistanceComputer::distances_batch_4](b109d086a2/faiss/impl/DistanceComputer.h (L36-L54)) is always chosen.

Reviewed By: algoriddle

Differential Revision: D51596177

fbshipit-source-id: fee510c0a229991ecb7d81a51bc53a20880685be
pull/3144/head
Yuri Vanin 2023-11-29 16:38:08 -08:00 committed by Facebook GitHub Bot
parent 90654d6011
commit 4bf8f939d6
1 changed files with 17 additions and 0 deletions

View File

@ -87,6 +87,23 @@ struct NegativeDistanceComputer : DistanceComputer {
return -(*basedis)(i);
}
void distances_batch_4(
const idx_t idx0,
const idx_t idx1,
const idx_t idx2,
const idx_t idx3,
float& dis0,
float& dis1,
float& dis2,
float& dis3) override {
basedis->distances_batch_4(
idx0, idx1, idx2, idx3, dis0, dis1, dis2, dis3);
dis0 = -dis0;
dis1 = -dis1;
dis2 = -dis2;
dis3 = -dis3;
}
/// compute distance between two stored vectors
float symmetric_dis(idx_t i, idx_t j) override {
return -basedis->symmetric_dis(i, j);