Find

接口功能

在查找表中查找输入张量的元素,并返回对应的值。

函数原型

1
int Find(const TableInfo &info, const int64_t *keys, float *values, const float *defaultValue, int64_t length);
  • keys,length为int64_t类型。
  • values,default_value为float类型。
  • 指针有效长度由用户决定。
  • 保证输入指针(包括结构体内部指针)的有效空间相互不重叠。

参数说明

表1 参数说明

参数

输入/输出

说明

约束

info

输入

用于存储查找必要字段的结构体,包括:

  • numBuckets:哈希桶个数
  • valueSize:embedding长度
  • emptyKey:空键所代表的值
  • deletedKey:已删除键所代表的值
  • keyBucket:已存储于哈希表的键
  • valueBucket:已存储于哈希表的值
  • keyBucket,valueBucket不为空指针。
  • numBuckets的值为2的指数次幂,且大于0。
  • valueSize大于等于0。
  • TableInfo.emptyKey与TalbeInfo.deletedKey的值须不同。
  • keyBucket限制:
    • 初始时keyBucket上的每个key均为emptyKey,需用户保障,防止接口无法正常运行。
    • 任何时候keyBucket至少有一个key是emptyKey(始终有空桶可用),需用户保障,防止接口无法正常运行。
    • 如果一个key存在于keyBucket中,通过key%numBuckets获取其在keyBucket中的索引,并使用二次探测法,在遇到emptyKey之前一定能够找到该key本身,需用户保障,防止接口无法正常运行。
    • keyBucket中存放的数据符合TensorFlow1.15中MutableDenseHashTable的排布规律。
    • keyBucket指向的空间至少有numBuckets*sizeof(int64_t) bytes,需用户保障,防止接口无法正常运行。
  • valueBucket限制

    valueBucket指向的空间至少有numBuckets*valueSize*sizeof(float) bytes,需用户保障,防止接口无法正常运行。

keys

输入

用于查找的键。

指针不为空,数组不含有emptyKey、deletedKey。

values

输入

用于查找的值,存储找到的值,作为输出。

指针不为空。

defaultValue

输入

若未查找到,插入的值

指针不为空。

length

输入

要查询的key数量。

取值范围(0,2^63-1],length与keys长度相同,需用户保障,防止缓冲区溢出等安全问题。