Struct faiss::simd_result_handlers::HeapHandler

template<class C, bool with_id_map = false>
struct HeapHandler : public faiss::simd_result_handlers::ResultHandlerCompare<C, false>

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
std::vector<TI> iids
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