结构体 faiss::BlockInvertedLists
-
struct BlockInvertedLists : public faiss::InvertedLists
按块组织的倒排列表。
与常规倒排列表不同,代码按大小为 block_size 字节的块组织,这些块表示一组 n_per_block。因此,代码分配总是向上舍入到 block_size 字节。这些代码也对齐在 32 字节边界上,以便与 SIMD 一起使用。
为避免误解,code_size 设置为 (size_t)(-1),即使可以说代码消耗的内存量为 block_size / n_per_block。
写入函数 add_entries 和 update_entries 对块对齐的数据进行操作。
公共类型
-
enum subset_type_t
值
-
enumerator SUBSET_TYPE_ID_RANGE
-
enumerator SUBSET_TYPE_ID_MOD
-
enumerator SUBSET_TYPE_ELEMENT_RANGE
-
enumerator SUBSET_TYPE_INVLIST_FRACTION
-
enumerator SUBSET_TYPE_INVLIST
-
enumerator SUBSET_TYPE_ID_RANGE
公共函数
-
BlockInvertedLists(size_t nlist, size_t vec_per_block, size_t block_size)
-
BlockInvertedLists(size_t nlist, const CodePacker *packer)
-
BlockInvertedLists()
-
virtual size_t list_size(size_t list_no) const override
获取列表的大小
-
virtual const uint8_t *get_codes(size_t list_no) const override
获取倒排列表的代码,必须由 release_codes 释放
- 返回值:
代码大小:list_size * code_size
-
virtual const idx_t *get_ids(size_t list_no) const override
获取倒排列表的 id,必须由 release_ids 释放
- 返回值:
id 大小:list_size
-
size_t remove_ids(const IDSelector &sel)
从 InvertedLists 中移除 id
-
virtual size_t add_entries(size_t list_no, size_t n_entry, const idx_t *ids, const uint8_t *code) override
-
virtual void update_entries(size_t list_no, size_t offset, size_t n_entry, const idx_t *ids, const uint8_t *code) override
未实现
-
virtual void resize(size_t list_no, size_t new_size) override
-
~BlockInvertedLists() override
-
virtual void release_codes(size_t list_no, const uint8_t *codes) const
由 get_codes 返回的释放代码(默认实现为 nop
-
virtual void release_ids(size_t list_no, const idx_t *ids) const
释放 get_ids 返回的 IDs
-
virtual idx_t get_single_id(size_t list_no, size_t offset) const
- 返回值:
倒排列表中的单个 ID
-
virtual const uint8_t *get_single_code(size_t list_no, size_t offset) const
- 返回值:
倒排列表中的单个代码(应该用 release_codes 释放)
-
virtual void prefetch_lists(const idx_t *list_nos, int nlist) const
准备以下列表(默认不执行任何操作),列表可以是 -1,因此为有符号长整型
-
virtual bool is_empty(size_t list_no, void *inverted_list_context = nullptr) const
检查列表是否为空
-
virtual InvertedListsIterator *get_iterator(size_t list_no, void *inverted_list_context = nullptr) const
获取 use_iterator 列表的可迭代对象
-
virtual size_t add_entry(size_t list_no, idx_t theid, const uint8_t *code, void *inverted_list_context = nullptr)
向倒排列表添加一个条目
-
virtual void update_entry(size_t list_no, size_t offset, idx_t id, const uint8_t *code)
-
virtual void reset()
-
void merge_from(InvertedLists *oivf, size_t add_id)
从 oivf 移动所有条目(输出时为空)
-
size_t copy_subset_to(InvertedLists &other, subset_type_t subset_type, idx_t a1, idx_t a2) const
将条目索引的子集复制到另一个索引
- 返回值:
复制的条目数
-
double imbalance_factor() const
1= 完全平衡,>1:不平衡
-
void print_stats() const
显示有关倒排列表的一些统计信息
-
size_t compute_ntotal() const
总计列表大小
公共成员
-
size_t n_per_block = 0
-
size_t block_size = 0
-
const CodePacker *packer = nullptr
-
std::vector<AlignedTable<uint8_t>> codes
-
size_t nlist
可能的键值的数量
-
size_t code_size
每个向量的字节代码大小
-
bool use_iterator = false
请求使用迭代器而不是 get_codes / get_ids
公共静态属性
-
static const size_t INVALID_CODE_SIZE = static_cast<size_t>(-1)
用于BlockInvertedLists,其中代码被打包成组,并且单个代码大小没有意义
-
enum subset_type_t