Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,25 @@ repos:
args: ["-fallback-style=none", "-style=file", "-i"]
- repo: local
hooks:
- id: fern-api-reference
name: fern-api-reference
description: 'Regenerate the Fern API reference pages from the sources'
entry: python3 fern/scripts/generate_api_reference.py --quiet
language: system
pass_filenames: false
require_serial: true
files: |
(?x)
^c/include/.*[.](h|hpp)$|
^cpp/include/.*[.](h|hpp|cuh)$|
^python/cuvs/cuvs/.*[.](py|pyx|pxd)$|
^java/cuvs-java/src/main/.*[.]java$|
^rust/cuvs/src/.*[.]rs$|
^go/.*[.]go$|
^fern/scripts/generate_api_reference[.]py$|
^fern/pages/(c|cpp|python|java|rust|go)_api/.*[.]md$|
^fern/pages/api_reference[.]md$|
^fern/docs[.]yml$
- id: no-deprecationwarning
name: no-deprecationwarning
description: 'Enforce that DeprecationWarning is not introduced (use FutureWarning instead)'
Expand Down
86 changes: 51 additions & 35 deletions fern/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,8 @@ navigation:
path: "./pages/c_api/c-api-cluster-mg-kmeans.md"
- page: "Core C API"
path: "./pages/c_api/c-api-core-c-api.md"
- page: "Core Dataset"
path: "./pages/c_api/c-api-core-dataset.md"
- page: "Distance Distance"
path: "./pages/c_api/c-api-distance-distance.md"
- page: "Distance Pairwise Distance"
Expand Down Expand Up @@ -329,6 +331,8 @@ navigation:
path: "./pages/cpp_api/cpp-api-cluster-kmeans.md"
- page: "Cluster Spectral"
path: "./pages/cpp_api/cpp-api-cluster-spectral.md"
- page: "Core Bloom Filter"
path: "./pages/cpp_api/cpp-api-core-bloom-filter.md"
- section: "Common Types"
path: "./pages/cpp_api/cpp-api-common-types.md"
contents:
Expand Down Expand Up @@ -410,6 +414,8 @@ navigation:
path: "./pages/cpp_api/cpp-api-util-cutlass-utils.md"
- page: "Util File Io"
path: "./pages/cpp_api/cpp-api-util-file-io.md"
- page: "Util Host Memory"
path: "./pages/cpp_api/cpp-api-util-host-memory.md"
- section: "Python API Documentation"
path: "./pages/python_api/index.md"
contents:
Expand Down Expand Up @@ -462,75 +468,81 @@ navigation:
- section: "Java API Documentation"
path: "./pages/java_api/index.md"
contents:
- page: "Com Nvidia cuVS Cuvsdevicematrix"
- page: "CuVSDeviceMatrix"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsdevicematrix.md"
- page: "Com Nvidia cuVS Cuvshostmatrix"
- page: "CuVSHostMatrix"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvshostmatrix.md"
- page: "Com Nvidia cuVS Cuvsmatrix"
- page: "CuVSMatrix"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsmatrix.md"
- page: "Com Nvidia cuVS Spi Cuvsprovider"
- page: "CuVSProvider"
path: "./pages/java_api/java-api-com-nvidia-cuvs-spi-cuvsprovider.md"
- page: "Com Nvidia cuVS Cuvsresources"
- page: "CuVSResources"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsresources.md"
- page: "Com Nvidia cuVS Cuvsresourcesinfo"
- page: "CuVSResourcesInfo"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsresourcesinfo.md"
- page: "Com Nvidia cuVS Spi Cuvsserviceprovider"
- page: "CuVSServiceProvider"
path: "./pages/java_api/java-api-com-nvidia-cuvs-spi-cuvsserviceprovider.md"
- page: "Com Nvidia cuVS Delegatingscopedaccess"
- page: "DelegatingScopedAccess"
path: "./pages/java_api/java-api-com-nvidia-cuvs-delegatingscopedaccess.md"
- page: "Com Nvidia cuVS Gpuinfo"
- page: "FilterBitsetHandle"
path: "./pages/java_api/java-api-com-nvidia-cuvs-filterbitsethandle.md"
- page: "GPUInfo"
path: "./pages/java_api/java-api-com-nvidia-cuvs-gpuinfo.md"
- page: "Com Nvidia cuVS Gpuinfoprovider"
- page: "GPUInfoProvider"
path: "./pages/java_api/java-api-com-nvidia-cuvs-gpuinfoprovider.md"
- page: "Com Nvidia cuVS Libraryexception"
- page: "LibraryException"
path: "./pages/java_api/java-api-com-nvidia-cuvs-libraryexception.md"
- page: "Com Nvidia cuVS Rowview"
- page: "RowView"
path: "./pages/java_api/java-api-com-nvidia-cuvs-rowview.md"
- page: "Com Nvidia cuVS Synchronizedcuvsresources"
- page: "SynchronizedCuVSResources"
path: "./pages/java_api/java-api-com-nvidia-cuvs-synchronizedcuvsresources.md"
- page: "Com Nvidia cuVS Bruteforceindex"
- page: "BruteForceIndex"
path: "./pages/java_api/java-api-com-nvidia-cuvs-bruteforceindex.md"
- page: "Com Nvidia cuVS Bruteforceindexparams"
- page: "BruteForceIndexParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-bruteforceindexparams.md"
- page: "Com Nvidia cuVS Bruteforcequery"
- page: "BruteForceQuery"
path: "./pages/java_api/java-api-com-nvidia-cuvs-bruteforcequery.md"
- page: "Com Nvidia cuVS Cagracompressionparams"
- page: "CagraCompressionParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cagracompressionparams.md"
- page: "Com Nvidia cuVS Cagraindex"
- page: "CagraIndex"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cagraindex.md"
- page: "Com Nvidia cuVS Cagraindexparams"
- page: "CagraIndexParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cagraindexparams.md"
- page: "Com Nvidia cuVS Cagramergeparams"
- page: "CagraMergeParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cagramergeparams.md"
- page: "Com Nvidia cuVS Cagraquery"
- page: "CagraQuery"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cagraquery.md"
- page: "Com Nvidia cuVS Cagrasearchparams"
- page: "CagraSearchParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cagrasearchparams.md"
- page: "Com Nvidia cuVS Cuvsaceparams"
- page: "CuVSAceParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsaceparams.md"
- page: "Com Nvidia cuVS Cuvsivfpqindexparams"
- page: "CuVSIvfPqIndexParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsivfpqindexparams.md"
- page: "Com Nvidia cuVS Cuvsivfpqparams"
- page: "CuVSIvfPqParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsivfpqparams.md"
- page: "Com Nvidia cuVS Cuvsivfpqsearchparams"
- page: "CuVSIvfPqSearchParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-cuvsivfpqsearchparams.md"
- page: "Com Nvidia cuVS Hnswaceparams"
- page: "HnswAceParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-hnswaceparams.md"
- page: "Com Nvidia cuVS Hnswindex"
- page: "HnswIndex"
path: "./pages/java_api/java-api-com-nvidia-cuvs-hnswindex.md"
- page: "Com Nvidia cuVS Hnswindexparams"
- page: "HnswIndexParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-hnswindexparams.md"
- page: "Com Nvidia cuVS Hnswquery"
- page: "HnswQuery"
path: "./pages/java_api/java-api-com-nvidia-cuvs-hnswquery.md"
- page: "Com Nvidia cuVS Hnswsearchparams"
- page: "HnswSearchParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-hnswsearchparams.md"
- page: "Com Nvidia cuVS Searchresults"
- page: "MultiPartitionCagraSearch"
path: "./pages/java_api/java-api-com-nvidia-cuvs-multipartitioncagrasearch.md"
- page: "MultiPartitionSearchResults"
path: "./pages/java_api/java-api-com-nvidia-cuvs-multipartitionsearchresults.md"
- page: "SearchResults"
path: "./pages/java_api/java-api-com-nvidia-cuvs-searchresults.md"
- page: "Com Nvidia cuVS Tieredindex"
- page: "TieredIndex"
path: "./pages/java_api/java-api-com-nvidia-cuvs-tieredindex.md"
- page: "Com Nvidia cuVS Tieredindexparams"
- page: "TieredIndexParams"
path: "./pages/java_api/java-api-com-nvidia-cuvs-tieredindexparams.md"
- page: "Com Nvidia cuVS Tieredindexquery"
- page: "TieredIndexQuery"
path: "./pages/java_api/java-api-com-nvidia-cuvs-tieredindexquery.md"
- section: "Rust API Documentation"
path: "./pages/rust_api/index.md"
Expand All @@ -543,6 +555,8 @@ navigation:
path: "./pages/rust_api/rust-api-cuvs-cluster-kmeans-params.md"
- page: "cuVS"
path: "./pages/rust_api/rust-api-cuvs.md"
- page: "cuVS Dataset"
path: "./pages/rust_api/rust-api-cuvs-dataset.md"
- page: "cuVS Dlpack"
path: "./pages/rust_api/rust-api-cuvs-dlpack.md"
- page: "cuVS Error"
Expand All @@ -553,6 +567,8 @@ navigation:
path: "./pages/rust_api/rust-api-cuvs-neighbors-filters.md"
- page: "cuVS Resources"
path: "./pages/rust_api/rust-api-cuvs-resources.md"
- page: "cuVS Version"
path: "./pages/rust_api/rust-api-cuvs-version.md"
- page: "cuVS Distance"
path: "./pages/rust_api/rust-api-cuvs-distance.md"
- page: "cuVS Neighbors Brute Force"
Expand Down
2 changes: 1 addition & 1 deletion fern/pages/c_api/c-api-cluster-kmeans.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ int* n_iter);

