mirror of
https://github.com/facebookresearch/faiss.git
synced 2026-10-12 02:13:36 +00:00
Replace distance_to_code() in IVFPQScanner and PQDistanceComputer (#2717)
Summary: Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2717 Use avx2-optimized distance_to_code(), if appropriate Reviewed By: mlomeli1 Differential Revision: D43369478 fbshipit-source-id: 0a68c07057710644342e0993a47f26e77a397636
This commit is contained in:
committed by
Facebook GitHub Bot
parent
55b2d54ee1
commit
67d2a779ea
@@ -1261,14 +1261,9 @@ struct IVFPQScanner : IVFPQScannerT<idx_t, METRIC_TYPE, PQDecoder>,
|
||||
|
||||
float distance_to_code(const uint8_t* code) const override {
|
||||
assert(precompute_mode == 2);
|
||||
float dis = this->dis0;
|
||||
const float* tab = this->sim_table;
|
||||
PQDecoder decoder(code, this->pq.nbits);
|
||||
|
||||
for (size_t m = 0; m < this->pq.M; m++) {
|
||||
dis += tab[decoder.decode()];
|
||||
tab += this->pq.ksub;
|
||||
}
|
||||
float dis = this->dis0 +
|
||||
distance_single_code<PQDecoder>(
|
||||
this->pq, this->sim_table, code);
|
||||
return dis;
|
||||
}
|
||||
|
||||
|
||||
+6
-8
@@ -19,6 +19,8 @@
|
||||
#include <faiss/impl/FaissAssert.h>
|
||||
#include <faiss/utils/hamming.h>
|
||||
|
||||
#include <faiss/impl/code_distance/code_distance.h>
|
||||
|
||||
namespace faiss {
|
||||
|
||||
/*********************************************************
|
||||
@@ -81,15 +83,11 @@ struct PQDistanceComputer : FlatCodesDistanceComputer {
|
||||
size_t ndis;
|
||||
|
||||
float distance_to_code(const uint8_t* code) final {
|
||||
const float* dt = precomputed_table.data();
|
||||
PQDecoder decoder(code, pq.nbits);
|
||||
float accu = 0;
|
||||
for (int j = 0; j < pq.M; j++) {
|
||||
accu += dt[decoder.decode()];
|
||||
dt += 1 << decoder.nbits;
|
||||
}
|
||||
ndis++;
|
||||
return accu;
|
||||
|
||||
float dis = distance_single_code<PQDecoder>(
|
||||
pq, precomputed_table.data(), code);
|
||||
return dis;
|
||||
}
|
||||
|
||||
float symmetric_dis(idx_t i, idx_t j) override {
|
||||
|
||||
Reference in New Issue
Block a user