注意

RAFT 中的向量搜索和聚类算法正在迁移到一个专门用于向量搜索的新库,名为 cuVS。在此迁移期间,我们将继续支持 RAFT 中的向量搜索算法,但在 RAPIDS 24.06(六月)版本发布后将不再更新它们。我们计划在 RAPIDS 24.10(十月)版本发布时完成迁移,并在 24.12(十二月)版本中将它们完全从 RAFT 中移除。

矩阵-向量运算#

算术#

#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)#

将矩阵的每一行或每一列与向量相乘,跳过向量中的零

参数:
  • handle[in] 用于管理库资源的 raft handle

  • data[inout] 输入矩阵,结果在原位更新

  • vec[in] 输入向量

  • apply[in] 使用枚举类 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)#

将矩阵的每一行或每一列除以向量

参数:
  • handle[in] 用于管理库资源的 raft handle

  • data[inout] 输入矩阵,结果在原位更新

  • vec[in] 输入向量

  • apply[in] 使用枚举类 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)#

将矩阵的每一行或每一列除以向量,跳过向量中的零

参数:
  • handle[in] 用于管理库资源的 raft handle

  • data[inout] 输入矩阵,结果在原位更新

  • vec[in] 输入向量

  • apply[in] 使用枚举类 raft::linalg::Apply 指定向量广播是沿矩阵的行还是列进行

  • return_zero[in] 如果为 true 且向量值低于阈值,则结果为零;如果为 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)#

将向量添加到矩阵的每一行或每一列

参数:
  • handle[in] 用于管理库资源的 raft handle

  • data[inout] 输入矩阵,结果在原位更新

  • vec[in] 输入向量

  • apply[in] 使用枚举类 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)#

从矩阵的每一行或每一列减去向量

参数:
  • handle[in] 用于管理库资源的 raft handle

  • data[inout] 输入矩阵,结果在原位更新

  • vec[in] 输入向量

  • apply[in] 使用枚举类 raft::linalg::Apply 指定向量广播是沿矩阵的行还是列进行

运算#

#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)#

对所有列或行与给定向量进行运算。注意:线程会处理多个元素以加速处理。借助于类型提升,这些元素可以通过单次读取加载。因此,只有当地址为此进行优化对齐时,才能实现更快的处理速度。注意:该函数还将检查访问窗口的大小是否是线程处理元素数量的倍数,以便实现更快的处理速度。

模板参数:
  • MatValueType – 输入矩阵的数据类型

  • VecValueType – 输入向量的数据类型

  • LayoutPolicy – 输入和输出的布局(raft::row_majorraft::col_major

  • Lambda – 表示二元运算符的设备函数

  • IndexType – 用于寻址的整数类型

参数:
  • handle[in] raft::resources

  • matrix[in] 输入 raft::matrix_view

  • vec[in] 向量 raft::vector_view

  • out[out] 输出 raft::matrix_view

  • apply[in] 使用枚举类 raft::linalg::Apply 指定向量广播是沿矩阵的行还是列进行

  • op[in] 数学运算

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)#

对所有列或行与给定向量进行运算。注意:线程会处理多个元素以加速处理。借助于类型提升,这些元素可以通过单次读取加载。因此,只有当地址为此进行优化对齐时,才能实现更快的处理速度。注意:该函数还将检查访问窗口的大小是否是线程处理元素数量的倍数,以便实现更快的处理速度。

模板参数:
  • MatValueType – 输入和输出矩阵的数据类型

  • Vec1ValueType – 第一个输入向量的数据类型

  • Vec2ValueType – 第二个输入向量的数据类型

  • LayoutPolicy – 输入和输出的布局(raft::row_majorraft::col_major

  • Lambda – 表示二元运算符的设备函数

  • IndexType – 用于寻址的整数类型

参数:
  • handle – raft::resources

  • matrix – 输入 raft::matrix_view

  • vec1 – 第一个向量 raft::vector_view

  • vec2 – 第二个向量 raft::vector_view

  • out – 输出 raft::matrix_view

  • apply – 使用枚举类 raft::linalg::Apply 指定向量广播是沿矩阵的行还是列进行

  • op – 数学运算