暴力搜索#
暴力搜索方法运行 KNN 算法。它执行全面的搜索,与 ANN 方法不同,它可以产生精确结果。
#include <raft/neighbors/bruteforce.h>
索引#
-
typedef cuvsBruteForceIndex *cuvsBruteForceIndex_t#
-
cuvsError_t cuvsBruteForceIndexCreate(cuvsBruteForceIndex_t *index)#
分配 BRUTEFORCE 索引。
- 参数:
index – [in] cuvsBruteForceIndex_t 要分配的
- 返回:
-
cuvsError_t cuvsBruteForceIndexDestroy(cuvsBruteForceIndex_t index)#
释放 BRUTEFORCE 索引。
- 参数:
index – [in] cuvsBruteForceIndex_t 要释放的
-
struct cuvsBruteForceIndex#
- #include <brute_force.h>
用于保存 cuvs::neighbors::brute_force::index 地址及其活动训练数据类型的结构体。
索引构建#
- cuvsError_t cuvsBruteForceBuild(
- cuvsResources_t res,
- DLManagedTensor *dataset,
- cuvsDistanceType metric,
- float metric_arg,
- cuvsBruteForceIndex_t index
使用底层
DLDeviceType
等于kDLCUDA
、kDLCUDAHost
、kDLCUDAManaged
或kDLCPU
的DLManagedTensor
构建 BRUTEFORCE 索引。此外,可接受的底层类型为:kDLDataType.code == kDLFloat
且kDLDataType.bits = 32
kDLDataType.code == kDLFloat
且kDLDataType.bits = 16
#include <cuvs/core/c_api.h> #include <cuvs/neighbors/brute_force.h> // Create cuvsResources_t cuvsResources_t res; cuvsError_t res_create_status = cuvsResourcesCreate(&res); // Assume a populated `DLManagedTensor` type here DLManagedTensor dataset; // Create BRUTEFORCE index cuvsBruteForceIndex_t index; cuvsError_t index_create_status = cuvsBruteForceIndexCreate(&index); // Build the BRUTEFORCE Index cuvsError_t build_status = cuvsBruteForceBuild(res, &dataset_tensor, L2Expanded, 0.f, index); // de-allocate `index` and `res` cuvsError_t index_destroy_status = cuvsBruteForceIndexDestroy(index); cuvsError_t res_destroy_status = cuvsResourcesDestroy(res);
- 参数:
res – [in] cuvsResources_t 不透明 C 句柄
dataset – [in] DLManagedTensor* 训练数据集
metric – [in] 度量
metric_arg – [in] 度量参数
index – [out] cuvsBruteForceIndex_t 新构建的 BRUTEFORCE 索引
- 返回:
索引搜索#
- cuvsError_t cuvsBruteForceSearch(
- cuvsResources_t res,
- cuvsBruteForceIndex_t index,
- DLManagedTensor *queries,
- DLManagedTensor *neighbors,
- DLManagedTensor *distances,
- cuvsFilter prefilter
使用底层
DLDeviceType
等于kDLCUDA
、kDLCUDAHost
、kDLCUDAManaged
的DLManagedTensor
搜索 BRUTEFORCE 索引。还需要注意的是,BRUTEFORCE 索引必须使用与queries
相同的数据类型构建,即index.dtype.code == queries.dl_tensor.dtype.code
输入类型为:queries
:kDLDataType.code == kDLFloat
且kDLDataType.bits = 32
或kDLDataType.bits = 16
neighbors
:kDLDataType.code == kDLUInt
且kDLDataType.bits = 32
distances
:kDLDataType.code == kDLFloat
且kDLDataType.bits = 32
#include <cuvs/core/c_api.h> #include <cuvs/neighbors/brute_force.h> // Create cuvsResources_t cuvsResources_t res; cuvsError_t res_create_status = cuvsResourcesCreate(&res); // Assume a populated `DLManagedTensor` type here DLManagedTensor dataset; DLManagedTensor queries; DLManagedTensor neighbors; DLManagedTensor bitmap; cuvsFilter prefilter{(uintptr_t)&bitmap, BITMAP}; // Search the `index` built using `cuvsBruteForceBuild` cuvsError_t search_status = cuvsBruteForceSearch(res, index, &queries, &neighbors, &distances, prefilter); // de-allocate `res` cuvsError_t res_destroy_status = cuvsResourcesDestroy(res);
- 参数:
res – [in] cuvsResources_t 不透明 C 句柄
index – [in] cuvsBruteForceIndex 由
cuvsBruteForceBuild
返回的queries – [in] DLManagedTensor* 要搜索的查询数据集
neighbors – [out] DLManagedTensor* 查询的输出
k
个邻居distances – [out] DLManagedTensor* 查询的输出
k
个距离prefilter – [in] cuvsFilter 输入预过滤器,可用于根据给定的位图过滤查询和邻居。
索引序列化#
警告
doxygengroup: Cannot find group “bruteforce_c_index_serialize” in doxygen xml output for project “cuvs” from directory: ../../cpp/doxygen/_xml/