krl_fast_table_lookup_step
接口定义
int krl_fast_table_lookup_step(int nq, int nsq, const uint8_t* codes, const uint8_t* LUT, uint16_t* dis, const uint16_t* threshold, uint32_t* lt_mask, int keep_min, size_t codes_size, size_t LUT_size, size_t dis_size, size_t threshold_size, size_t lt_mask_size);
接口用途
批量处理数据类型为float的查询向量的4bit查表累和过滤压缩算子。算子支持计算至多16个查询向量与32个底库向量间的距离。在距离计算完成后,将其与阈值进行比较,满足比较条件的底库向量的lt_mask对应位置将会设置为1,反之为0。
参数说明
参数名称 |
数据类型 |
描述 |
取值范围 |
|---|---|---|---|
nq |
int |
查询向量总数。 |
[1,16] |
nsq |
int |
子空间数量。 |
[1,256]且为偶数。 |
codes |
const uint8_t* |
码本,使用krl_pack_codes_4b(blocksize=32)处理后底库向量对应的索引。 |
限制长度为codes_size,其中“codes_size”为码本数组的长度。 |
LUT |
const uint8_t* |
各子空间中PQ质心与查询向量的uint8距离表。 |
限制长度为LUT_size,其中“LUT_size”为距离表数组的长度。 |
dis |
uint16_t* |
存储计算所得的距离结果。 |
限制长度为dis_size,其中“dis_size”为存储距离结果数组的长度。需预先分配内存。 |
threshold |
const uint16_t* |
距离阈值。 |
限制长度为threshold_size,其中“threshold_size”为距离阈值数组的长度。阈值限制为65535。 |
lt_mask |
uint32_t* |
过滤压缩结果。 |
限制长度为lt_mask_size,其中“lt_mask_size”为过滤压缩结果数组的长度。需预先分配内存。 |
keep_min |
int |
是否保留小于阈值的距离结果。 |
[0,1],取值表示是否保留小于阈值的距离结果:
|
codes_size |
size_t |
码本数组的长度。 |
nsq/2*32,其中“nsq”为子空间数量。 |
LUT_size |
size_t |
距离表数组的长度。 |
nq*nsq*16,其中“nq”为查询向量总数,“nsq”为子空间数量。 |
dis_size |
size_t |
存储距离结果数组的长度。 |
nq*32,其中“nq”为查询向量总数。 |
threshold_size |
size_t |
距离阈值数组的长度。 |
nq,其中“nq”为查询向量总数。 |
lt_mask_size |
size_t |
过滤压缩结果数组的长度。 |
nq/32,其中“nq”为查询向量总数。 |
返回值
数据类型 |
说明 |
|---|---|
int |
正常运行时返回0,异常退出返回对应错误码。
|