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.10 (October) release and they will be removed from RAFT altogether in the 24.12 (December) release.

Matrix-Vector Operations#

Arithmetic#

#include <raft/linalg/matrix_vector.cuh>

namespace raft::linalg

template<Apply apply, typename math_t, typename idx_t, typename layout_t>
void binary_mult_skip_zero(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec)#

multiply each row or column of matrix with vector, skipping zeros in vector

Parameters:
  • handle[in] raft handle for managing library resources

  • data[inout] input matrix, results are in-place

  • vec[in] input vector

template<Apply apply, typename math_t, typename idx_t, typename layout_t>
void binary_div(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec)#

divide each row or column of matrix with vector

Parameters:
  • handle[in] raft handle for managing library resources

  • data[inout] input matrix, results are in-place

  • vec[in] input vector

template<Apply apply, typename math_t, typename idx_t, typename layout_t>
void binary_div_skip_zero(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec, bool return_zero = false)#

divide each row or column of matrix with vector, skipping zeros in vector

Parameters:
  • handle[in] raft handle for managing library resources

  • data[inout] input matrix, results are in-place

  • vec[in] input vector

  • return_zero[in] result is zero if true and vector value is below threshold, original value if false

template<Apply apply, typename math_t, typename idx_t, typename layout_t>
void binary_add(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec)#

add each row or column of matrix with vector

Parameters:
  • handle[in] raft handle for managing library resources

  • data[inout] input matrix, results are in-place

  • vec[in] input vector

template<Apply apply, typename math_t, typename idx_t, typename layout_t>
void binary_sub(raft::resources const &handle, raft::device_matrix_view<math_t, idx_t, layout_t> data, raft::device_vector_view<const math_t, idx_t> vec)#

subtract each row or column of matrix with vector

Parameters:
  • handle[in] raft handle for managing library resources

  • data[inout] input matrix, results are in-place

  • vec[in] input vector

Operations#

#include <raft/linalg/matrix_vector_op.cuh>

namespace raft::linalg

template<Apply apply, typename MatValueType, typename VecValueType, typename LayoutPolicy, typename Lambda, typename IndexType>
void matrix_vector_op(raft::resources const &handle, raft::device_matrix_view<const MatValueType, IndexType, LayoutPolicy> matrix, raft::device_vector_view<const VecValueType, IndexType> vec, raft::device_matrix_view<MatValueType, IndexType, LayoutPolicy> out, Lambda op)#

Operations for all the columns or rows with a given vector. Caution : Threads process multiple elements to speed up processing. These are loaded in a single read thanks to type promotion. Faster processing would thus only be enabled when addresses are optimally aligned for it. Note : the function will also check that the size of the window of accesses is a multiple of the number of elements processed by a thread in order to enable faster processing.

Template Parameters:
  • apply – whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::Apply

  • MatValueType – the data-type of the input matrix

  • VecValueType – the data-type of the input vector

  • LayoutPolicy – the layout of input and output (raft::row_major or raft::col_major)

  • Lambda – a device function which represents a binary operator

  • IndexType – Integer used for addressing

Parameters:
  • handle[in] raft::resources

  • matrix[in] input raft::matrix_view

  • vec[in] vector raft::vector_view

  • out[out] output raft::matrix_view

  • op[in] the mathematical operation

template<Apply apply, typename MatValueType, typename Vec1ValueType, typename Vec2ValueType, typename LayoutPolicy, typename Lambda, typename IndexType>
void matrix_vector_op(raft::resources const &handle, raft::device_matrix_view<const MatValueType, IndexType, LayoutPolicy> matrix, raft::device_vector_view<const Vec1ValueType, IndexType> vec1, raft::device_vector_view<const Vec2ValueType, IndexType> vec2, raft::device_matrix_view<MatValueType, IndexType, LayoutPolicy> out, Lambda op)#

Operations for all the columns or rows with the given vectors. Caution : Threads process multiple elements to speed up processing. These are loaded in a single read thanks to type promotion. Faster processing would thus only be enabled when addresses are optimally aligned for it. Note : the function will also check that the size of the window of accesses is a multiple of the number of elements processed by a thread in order to enable faster processing.

Template Parameters:
  • apply – whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::Apply

  • MatValueType – the data-type of the input and output matrices

  • Vec1ValueType – the data-type of the first input vector

  • Vec2ValueType – the data-type of the second input vector

  • LayoutPolicy – the layout of input and output (raft::row_major or raft::col_major)

  • Lambda – a device function which represents a binary operator

  • IndexType – Integer used for addressing

Parameters:
  • handle – raft::resources

  • matrix – input raft::matrix_view

  • vec1 – the first vector raft::vector_view

  • vec2 – the second vector raft::vector_view

  • out – output raft::matrix_view

  • op – the mathematical operation