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<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, Apply apply)#

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

  • apply[in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply

template<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, Apply apply)#

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

  • apply[in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply

template<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, Apply apply, 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

  • apply[in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply

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

template<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, Apply apply)#

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

  • apply[in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply

template<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, Apply apply)#

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

  • apply[in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply

Operations#

#include <raft/linalg/matrix_vector_op.cuh>

namespace raft::linalg

template<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, Apply apply, 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:
  • 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

  • apply[in] whether the broadcast of vector needs to happen along the rows of the matrix or columns using enum class raft::linalg::Apply

  • op[in] the mathematical operation

template<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, Apply apply, 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:
  • 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

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

  • op – the mathematical operation