Struct faiss::simd_result_handlers::ResultHandlerCompare

template<class C, bool with_id_map>
struct ResultHandlerCompare : public faiss::SIMDResultHandlerToFloat

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