krl_pack_codes_4b
接口定义
int krl_pack_codes_4b(const uint8_t* codes, size_t ncode, size_t nsq, uint8_t* blocks, size_t batchsize, int dim_cross, size_t codes_size, size_t blocks_size);
接口用途
单独处理数据类型为fp16的查询向量的4比特查表累和过滤压缩算子。计算1个查询向量与多个底库向量间的内积距离,距离的初始值为dis_f16。此接口不会进行过滤压缩(与阈值进行比较)。
参数说明
参数名称 |
数据类型 |
描述 |
取值范围 |
|---|---|---|---|
codes |
const uint8_t* |
底库向量数据。 |
限制长度为codes_size,其中“codes_size”为底库向量数组的长度。 |
ncode |
size_t |
底库向量总数。 |
[1,2^30-1] |
nsq |
size_t |
子空间数量。 |
[1,65535] |
blocks |
uint8_t* |
pack后的底库向量数据。 |
限制长度为blocks_size,其中“blocks_size”为pack后的底库向量数组的长度。需预先分配内存。 |
batchsize |
size_t |
底库向量分块大小。 |
大于0且为16的倍数。需要与查表累和算子相适应。
krl_table_lookup_step
krl_L2_table_lookup_fast_scan_bs64 krl_IP_table_lookup_fast_scan_bs64 krl_table_lookup_4b_f16
krl_L2_table_lookup_fast_scan_bs96 krl_IP_table_lookup_fast_scan_bs96 |
dim_cross |
int |
距离数据是否为8bit |
[0,1],取值表示距离数据是否为8bit:
|
codes_size |
size_t |
底库向量数组的长度。 |
ncode*nsq/2,其中“ncode”为底库向量总数,“nsq”为子空间数量。 |
blocks_size |
size_t |
pack后的底库向量数组的长度。 |
ceil(ncode/batchsize)*batchsize*ceil(nsq/2),其中“ncode”为底库向量总数,“batchsize”为底库向量分块大小,“nsq”为子空间数量。 |
返回值
数据类型 |
说明 |
|---|---|
int |
正常运行时返回0,异常退出返回对应错误码。
|