Brute Force

View as Markdown

Source header: cuvs/neighbors/brute_force.h

Bruteforce index

cuvsBruteForceIndex

Struct to hold address of cuvs::neighbors::brute_force::index and its active trained dtype

typedef struct {
uintptr_t addr;
DLDataType dtype;
} cuvsBruteForceIndex;

Fields

NameTypeDescription
addruintptr_t
dtypeDLDataType

cuvsBruteForceIndexCreate

Allocate BRUTEFORCE index

cuvsError_t cuvsBruteForceIndexCreate(cuvsBruteForceIndex_t* index);

Parameters

NameDirectionTypeDescription
indexincuvsBruteForceIndex_t*cuvsBruteForceIndex_t to allocate

Returns

cuvsError_t

cuvsBruteForceIndexDestroy

De-allocate BRUTEFORCE index

cuvsError_t cuvsBruteForceIndexDestroy(cuvsBruteForceIndex_t index);

Parameters

NameDirectionTypeDescription
indexincuvsBruteForceIndex_tcuvsBruteForceIndex_t to de-allocate

Returns

cuvsError_t

Bruteforce index build

cuvsBruteForceBuild

Build a BRUTEFORCE index with a DLManagedTensor which has underlying DLDeviceType equal to kDLCUDA, kDLCUDAHost, kDLCUDAManaged, or kDLCPU. Also, acceptable underlying types are:

  1. kDLDataType.code == kDLFloat and kDLDataType.bits = 32
  2. kDLDataType.code == kDLFloat and kDLDataType.bits = 16
cuvsError_t cuvsBruteForceBuild(cuvsResources_t res,
DLManagedTensor* dataset,
cuvsDistanceType metric,
float metric_arg,
cuvsBruteForceIndex_t index);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
datasetinDLManagedTensor*DLManagedTensor* training dataset
metricincuvsDistanceTypemetric
metric_arginfloatmetric_arg
indexoutcuvsBruteForceIndex_tcuvsBruteForceIndex_t Newly built BRUTEFORCE index

Returns

cuvsError_t

cuvsBruteForceSearch

Search a BRUTEFORCE index with a DLManagedTensor which has underlying DLDeviceType equal to kDLCUDA, kDLCUDAHost, kDLCUDAManaged. It is also important to note that the BRUTEFORCE index must have been built with the same type of queries, such that index.dtype.code == queries.dl_tensor.dtype.code Types for input are:

  1. queries: kDLDataType.code == kDLFloat and kDLDataType.bits = 32 or kDLDataType.bits = 16
  2. neighbors: kDLDataType.code == kDLUInt and kDLDataType.bits = 32
  3. distances: kDLDataType.code == kDLFloat and kDLDataType.bits = 32
cuvsError_t cuvsBruteForceSearch(cuvsResources_t res,
cuvsBruteForceIndex_t index,
DLManagedTensor* queries,
DLManagedTensor* neighbors,
DLManagedTensor* distances,
cuvsFilter prefilter);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
indexincuvsBruteForceIndex_tcuvsBruteForceIndex which has been returned by cuvsBruteForceBuild
queriesinDLManagedTensor*DLManagedTensor* queries dataset to search
neighborsoutDLManagedTensor*DLManagedTensor* output k neighbors for queries
distancesoutDLManagedTensor*DLManagedTensor* output k distances for queries
prefilterincuvsFiltercuvsFilter input prefilter that can be used to filter queries and neighbors based on the given bitmap.

Returns

cuvsError_t

BRUTEFORCE C-API serialize functions

cuvsBruteForceSerialize

Save the index to file.

cuvsError_t cuvsBruteForceSerialize(cuvsResources_t res,
const char* filename,
cuvsBruteForceIndex_t index);

The serialization format can be subject to changes, therefore loading an index saved with a previous version of cuvs is not guaranteed to work.

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
filenameinconst char*the file name for saving the index
indexincuvsBruteForceIndex_tBRUTEFORCE index

Returns

cuvsError_t

cuvsBruteForceDeserialize

Load index from file.

cuvsError_t cuvsBruteForceDeserialize(cuvsResources_t res,
const char* filename,
cuvsBruteForceIndex_t index);

The serialization format can be subject to changes, therefore loading an index saved with a previous version of cuvs is not guaranteed to work.

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
filenameinconst char*the name of the file that stores the index
indexoutcuvsBruteForceIndex_tBRUTEFORCE index loaded disk

Returns

cuvsError_t