Namespace faiss::simd_result_handlers
-
namespace simd_result_handlers
Functions
-
template<class C, bool W, class Consumer, class ...Types>
void dispatch_SIMDResultHandler_fixedCW(SIMDResultHandler &res, Consumer &consumer, Types... args)
-
template<class C, class Consumer, class ...Types>
void dispatch_SIMDResultHandler_fixedC(SIMDResultHandler &res, Consumer &consumer, Types... args)
-
template<class Consumer, class ...Types>
void dispatch_SIMDResultHandler(SIMDResultHandler &res, Consumer &consumer, Types... args)
-
struct DummyResultHandler : public faiss::SIMDResultHandler
- #include <simd_result_handlers.h>
Dummy structure that just computes a chqecksum on results (to avoid the computation to be optimized away)
Public Functions
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void set_block_origin(size_t, size_t) final
set the sub-matrix that is being computed
-
inline ~DummyResultHandler()
Public Members
-
size_t cs = 0
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
-
struct StoreResultHandler : public faiss::SIMDResultHandler
- #include <simd_result_handlers.h>
memorize results in a nq-by-nb matrix.
j0 is the current upper-left block of the matrix
Public Functions
-
inline StoreResultHandler(uint16_t *data, size_t ld)
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
Public Members
-
uint16_t *data
-
size_t ld
-
size_t i0 = 0
-
size_t j0 = 0
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
inline StoreResultHandler(uint16_t *data, size_t ld)
-
template<int NQ, int BB>
struct FixedStorageHandler : public faiss::SIMDResultHandler - #include <simd_result_handlers.h>
stores results in fixed-size matrix.
Public Functions
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
-
template<class OtherResultHandler>
inline void to_other_handler(OtherResultHandler &other) const
-
inline virtual ~FixedStorageHandler()
Public Members
-
simd16uint16 dis[NQ][BB]
-
int i0 = 0
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
-
template<class C, bool with_id_map>
struct ResultHandlerCompare : public faiss::SIMDResultHandlerToFloat - #include <simd_result_handlers.h>
Result handler that compares distances to check if they need to be kept
Subclassed by faiss::simd_result_handlers::RangeHandler< C, false >
Public Types
-
using TI = typename C::TI
Public Functions
-
inline ResultHandlerCompare(size_t nq, size_t ntotal, const IDSelector *sel_in)
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
-
inline void adjust_with_origin(size_t &q, simd16uint16 &d0, simd16uint16 &d1)
-
inline int64_t adjust_id(size_t b, size_t j)
-
inline uint32_t get_lt_mask(uint16_t thr, size_t b, simd16uint16 d0, simd16uint16 d1)
return binary mask of elements below thr in (d0, d1) inverse_test returns elements above
-
inline virtual ~ResultHandlerCompare()
-
inline virtual void begin(const float *norms)
-
inline virtual void end()
-
virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) = 0
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
Public Members
-
bool disable = false
-
int64_t i0 = 0
-
int64_t j0 = 0
-
const IDSelector *sel
-
size_t nq
-
size_t ntotal
-
const idx_t *id_map = nullptr
these fields are used mainly for the IVF variants (with_id_map=true)
-
const int *q_map = nullptr
-
const uint16_t *dbias = nullptr
-
const float *normalizers = nullptr
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
using TI = typename C::TI
-
template<class C, bool with_id_map = false>
struct SingleResultHandler : public faiss::simd_result_handlers::ResultHandlerCompare<C, false> - #include <simd_result_handlers.h>
Special version for k=1
Public Types
-
using T = typename C::T
-
using TI = typename C::TI
-
using RHC = ResultHandlerCompare<C, with_id_map>
Public Functions
-
inline SingleResultHandler(size_t nq, size_t ntotal, float *dis, int64_t *ids, const IDSelector *sel_in)
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void end()
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
-
inline void adjust_with_origin(size_t &q, simd16uint16 &d0, simd16uint16 &d1)
-
inline int64_t adjust_id(size_t b, size_t j)
-
inline uint32_t get_lt_mask(uint16_t thr, size_t b, simd16uint16 d0, simd16uint16 d1)
return binary mask of elements below thr in (d0, d1) inverse_test returns elements above
-
inline virtual void begin(const float *norms)
Public Members
-
std::vector<int16_t> idis
-
float *dis
-
int64_t *ids
-
bool disable
-
int64_t i0
-
int64_t j0
-
const IDSelector *sel
-
size_t nq
-
size_t ntotal
-
const idx_t *id_map = nullptr
these fields are used mainly for the IVF variants (with_id_map=true)
-
const int *q_map = nullptr
-
const uint16_t *dbias = nullptr
-
const float *normalizers = nullptr
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
using T = typename C::T
-
template<class C, bool with_id_map = false>
struct HeapHandler : public faiss::simd_result_handlers::ResultHandlerCompare<C, false> - #include <simd_result_handlers.h>
Structure that collects results in a min- or max-heap
Public Types
-
using T = typename C::T
-
using TI = typename C::TI
-
using RHC = ResultHandlerCompare<C, with_id_map>
Public Functions
-
inline HeapHandler(size_t nq, size_t ntotal, int64_t k, float *dis, int64_t *ids, const IDSelector *sel_in)
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void end() override
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
-
inline void adjust_with_origin(size_t &q, simd16uint16 &d0, simd16uint16 &d1)
-
inline int64_t adjust_id(size_t b, size_t j)
-
inline uint32_t get_lt_mask(uint16_t thr, size_t b, simd16uint16 d0, simd16uint16 d1)
return binary mask of elements below thr in (d0, d1) inverse_test returns elements above
-
inline virtual void begin(const float *norms)
Public Members
-
std::vector<uint16_t> idis
-
float *dis
-
int64_t *ids
-
int64_t k
-
bool disable
-
int64_t i0
-
int64_t j0
-
const IDSelector *sel
-
size_t nq
-
size_t ntotal
-
const idx_t *id_map = nullptr
these fields are used mainly for the IVF variants (with_id_map=true)
-
const int *q_map = nullptr
-
const uint16_t *dbias = nullptr
-
const float *normalizers = nullptr
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
using T = typename C::T
-
template<class C, bool with_id_map = false>
struct ReservoirHandler : public faiss::simd_result_handlers::ResultHandlerCompare<C, false> - #include <simd_result_handlers.h>
Simple top-N implementation using a reservoir.
Results are stored when they are below the threshold until the capacity is reached. Then a partition sort is used to update the threshold. Handler built from several ReservoirTopN (one per query)
Public Types
-
using T = typename C::T
-
using TI = typename C::TI
-
using RHC = ResultHandlerCompare<C, with_id_map>
Public Functions
-
inline ReservoirHandler(size_t nq, size_t ntotal, size_t k, size_t cap, float *dis, int64_t *ids, const IDSelector *sel_in)
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void end() override
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
-
inline void adjust_with_origin(size_t &q, simd16uint16 &d0, simd16uint16 &d1)
-
inline int64_t adjust_id(size_t b, size_t j)
-
inline uint32_t get_lt_mask(uint16_t thr, size_t b, simd16uint16 d0, simd16uint16 d1)
return binary mask of elements below thr in (d0, d1) inverse_test returns elements above
-
inline virtual void begin(const float *norms)
Public Members
-
size_t capacity
-
float *dis
-
int64_t *ids
-
AlignedTable<T> all_vals
-
std::vector<ReservoirTopN<C>> reservoirs
-
bool disable
-
int64_t i0
-
int64_t j0
-
const IDSelector *sel
-
size_t nq
-
size_t ntotal
-
const idx_t *id_map = nullptr
these fields are used mainly for the IVF variants (with_id_map=true)
-
const int *q_map = nullptr
-
const uint16_t *dbias = nullptr
-
const float *normalizers = nullptr
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
using T = typename C::T
-
template<class C, bool with_id_map = false>
struct RangeHandler : public faiss::simd_result_handlers::ResultHandlerCompare<C, false> - #include <simd_result_handlers.h>
Result handler for range search. The difficulty is that the range distances have to be scaled using the scaler.
Public Types
-
using T = typename C::T
-
using TI = typename C::TI
-
using RHC = ResultHandlerCompare<C, with_id_map>
Public Functions
-
inline RangeHandler(RangeSearchResult &rres, float radius, size_t ntotal, const IDSelector *sel_in)
-
inline virtual void begin(const float *norms) override
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void end() override
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
-
inline void adjust_with_origin(size_t &q, simd16uint16 &d0, simd16uint16 &d1)
-
inline int64_t adjust_id(size_t b, size_t j)
-
inline uint32_t get_lt_mask(uint16_t thr, size_t b, simd16uint16 d0, simd16uint16 d1)
return binary mask of elements below thr in (d0, d1) inverse_test returns elements above
Public Members
-
RangeSearchResult &rres
-
float radius
-
std::vector<uint16_t> thresholds
-
std::vector<size_t> n_per_query
-
size_t q0 = 0
-
bool disable
-
int64_t i0
-
int64_t j0
-
const IDSelector *sel
-
size_t nq
-
size_t ntotal
-
const idx_t *id_map = nullptr
these fields are used mainly for the IVF variants (with_id_map=true)
-
const int *q_map = nullptr
-
const uint16_t *dbias = nullptr
-
const float *normalizers = nullptr
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
struct Triplet
-
using T = typename C::T
-
template<class C, bool with_id_map = false>
struct PartialRangeHandler : public faiss::simd_result_handlers::RangeHandler<C, false> Public Types
-
using T = typename C::T
-
using TI = typename C::TI
-
using RHC = RangeHandler<C, with_id_map>
Public Functions
-
inline PartialRangeHandler(RangeSearchPartialResult &pres, float radius, size_t ntotal, size_t q0, size_t q1, const IDSelector *sel_in)
-
inline void shift_n_per_query()
-
inline virtual void end() override
-
inline virtual void begin(const float *norms) override
-
inline virtual void handle(size_t q, size_t b, simd16uint16 d0, simd16uint16 d1) final
called when 32 distances are computed and provided in two simd16uint16. (q, b) indicate which entry it is in the block.
-
inline virtual void set_block_origin(size_t i0_in, size_t j0_in) final
set the sub-matrix that is being computed
-
inline void adjust_with_origin(size_t &q, simd16uint16 &d0, simd16uint16 &d1)
-
inline int64_t adjust_id(size_t b, size_t j)
-
inline uint32_t get_lt_mask(uint16_t thr, size_t b, simd16uint16 d0, simd16uint16 d1)
return binary mask of elements below thr in (d0, d1) inverse_test returns elements above
Public Members
-
RangeSearchPartialResult &pres
-
size_t q0
-
std::vector<Triplet> triplets
-
std::vector<size_t> n_per_query
-
RangeSearchResult &rres
-
float radius
-
std::vector<uint16_t> thresholds
-
bool disable = false
-
int64_t i0 = 0
-
int64_t j0 = 0
-
const IDSelector *sel
-
size_t nq
-
size_t ntotal
-
const idx_t *id_map = nullptr
these fields are used mainly for the IVF variants (with_id_map=true)
-
const int *q_map = nullptr
-
const uint16_t *dbias = nullptr
-
const float *normalizers = nullptr
-
bool is_CMax = false
-
uint8_t sizeof_ids = 0
-
bool with_fields = false
-
using T = typename C::T
-
template<class C, bool W, class Consumer, class ...Types>