鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

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],取值表示是否保留小于阈值的距离结果:

  • 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,异常退出返回对应错误码。

  • -1:非法指针。
  • -2:内存分配失败。
  • -3:非法入参。
  • -4:双重释放。
  • -5:不安全内存操作。
  • -6:IO失败。