注意
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_major 或 raft::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_major 或 raft::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 – 数学运算