Initial centroids are chosen with k-means++ algorithm. Empty clusters are reinitialized by choosing new centroids with k-means++ algorithm.

X may reside on either host (CPU) or device (GPU) memory. When X is on the host the data is streamed to the GPU in batches controlled by params->device_buffer_samples.
X may reside on either host (CPU) or device (GPU) memory. When X is on the host the data is buffered to the GPU in batches controlled by params->device_buffer_samples.

**Parameters**

Expand Down
4 changes: 2 additions & 2 deletions fern/pages/c_api/c-api-cluster-mg-kmeans.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ _Source header: `cuvs/cluster/mg_kmeans.h`_
Find clusters with single-node multi-GPU k-means using host data.

```c
CUVS_EXPORT cuvsError_t cuvsMultiGpuKMeansFit(cuvsResources_t res,
cuvsError_t cuvsMultiGpuKMeansFit(cuvsResources_t res,
cuvsKMeansParams_t params,
DLManagedTensor* X,
DLManagedTensor* sample_weight,
Expand All @@ -39,4 +39,4 @@ X, sample_weight, and centroids must be host-accessible, row-major, C-contiguous

**Returns**

[`CUVS_EXPORT cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)
[`cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)
59 changes: 59 additions & 0 deletions fern/pages/c_api/c-api-core-c-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,31 @@ cuvsError_t cuvsResourcesCreate(cuvsResources_t* res);

[`cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)

