Attention

The vector search and clustering algorithms in RAFT are being migrated to a new library dedicated to vector search called cuVS. We will continue to support the vector search algorithms in RAFT during this move, but will no longer update them after the RAPIDS 24.06 (June) release. We plan to complete the migration by RAPIDS 24.08 (August) release.

Multi-dimensional Representation#

Data Layouts#

#include <raft/core/mdspan_types.hpp>

using layout_c_contiguous = layout_right#
using row_major = layout_right#
using layout_f_contiguous = layout_left#
using col_major = layout_left#

Shapes#

#include <raft/core/mdspan.hpp>

template<typename IndexType>
using raft::matrix_extent = std::experimental::extents<IndexType, dynamic_extent, dynamic_extent>#
template<typename IndexType>
using raft::vector_extent = std::experimental::extents<IndexType, dynamic_extent>#
template<typename IndexType>
using raft::scalar_extent = std::experimental::extents<IndexType, 1>#
template<typename IndexType>
using raft::extent_3d = std::experimental::extents<IndexType, dynamic_extent, dynamic_extent, dynamic_extent>#
template<typename IndexType>
using raft::extent_4d = std::experimental::extents<IndexType, dynamic_extent, dynamic_extent, dynamic_extent, dynamic_extent>#
template<typename IndexType>
using raft::extent_5d = std::experimental::extents<IndexType, dynamic_extent, dynamic_extent, dynamic_extent, dynamic_extent, dynamic_extent>#
template<typename mdspan_type, typename = enable_if_mdspan<mdspan_type>>
auto flatten(mdspan_type mds)#

Flatten raft::mdspan into a 1-dim array view.

Template Parameters:

mdspan_type – Expected type raft::host_mdspan or raft::device_mdspan

Parameters:

mdsraft::host_mdspan or raft::device_mdspan object

Returns:

raft::host_mdspan or raft::device_mdspan with vector_extent depending on AccessoryPolicy

template<typename mdspan_type, typename IndexType = std::uint32_t, size_t... Extents, typename = enable_if_mdspan<mdspan_type>>
auto reshape(mdspan_type mds, extents<IndexType, Extents...> new_shape)#

Reshape raft::host_mdspan or raft::device_mdspan.

Template Parameters:
Parameters:
Returns:

raft::host_mdspan or raft::device_mdspan, depending on AccessorPolicy

template<class ElementType>
std::experimental::default_accessor<std::add_const_t<ElementType>> accessor_of_const(std::experimental::default_accessor<ElementType> a)#

Const accessor specialization for default_accessor.

Template Parameters:

ElementType

Parameters:

a

Returns:

std::experimental::default_accessor<std::add_const_t<ElementType>>

template<class ElementType, memory_type MemType>
host_device_accessor<std::experimental::default_accessor<std::add_const_t<ElementType>>, MemType> accessor_of_const(host_device_accessor<std::experimental::default_accessor<ElementType>, MemType> a)#

Const accessor specialization for host_device_accessor.

Template Parameters:
  • ElementType – the data type of the mdspan elements

  • MemType – the type of memory where the elements are stored.

Parameters:

ahost_device_accessor

Returns:

host_device_accessor<std::experimental::default_accessor<std::add_const_t<ElementType>>, MemType>

template<typename array_interface_type, std::enable_if_t<is_array_interface_v<array_interface_type>>* = nullptr>
auto flatten(const array_interface_type &mda)#

Flatten object implementing raft::array_interface into a 1-dim array view.

Template Parameters:

array_interface_type – Expected type implementing raft::array_interface

Parameters:

mda – raft::array_interace implementing object

Returns:

Either raft::host_mdspan or raft::device_mdspan with vector_extent depending on the underlying ContainerPolicy

template<typename array_interface_type, typename IndexType = std::uint32_t, size_t... Extents, std::enable_if_t<is_array_interface_v<array_interface_type>>* = nullptr>
auto reshape(const array_interface_type &mda, extents<IndexType, Extents...> new_shape)#

Reshape object implementing raft::array_interface.

Template Parameters:
  • array_interface_type – Expected type implementing raft::array_interface

  • Extents – raft::extents for dimensions

  • IndexType – the index type of the extents

Parameters:
  • mda – raft::array_interace implementing object

  • new_shape – Desired new shape of the input

Returns:

raft::host_mdspan or raft::device_mdspan, depending on the underlying ContainerPolicy

Accessors#

#include <raft/core/host_device_accessor.hpp>

template<typename AccessorPolicy, memory_type MemType>
struct host_device_accessor : public AccessorPolicy#

A mixin to distinguish host and device memory. This is the primary accessor used throughout RAFT’s APIs to denote whether an underlying pointer is accessible from device, host, or both.

template<typename AccessorPolicy>
using raft::host_accessor = host_device_accessor<AccessorPolicy, memory_type::host>#
template<typename AccessorPolicy>
using raft::device_accessor = host_device_accessor<AccessorPolicy, memory_type::device>#
template<typename AccessorPolicy>
using raft::managed_accessor = host_device_accessor<AccessorPolicy, memory_type::managed>#