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

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的倍数。需要与查表累和算子相适应。

  • 设置为32:

krl_table_lookup_step

  • 设置为64:

krl_L2_table_lookup_fast_scan_bs64

krl_IP_table_lookup_fast_scan_bs64

krl_table_lookup_4b_f16

  • 设置为96:

krl_L2_table_lookup_fast_scan_bs96

krl_IP_table_lookup_fast_scan_bs96

dim_cross

int

距离数据是否为8bit

[0,1],取值表示距离数据是否为8bit:

  • 0:距离数据为8bit。
  • 1: 距离数据为16bit。

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

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