<a id="cuvsresourcescreatewithmemorytracking"></a>
### cuvsResourcesCreateWithMemoryTracking

Create an opaque C handle for C++ type `raft::resources` whose memory allocations are tracked and written as CSV samples from a background thread.

```c
cuvsError_t cuvsResourcesCreateWithMemoryTracking(cuvsResources_t* res,
const char* csv_path,
int64_t sample_interval_ms);
```

The returned handle wraps all reachable memory resources (host, pinned, managed, device, workspace, large_workspace) with allocation-tracking adaptors and replaces the global host and device memory resources for the lifetime of the handle. It is otherwise indistinguishable from a handle created by ::cuvsResourcesCreate and can be used wherever a :cuvsResources_t is accepted. The CSV reporter is stopped and the global memory resources are restored when the handle is destroyed via :cuvsResourcesDestroy.

**Parameters**

| Name | Direction | Type | Description |
| --- | --- | --- | --- |
| `res` | out | [`cuvsResources_t*`](/api-reference/c-api-core-c-api#cuvsresources-t) | cuvsResources_t opaque C handle |
| `csv_path` | in | `const char*` | Path to the output CSV file (created/truncated). Must be a non-empty, null-terminated UTF-8 string. |
| `sample_interval_ms` | in | `int64_t` | Minimum time in milliseconds between successive CSV samples. Pass 10 to match the C++ default. |

**Returns**

[`cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)

<a id="cuvsresourcesdestroy"></a>
### cuvsResourcesDestroy

Expand Down Expand Up @@ -250,6 +275,27 @@ cuvsError_t cuvsDeviceIdGet(cuvsResources_t res, int* device_id);

[`cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)

<a id="cuvsresourcessetworkspacepool"></a>
### cuvsResourcesSetWorkspacePool

Configure the temporary workspace on this resources object as an uncapped pool, backed by the current device memory resource. After the initial reservation is allocated on first use, subsequent calls to cuvsRMMAlloc / cuvsRMMFree on the same resources handle hit the pool cache rather than calling cudaMallocAsync / cudaFreeAsync, reducing CUDA context lock contention under concurrent query threads. The pool grows without shrinking: freed allocations are returned to the pool rather than to the device, so the pool's high-water mark only increases until the resources object is destroyed.

```c
cuvsError_t cuvsResourcesSetWorkspacePool(cuvsResources_t res,
size_t initial_size_bytes);
```

**Parameters**

| Name | Direction | Type | Description |
| --- | --- | --- | --- |
| `res` | in | [`cuvsResources_t`](/api-reference/c-api-core-c-api#cuvsresources-t) | cuvsResources_t opaque C handle |
| `initial_size_bytes` | in | `size_t` | initial pool reservation in bytes; size to cover the steady-state working set to avoid growth after warmup |

**Returns**

[`cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)

<a id="cuvsmultigpuresourcescreate"></a>
### cuvsMultiGpuResourcesCreate

Expand Down Expand Up @@ -396,6 +442,19 @@ bool managed);

[`cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)

<a id="cuvsrmmasyncmemoryresourceenable"></a>
### cuvsRMMAsyncMemoryResourceEnable

Switches the working memory resource to use stream-ordered asynchronous allocation (cudaMallocAsync / cudaFreeAsync). Unlike the pool resource, this resource returns memory to the stream immediately without blocking the CPU, eliminating device-wide synchronization on deallocation. This is especially beneficial when multiple CAGRA searches run concurrently on separate CUDA streams, because the internal workspace allocations no longer serialize kernel launches. Be aware that this function will change the memory resource for the whole process and the new memory resource will be used until explicitly changed.

```c
cuvsError_t cuvsRMMAsyncMemoryResourceEnable();
```

**Returns**

[`cuvsError_t`](/api-reference/c-api-core-c-api#cuvserror-t)

<a id="cuvsrmmmemoryresourcereset"></a>
### cuvsRMMMemoryResourceReset

Expand Down
74 changes: 74 additions & 0 deletions fern/pages/c_api/c-api-core-dataset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
slug: api-reference/c-api-core-dataset
---

# Dataset

_Source header: `cuvs/core/dataset.h`_

## Types

<a id="cuvsdatasetlayout-t"></a>
### cuvsDatasetLayout_t

Generic dataset layout kind for C API dataset handles.

```c
typedef enum {
CUVS_DATASET_LAYOUT_STANDARD = 0,
CUVS_DATASET_LAYOUT_PADDED = 1
} cuvsDatasetLayout_t;
```

**Values**

| Name | Value |
| --- | --- |
| `CUVS_DATASET_LAYOUT_STANDARD` | `0` |
| `CUVS_DATASET_LAYOUT_PADDED` | `1` |

<a id="cuvsdatasetmemtype-t"></a>
### cuvsDatasetMemType_t

Memory space holding a C API dataset handle's data.

```c
typedef enum {
CUVS_DATASET_MEM_TYPE_HOST = 0,
CUVS_DATASET_MEM_TYPE_DEVICE = 1
} cuvsDatasetMemType_t;
```

**Values**

| Name | Value |
| --- | --- |
| `CUVS_DATASET_MEM_TYPE_HOST` | `0` |
| `CUVS_DATASET_MEM_TYPE_DEVICE` | `1` |

<a id="destroy-addr"></a>
### destroy_addr

Dataset handle representing owning storage or a non-owning view.

`addr` points to C++ dataset storage or view metadata managed by the C API. `mem_type` identifies the memory space, `layout` identifies the data layout, and `is_owning` indicates whether the handle owns its backing data.

```c
typedef struct {
uintptr_t addr;
DLDataType dtype;
cuvsDatasetMemType_t mem_type;
cuvsDatasetLayout_t layout;
bool is_owning;
} cuvsDataset;
```

**Fields**

| Name | Type | Description |
| --- | --- | --- |
| `addr` | `uintptr_t` | |
| `dtype` | `DLDataType` | |
| `mem_type` | [`cuvsDatasetMemType_t`](/api-reference/c-api-core-dataset#cuvsdatasetmemtype-t) | |
| `layout` | [`cuvsDatasetLayout_t`](/api-reference/c-api-core-dataset#cuvsdatasetlayout-t) | |
| `is_owning` | `bool` | |
10 changes: 6 additions & 4 deletions fern/pages/c_api/c-api-neighbors-all-neighbors.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ DLManagedTensor* core_distances,
float alpha);
```

The function automatically detects whether the dataset is host-resident or device-resident and calls the appropriate implementation. For host datasets, it partitions data into `n_clusters` clusters and assigns each row to `overlap_factor` nearest clusters. For device datasets, `n_clusters` must be 1 (no batching); `overlap_factor` is ignored. Outputs always reside in device memory.
The function automatically detects whether the dataset is host-resident or device-resident and calls the appropriate implementation. For host datasets, it partitions data into `n_clusters` clusters and assigns each row to `overlap_factor` nearest clusters. For device datasets, `n_clusters` must be 1 (no batching); `overlap_factor` is ignored.

Output memory space: a host dataset supports host- or device-resident outputs; a device dataset requires device-resident outputs. All provided outputs must share the same memory space.

**Parameters**

Expand All @@ -120,9 +122,9 @@ The function automatically detects whether the dataset is host-resident or devic
| `res` | in | [`cuvsResources_t`](/api-reference/c-api-core-c-api#cuvsresources-t) | Can be a SNMG multi-GPU resources (`cuvsResources_t`) or single-GPU resources |
| `params` | in | [`cuvsAllNeighborsIndexParams_t`](/api-reference/c-api-neighbors-all-neighbors#cuvsallneighborsindexparams) | Build parameters (see cuvsAllNeighborsIndexParams) |
| `dataset` | in | `DLManagedTensor*` | 2D tensor [num_rows x dim] on host or device (auto-detected) |
| `indices` | out | `DLManagedTensor*` | 2D tensor [num_rows x k] on device (int64) |
| `distances` | out | `DLManagedTensor*` | Optional 2D tensor [num_rows x k] on device (float32); can be NULL |
| `core_distances` | out | `DLManagedTensor*` | Optional 1D tensor [num_rows] on device (float32); can be NULL |
| `indices` | out | `DLManagedTensor*` | 2D tensor [num_rows x k] (int64), host or device |
| `distances` | out | `DLManagedTensor*` | Optional 2D tensor [num_rows x k] (float32), host or device; can be NULL |
| `core_distances` | out | `DLManagedTensor*` | Optional 1D tensor [num_rows] (float32), host or device; can be NULL |
| `alpha` | in | `float` | Mutual-reachability scaling; used only when core_distances is provided |

**Returns**
Expand Down
Loading
Loading