NVIDIA / NVIDIA/cuvs

[Tracker] Dataset API C++, C, and language wrapper follow-up

Open
#2,402 0 comments 0 reactions 1 assignee View on GitHub

@HowardHuang1 is already working on this.

Since Aug 3, 2026.

feature request
Dominant language
Cuda
Stars
854
Forks
236
Avg merge
3d 3h
Merged PRs (30d)
62

Description

Overview

Tracking follow-up items for Dataset API

Sub-tasks:
  • [C API] C-based dataset_t needs to store a pointer to a proper C++ Dataset instance.

  • Need accessors for matrix shape information

  • Need to test these getters in both c and python tests

  • [C++ API] Fully support padded dataset as input to CAGRA build

  • Verify it works for all of the build algo methods

  • Verify this in build kernel code

  • [Language Wrappers] Remove dataset views from language wrappers

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3688007585

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3678355568

  • @tarang-jain mentioned in slack:
    We should remove the explicit "view" type above and add a member to the dataset_t to designate whether it's owning (this isn't unlike Python ndarray)
    We should make sure the c++ impl of the C apis is properly creating a view when needed (if the dastaset_t passed in is owning)

  • Follow up with @aamijar, @tarang-jain, @divyegala

  • [Tests] Add test coverage

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3684980300

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3684981518

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3685203633

  • [C++ API] Reuse mdarray/mdspan to simplify Dataset API and make it easier to convert between mdarray and datasets

  • Address @achirkin ’s C++ changes here: rhttps://github.com/NVIDIA/cuvs/pull/1846#discussion_r3553946083

  • [C++ API] More permanent type placeholder to satisfy DatasetViewT template parameter:
    https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3531332959

  • [C API][C++ API] Rework file tree organization splitting all dataset classes, structs, and functions into a separate file within include/core/dataset.hpp

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3536786351

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3685314496

  • [C++ API] Rename host/device_standard/padded_index type

  • Index contains graph + dataset

  • Right now naming of index is associated with the type of dataset bound, but should instead be associated with where the graph is located too

  • Do we need to introduce a type for the graph? (ex. Host_graph vs device_graph)

  • [C API] Migrate merge() Dataset API to have users pass in concatenated dataset + integer offset.

  • Migrate merge() the same way we did with extend(). Users should be responsible with concatenating the 2 datasets into 1 merged dataset and provide that single merged dataset + integer offset. Merge() should then merge graph only.

  • Think about how to pre-calculate merged storage size after bitset filter:

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3639389310

  • [C++ API] Check for hidden H2D copies in ACE path

  • Was previously added to preserve / mirror upstream ACE behavior

  • Need to re-evaluate because this goes against our contract of never hiding memory allocation from user

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3685764576

  • https://github.com/NVIDIA/cuvs/pull/1846#discussion_r3685935639

  • [C++ API] Fix update_dataset at C++ API layer

  • At C API layer we already centralized an update to a single UpdateDataset function that internally dispatches to AttachDataset or UpdateDeviceDatasetSameLayout based on whether index is standard vs padded

  • However, at C++ API layer this can’t be easily done because attach_dataset doesn’t mutate the input index and instead returns a new index whereas update_device_dataset_same_layout mutates the original padded input dataset. C++ has guarantees about immutability for thread safety so we need to revisit how the update_dataset() function can be unified at the C++ API layer.

  • [C API][Language Wrappers]

  • Cagra-Q path in C API layer and downstream language wrappers was accidentally disabled when compression params was removed.

  • Need to expose make_vpq_dataset() factory + rebind compressed dataset on uncompressed index functions at C API and downstream language wrappers. C++ API already has this.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.