昇腾社区首页
中文
注册

ComputeDistance

API定义

APP_ERROR ComputeDistance(int n, const float16_t *queries, float *distances, unsigned int tableLen = 0, const float *table = nullptr)

功能描述

查询“n”条特征向量与底库所有特征向量的距离,如传递有效的映射表(tableLen > 0且 *table为非空指针),则输出经过映射后的距离。

输入

int n:待查询特征向量的数目。

const float16_t *queries:待查询特征向量, 长度为n * 向量维度dim。

unsigned int tableLen:映射表长度,默认值为0,表示不做映射。目前支持配置映射表长为“10000”

const float *table:映射表指针,指向“tableLen”长度的有效映射值存储空间,目前支持的冗余长度为“48”,即“*table”指向的空间长度为 10048 * sizeof(float) Byte。

输出

float *distances:外部内存,存储查询向量与底库向量的距离。

返回值

APP_ERROR:调用返回状态,具体请参见接口调用返回值参考

约束说明

  • n:合理的n值应该在[0, capacity]之间。
  • *distances:需要提供的空间长度为 n * ntotalPad(“ntotalPad”为(ntotal + 15) / 16 * 16, 即“ntotal”对16补齐的结果,每个query的有效比对距离存储在前“ntotal”的空间,补齐部分数据没有实际意义)。

    推荐使用aclrtmalloc接口,可以申请到全量的物理内存来使用,优化处理时延。

  • 传递 “TableLen”“*table” 参数同时满足要求时,接口会对计算出来的 distance 进行映射:

    首先将 distance 值归一化为 [0, 1] 之间的浮点数 f1,然后用 f1 乘上“tableLen”并取整,这样得到 [0, tableLen] 之间的整数索引,再利用该整数索引作为偏移,去“*table”指向的内存空间取出对应的 score,即完成映射,将 score 存入 “*distance”

    索引映射公式可抽象为 ((CosDistance + 1) / 2) * tableLen。