图函数#
- template<typename vertex_t, typename edge_t, bool multi_gpu>
std::enable_if_t<multi_gpu, std::tuple<rmm::device_uvector<vertex_t>, renumber_meta_t<vertex_t, edge_t, multi_gpu>>> renumber_edgelist(raft::handle_t const &handle, std::optional<rmm::device_uvector<vertex_t>> &&local_vertices, std::vector<vertex_t*> const &edgelist_srcs, std::vector<vertex_t*> const &edgelist_dsts, std::vector<edge_t> const &edgelist_edge_counts, std::optional<std::vector<std::vector<edge_t>>> const &edgelist_intra_partition_segment_offsets, bool store_transposed, bool do_expensive_check = false)#重新编号边列表 (多 GPU)
此函数假定顶点已预先洗牌到其目标进程,边已预先洗牌到其目标进程和边分区,分别使用 compute_gpu_id_from_vertex_t 和 compute_gpu_id_from_ext_edge_endpoints_t & compute_partition_id_from_ext_edge_endpoints_t 函数对象。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
local_vertices – 如果有效,则为图中待重新编号的整个顶点集合的一部分。此参数可用于包含孤立顶点。对每个顶点应用 compute_gpu_id_from_vertex_t 应返回本地 GPU ID,以便此函数工作(顶点应已预先洗牌)。
edgelist_srcs – 指向边源顶点 ID 的指针(每个分配给此进程的本地边分区对应一个指针)。源 ID 会原地更新([INOUT] 参数)。对每个(目的 ID,源 ID)对(如果 store_transposed = true)或(源 ID,目的 ID)对(如果 store_transposed = false)应用 compute_gpu_id_from_ext_edge_endpoints_t 函数应返回本地 GPU ID,以便此函数工作(边应已预先洗牌)。对每个(目的 ID,源 ID)对(如果 store_transposed = true)或(源 ID,目的 ID)对(如果 store_transposed = false)应用 compute_partition_id_from_ext_edge_endpoints_t 也应返回相应的边分区 ID。执行此操作的最佳方法是使用 shuffle_ext_vertex_pairs_to_local_gpu_by_edge_partitioning 和 groupby_and_count_edgelist_by_local_partition_id。
edgelist_dsts – 指向边目的顶点 ID 的指针(每个分配给此进程的本地边分区对应一个指针)。目的 ID 会原地更新([INOUT] 参数)。
edgelist_edge_counts – 边计数(每个分配给此进程的本地边分区对应一个计数)。
edgelist_intra_partition_segment_offsets – 如果有效,存储本地边分区内的分段偏移量;本地边分区可以通过将 compute_gpu_id_from_vertex_t 函数应用于边的次要顶点 ID 进一步分段。如果提供此可选信息,可进一步优化内存占用。
store_transposed – 如果重新编号的边将用于创建 store_transposed = true 的图,则应为 true。如果这些边将用于创建 store_transposed = false 的图,则应为 false。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
std::tuple<rmm::device_uvector<vertex_t>, renumber_meta_t<vertex_t, edge_t, multi_gpu>> 包含整个顶点集合(在多 GPU 中分配给此进程)的标签(重新编号前的顶点 ID)和重新编号时收集的元数据的元组。元数据包括顶点总数、边总数、存储图分区信息的 partition_t 对象、顶点分区段偏移量(顶点分区根据顶点度数被分成多个段),以及本地唯一主边和次边顶点 ID 的数量。预期此元数据将用于图构建和图原语。
- template<typename vertex_t, typename edge_t, bool multi_gpu>
std::enable_if_t<!multi_gpu, std::tuple<rmm::device_uvector<vertex_t>, renumber_meta_t<vertex_t, edge_t, multi_gpu>>> renumber_edgelist(raft::handle_t const &handle, std::optional<rmm::device_uvector<vertex_t>> &&vertices, vertex_t *edgelist_srcs, vertex_t *edgelist_dsts, edge_t num_edgelist_edges, bool store_transposed, bool do_expensive_check = false)#重新编号边列表 (单 GPU)
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 如果有效,图中待重新编号的顶点。此参数可用于包含孤立顶点。
edgelist_srcs – 指向边源顶点 ID 的指针。源 ID 会原地更新([INOUT] 参数)。
edgelist_dsts – 指向边目的顶点 ID 的指针。目的 ID 会原地更新([INOUT] 参数)。
num_edgelist_edges – 边列表中的边数。
store_transposed – 如果重新编号的边将用于创建 store_transposed = true 的图,则应为 true。如果这些边将用于创建 store_transposed = false 的图,则应为 false。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
std::tuple<rmm::device_uvector<vertex_t>, renumber_meta_t<vertex_t, edge_t, multi_gpu>> 包含整个顶点集合的标签(重新编号前的顶点 ID)和重新编号时收集的元数据的元组。元数据包括顶点分区段偏移量(顶点分区根据顶点度数被分成多个段)。预期此元数据将用于图构建和图原语。
- template<typename vertex_t, bool multi_gpu>
void renumber_ext_vertices(raft::handle_t const &handle, vertex_t *vertices, size_t num_vertices, vertex_t const *renumber_map_labels, vertex_t local_int_vertex_first, vertex_t local_int_vertex_last, bool do_expensive_check = false)#根据提供的
renumber_map_labels
,将外部顶点重新编号为内部顶点。注意 cugraph::invalid_id<vertex_t>::value 保持不变。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 指向待重新编号的顶点。输入的外部顶点会原地重新编号为内部顶点。
num_vertices – 待重新编号的顶点数。
renumber_map_labels – 指向对应于范围 [
local_int_vertex_first
,local_int_vertex_last
) 内内部顶点的外部顶点。local_int_vertex_first – 第一个本地内部顶点(包含,在多 GPU 中分配给此进程)。
local_int_vertex_last – 最后一个本地内部顶点(不包含,在多 GPU 中分配给此进程)。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。
- template<typename vertex_t>
void unrenumber_local_int_vertices(raft::handle_t const &handle, vertex_t *vertices, size_t num_vertices, vertex_t const *renumber_map_labels, vertex_t local_int_vertex_first, vertex_t local_int_vertex_last, bool do_expensive_check = false)#根据提供的
renumber_map_labels
,将本地内部顶点取消编号为外部顶点。注意 cugraph::invalid_id<vertex_t>::value 保持不变。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 指向待取消编号的本地内部顶点。每个输入元素应在 [
local_int_vertex_first
,local_int_vertex_last) 内。输入的内部顶点会原地取消编号为外部顶点。
num_vertices – 待取消编号的顶点数。
renumber_map_labels – 指向对应于范围 [
local_int_vertex_first
,local_int_vertex_last
) 内内部顶点的外部顶点。local_int_vertex_first – 第一个本地内部顶点(包含,在多 GPU 中分配给此进程)。
local_int_vertex_last – 最后一个本地内部顶点(不包含,在多 GPU 中分配给此进程)。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。
- template<typename vertex_t, bool multi_gpu>
void unrenumber_int_vertices(raft::handle_t const &handle, vertex_t *vertices, size_t num_vertices, vertex_t const *renumber_map_labels, raft::host_span<vertex_t const> vertex_partition_range_lasts, bool do_expensive_check = false)#根据提供的
renumber_map_labels
,将(可能非本地的)内部顶点取消编号为外部顶点。注意 cugraph::invalid_id<vertex_t>::value 保持不变。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 指向待取消编号的内部顶点。输入的内部顶点会原地取消编号为外部顶点。
num_vertices – 待取消编号的顶点数。
renumber_map_labels – 指向对应于范围 [
local_int_vertex_first
,local_int_vertex_last
) 内内部顶点的外部顶点。vertex_partition_range_lasts – 最后一个本地内部顶点(不包含,在多 GPU 中分配给每个进程)。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。
- template<typename vertex_t, bool store_transposed, bool multi_gpu>
std::enable_if_t<multi_gpu, void> unrenumber_local_int_edges(raft::handle_t const &handle, std::vector<vertex_t*> const &edgelist_srcs, std::vector<vertex_t*> const &edgelist_dsts, std::vector<size_t> const &edgelist_edge_counts, vertex_t const *renumber_map_labels, raft::host_span<vertex_t const> vertex_partition_range_lasts, std::optional<std::vector<std::vector<size_t>>> const &edgelist_intra_partition_segment_offsets, bool do_expensive_check = false)#根据提供的
renumber_map_labels
,将本地边的内部源和目的 ID 取消编号为外部 ID (多 GPU)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。@params edgelist_srcs 指向待取消编号的本地内部源顶点 ID 的指针(每个分配给此进程的本地边分区对应一个指针)。输入的源顶点 ID 会原地取消编号为外部 ID。@params edgelist_dsts 指向待取消编号的本地内部目的顶点 ID 的指针(每个分配给此进程的本地边分区对应一个指针)。输入的目的顶点 ID 会原地取消编号为外部 ID。
edgelist_edge_counts – 边计数(每个分配给此进程的本地边分区对应一个计数)。
renumber_map_labels – 指向对应于分配给此进程的范围内的内部顶点的外部顶点。
vertex_partition_range_lasts – 最后一个本地内部顶点(不包含,在多 GPU 中分配给每个进程)。
edgelist_intra_partition_segment_offsets – 如果有效,存储本地边分区内的分段偏移量;本地边分区可以通过将 compute_gpu_id_from_vertex_t 函数应用于边的次要顶点 ID 进一步分段。如果提供此可选信息,可进一步优化内存占用。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。
- template<typename vertex_t, bool store_transposed, bool multi_gpu>
std::enable_if_t<!multi_gpu, void> unrenumber_local_int_edges(raft::handle_t const &handle, vertex_t *edgelist_srcs, vertex_t *edgelist_dsts, size_t num_edgelist_edges, vertex_t const *renumber_map_labels, vertex_t num_vertices, bool do_expensive_check = false)#根据提供的
renumber_map_labels
,将本地边的内部源和目的 ID 取消编号为外部 ID (单 GPU)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。@params edgelist_srcs 指向待取消编号的本地内部源顶点 ID 的指针。输入的源顶点 ID 会原地取消编号为外部 ID。@params edgelist_dsts 指向待取消编号的本地内部目的顶点 ID 的指针。输入的目的顶点 ID 会原地取消编号为外部 ID。
num_edgelist_edges – 边列表中的边数。
renumber_map_labels – 指向对应于内部顶点的外部顶点。
num_vertices – 待取消编号的顶点数。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。
- template<typename vertex_t, bool multi_gpu>
void renumber_local_ext_vertices(raft::handle_t const &handle, vertex_t *vertices, size_t num_vertices, vertex_t const *renumber_map_labels, vertex_t local_int_vertex_first, vertex_t local_int_vertex_last, bool do_expensive_check = false)#根据提供的
renumber_map_labels
,将本地外部顶点重新编号为内部顶点。注意 cugraph::invalid_id<vertex_t>::value 保持不变。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 指向待重新编号的顶点。输入的外部顶点会原地重新编号为内部顶点。
num_vertices – 待重新编号的顶点数。
renumber_map_labels – 指向对应于范围 [
local_int_vertex_first
,local_int_vertex_last
) 内内部顶点的外部顶点。local_int_vertex_first – 第一个本地内部顶点(包含,在多 GPU 中分配给此进程)。
local_int_vertex_last – 最后一个本地内部顶点(不包含,在多 GPU 中分配给此进程)。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>> decompress_to_edgelist(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, std::optional<edge_property_view_t<edge_t, edge_t const*>> edge_id_view, std::optional<edge_property_view_t<edge_t, edge_type_t const*>> edge_type_view, std::optional<raft::device_span<vertex_t const>> renumber_map, bool do_expensive_check = false)#从图视图对象构建边列表。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 待解压的图的图视图对象。
edge_weight_view – 可选视图对象,包含
graph_view
的边权重。edge_id_view – 可选视图对象,包含
graph_view
的边 ID。edge_type_view – 可选视图对象,包含
graph_view
的边类型。renumber_map – 如果有效,根据提供的
renumber_map
返回重新编号的边列表。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
包含边源、边目的、(可选) 边权重(如果
edge_weight_view.has_value()
为 true)和 (可选) 边 ID(如果edge_id_view.has_value()
为 true)的元组。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename edge_time_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<edge_time_t>>, std::optional<rmm::device_uvector<edge_time_t>>> symmetrize_edgelist(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_start_times, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_end_times, bool reciprocal)#对称化边列表。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型标识符的类型。必须是整数类型。
edge_time_t – 边时间的类型。必须是整数类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
edgelist_srcs – 边源顶点ID向量。如果是多 GPU,对每条边应用 compute_gpu_id_from_ext_edge_endpoints_t 应返回本地 GPU ID 以使此函数正常工作(边应预先混洗)。
edgelist_dsts – 边目标顶点ID向量。
edgelist_weights – 边权重向量。
edgelist_edge_ids – 边 ID 向量
edgelist_edge_types – 边类型向量
edgelist_edge_start_times – 边开始时间向量
edgelist_edge_end_times – 边结束时间向量
reciprocal – 标志,指示是保留(如果设置为
false
)还是丢弃(如果设置为true
)仅单向出现的边。- 返回值:
对称化后的源顶点、目标顶点、可选权重、可选边 ID、可选边类型、可选边开始时间和可选边结束时间的元组
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, weight_t>>, std::optional<rmm::device_uvector<vertex_t>>> symmetrize_graph(raft::handle_t const &handle, graph_t<vertex_t, edge_t, store_transposed, multi_gpu> &&graph, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, weight_t>> &&edge_weights, std::optional<rmm::device_uvector<vertex_t>> &&renumber_map, bool reciprocal = false, bool do_expensive_check = false)#对称化输入图。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph – 要对称化的图对象。
edge_weights – 可选的拥有对象,保存
graph
的边权重。renumber_map – 重新编号映射,用于从重新编号的顶点 ID 恢复原始顶点 ID。如果是多 GPU,此映射应有效。
reciprocal – 如果为 true,仅当反向边也存在时才保留边。如果为 false,则保留(并对称化)所有仅单向出现的边。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
返回对称化后的图,保存边权重的拥有对象(如果
edge_weights.has_value()
为 true)和新的重新编号映射(如果renumber_map.has_value()
为 true,用于恢复原始顶点 ID)。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, weight_t>>, std::optional<rmm::device_uvector<vertex_t>>> transpose_graph(raft::handle_t const &handle, graph_t<vertex_t, edge_t, store_transposed, multi_gpu> &&graph, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, weight_t>> &&edge_weights, std::optional<rmm::device_uvector<vertex_t>> &&renumber_map, bool do_expensive_check = false)#转置输入图。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph – 要转置的图对象。
edge_weights – 可选的拥有对象,保存
graph
的边权重。renumber_map – 重新编号映射,用于从重新编号的顶点 ID 恢复原始顶点 ID。如果是多 GPU,此映射应有效。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
返回转置后的图,保存边权重的拥有对象(如果
edge_weights.has_value()
为 true)和新的重新编号映射(如果renumber_map.has_value()
为 true,用于恢复原始顶点 ID)。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, !store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, !store_transposed, multi_gpu, weight_t>>, std::optional<rmm::device_uvector<vertex_t>>> transpose_graph_storage(raft::handle_t const &handle, graph_t<vertex_t, store_transposed, multi_gpu> &&graph, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, weight_t>> &&edge_weights, std::optional<rmm::device_uvector<vertex_t>> &&renumber_map, bool do_expensive_check = false)#转置存储格式(实际图拓扑没有变化)。
在 SG 中,在 CSR 和 CSC 之间转换。在多 GPU 中,目前在 CSR + DCSR 混合格式和 CSC + DCSC 混合格式之间转换(但多 GPU 中的内部表示可能会发生变化)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph – 要转置其存储格式的图对象。
edge_weights – 可选的拥有对象,保存
graph
的边权重。renumber_map – 重新编号映射,用于从重新编号的顶点 ID 恢复原始顶点 ID。如果是多 GPU,此映射应有效。
do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
std::tuple<graph_t<vertex_t, edge_t, weight_t, !store_transposed, multi_gpu>,
- 返回值:
返回存储格式转置后的图,保存边权重的拥有对象(如果
edge_weights.has_value()
为 true)和新的重新编号映射(如果renumber_map.has_value()
为 true,用于恢复原始顶点 ID)。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, weight_t>>, std::optional<rmm::device_uvector<vertex_t>>> coarsen_graph(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, vertex_t const *labels, bool renumber, bool do_expensive_check = false)#计算粗化图。
将具有相同标签的顶点聚合成输出粗化图中的一个新顶点。粗化图中的多重边会合并为一条边,其权重等于多重边的权重之和。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 要粗化的输入图的图视图对象。
edge_weight_view – 可选视图对象,包含
graph_view
的边权重。labels – 用于粗化的顶点标签(在多 GPU 中分配给此进程)。
renumber – 指示是否重新编号顶点(如果
multi_gpu
为 true,则必须为 true)。强烈建议不要将renumber
设置为 false,除非是为了测试,因为这会对性能和内存占用产生负面影响。如果renumber
设置为 true,则labels
应仅包含非负整数,并且假设顶点数是labels
中的最大元素(在多 GPU 的所有 GPU 上进行缩减)+ 1。如果labels
中唯一元素的数量(在多 GPU 的所有 GPU 上)远小于假设的顶点数,这可能会产生许多孤立顶点。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
包含粗化图、粗化图边权重(如果
edge_weight_view.has_value()
为 true)和重新编号映射(如果renumber
为 true)的元组。
- template<typename vertex_t, bool multi_gpu>
void relabel(raft::handle_t const &handle, std::tuple<vertex_t const*, vertex_t const*> old_new_label_pairs, vertex_t num_label_pairs, vertex_t *labels, vertex_t num_labels, bool skip_missing_labels, bool do_expensive_check = false)#将旧标签重新标记为新标签。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
old_new_label_pairs – 旧标签及其对应新标签的对(每个进程仅包含全部旧标签及其对应新标签的一部分;分区可以是任意的)。
num_label_pairs – (旧, 新) 标签对的数量。
labels – 要重新标记的标签。最初包含旧标签。旧标签会原地更新为新标签 ([INOUT] 参数)。
num_labels – 要重新标记的标签数量。
skip_missing_labels – 指示处理缺失标签的行为(
labels
中包含old_new_label_pairs
中缺失的旧标签)。如果设置为 true,则跳过缺失元素(不重新标记)。如果设置为 false,则行为未定义(如果do_expensive_check
设置为 true,此函数将抛出异常)。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
rmm::device_uvector<vertex_t> 与
old_labels
对应的新标签。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, rmm::device_uvector<size_t>> extract_induced_subgraphs(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, raft::device_span<size_t const> subgraph_offsets, raft::device_span<vertex_t const> subgraph_vertices, bool do_expensive_check = false)#提取诱导子图。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 图视图对象,我们从
graph_view
中提取诱导子图。edge_weight_view – 可选视图对象,包含
graph_view
的边权重。subgraph_offsets – 指向子图顶点偏移量的 Span。
subgraph_vertices – 指向子图顶点的 Span。
subgraph_offsets
和subgraph_vertices
为要提取的subgraph_offsets.size()
- 1 个子图提供顶点集合(或在多 GPU 中的本地顶点集合)。对于要提取的第 i 个子图,可以通过访问subgraph_vertices
的一个子集来提取(本地)顶点集合,其中子集的范围是 [subgraph_offsetes
[i],subgraph_offsets
[i + 1])。在多 GPU 中,每个子图的顶点集合分布在多个 GPU 中,每个 GPU 仅持有属于该 GPU 的本地顶点。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
包含边主(如果
store_transposed
为 true,则为目标顶点;否则为源顶点)、边次(如果store_transposed
为 true,则为源顶点;否则为目标顶点)顶点、边权重(如果edge_weight_view.has_value()
为 true)以及每个诱导子图的边偏移量(大小 == num_subgraphs + 1)的四元组。边主顶点和边次顶点的大小是 edge_offsets[num_subgraphs]。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_type_t>>, std::optional<rmm::device_uvector<vertex_t>>> create_graph_from_edgelist(raft::handle_t const &handle, std::optional<rmm::device_uvector<vertex_t>> &&vertices, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, graph_properties_t graph_properties, bool renumber, bool do_expensive_check = false)#从给定的边列表(包含可选的边 ID 和类型)创建图(包含可选的顶点列表)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型,目前仅支持 int32_t。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 如果有效,则是图中待重新编号的全部顶点集合的一部分。此参数可用于包含孤立顶点。如果
renumber
为 false 且vertices
有效,则vertices
元素应是从 0 开始的连续整数。如果是多 GPU,对每个顶点应用 compute_gpu_id_from_vertex_t 应返回本地 GPU ID,此函数才能工作(顶点应预先打乱)。edgelist_srcs – 边源顶点ID向量。如果是多 GPU,对每条边应用 compute_gpu_id_from_ext_edge_endpoints_t 应返回本地 GPU ID 以使此函数正常工作(边应预先混洗)。
edgelist_dsts – 边目标顶点ID向量。
edgelist_weights – 边的权重值向量。
edgelist_edge_ids – 边的 edge_id 值向量。
edgelist_edge_types – 边的 edge_type 值向量。
graph_properties – 输入(可选顶点列表和)边列表表示的图属性。
renumber – 指示是否重新编号顶点(如果
multi_gpu
为 true,则必须为 true)。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
包含生成的图和存储提供的边属性的可选 edge_property_t 对象以及重新编号映射(如果
renumber
为 true)的元组。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename edge_time_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, weight_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_type_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_time_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_time_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_time_t>>, std::optional<rmm::device_uvector<vertex_t>>> create_graph_from_edgelist(raft::handle_t const &handle, std::optional<rmm::device_uvector<vertex_t>> &&vertices, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_start_times, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_end_times, graph_properties_t graph_properties, bool renumber, bool do_expensive_check = false)#从给定的边列表(包含可选的边 ID 和类型)创建图(包含可选的顶点列表)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型,目前仅支持 int32_t。
edge_time_t – 边时间的类型。必须是整数类型。
store_transposed – 指示在存储边时是使用源(如果为 false)还是目标(如果为 true)作为二维稀疏矩阵的主要索引的标志。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 如果有效,则是图中待重新编号的全部顶点集合的一部分。此参数可用于包含孤立顶点。如果
renumber
为 false 且vertices
有效,则vertices
元素应是从 0 开始的连续整数。如果是多 GPU,对每个顶点应用 compute_gpu_id_from_vertex_t 应返回本地 GPU ID,此函数才能工作(顶点应预先打乱)。edgelist_srcs – 边源顶点ID向量。如果是多 GPU,对每条边应用 compute_gpu_id_from_ext_edge_endpoints_t 应返回本地 GPU ID 以使此函数正常工作(边应预先混洗)。
edgelist_dsts – 边目标顶点ID向量。
edgelist_weights – 边的权重值向量。
edgelist_edge_ids – 边的 edge_id 值向量。
edgelist_edge_types – 边的 edge_type 值向量。
edgelist_edge_start_times – 边的起始时间值向量
edgelist_edge_end_times – 边的结束时间值向量
graph_properties – 输入(可选顶点列表和)边列表表示的图属性。
renumber – 指示是否重新编号顶点(如果
multi_gpu
为 true,则必须为 true)。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
包含生成的图和存储提供的边属性的可选 edge_property_t 对象以及重新编号映射(如果
renumber
为 true)的元组。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_type_t>>, std::optional<rmm::device_uvector<vertex_t>>> create_graph_from_edgelist(raft::handle_t const &handle, std::optional<rmm::device_uvector<vertex_t>> &&vertices, std::vector<rmm::device_uvector<vertex_t>> &&edgelist_srcs, std::vector<rmm::device_uvector<vertex_t>> &&edgelist_dsts, std::optional<std::vector<rmm::device_uvector<weight_t>>> &&edgelist_weights, std::optional<std::vector<rmm::device_uvector<edge_t>>> &&edgelist_edge_ids, std::optional<std::vector<rmm::device_uvector<edge_type_t>>> &&edgelist_edge_types, graph_properties_t graph_properties, bool renumber, bool do_expensive_check = false)#从给定的边列表(包含可选的边 ID 和类型)创建图(包含可选的顶点列表)。
此版本接受分块的边列表作为输入(例如,来自多个文件的边数据)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型,目前仅支持 int32_t。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 如果有效,则是图中待重新编号的全部顶点集合的一部分。此参数可用于包含孤立顶点。如果
renumber
为 false 且vertices
有效,则vertices
元素应是从 0 开始的连续整数。如果是多 GPU,对每个顶点应用 compute_gpu_id_from_vertex_t 应返回本地 GPU ID,此函数才能工作(顶点应预先打乱)。edgelist_srcs – 边源顶点 ID 的向量。在多 GPU 情况下,对每条边应用
compute_gpu_id_from_ext_edge_endpoints_t
应该返回本地 GPU ID,以便此函数正常工作(边应预先洗牌/打乱)。edgelist_dsts – 边目标顶点 ID 的向量。
edgelist_weights – 边的权重值向量。
edgelist_edge_ids – 边的
edge_id
值向量。edgelist_edge_types – 边的
edge_type
值向量。graph_properties – 输入(可选顶点列表和)边列表表示的图属性。
renumber – 指示是否重新编号顶点(如果
multi_gpu
为 true,则必须为 true)。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
包含生成的图和存储提供的边属性的可选 edge_property_t 对象以及重新编号映射(如果
renumber
为 true)的元组。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename edge_time_t, bool store_transposed, bool multi_gpu>
std::tuple<graph_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, weight_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_type_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_time_t>>, std::optional<edge_property_t<graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu>, edge_time_t>>, std::optional<rmm::device_uvector<vertex_t>>> create_graph_from_edgelist(raft::handle_t const &handle, std::optional<rmm::device_uvector<vertex_t>> &&vertices, std::vector<rmm::device_uvector<vertex_t>> &&edgelist_srcs, std::vector<rmm::device_uvector<vertex_t>> &&edgelist_dsts, std::optional<std::vector<rmm::device_uvector<weight_t>>> &&edgelist_weights, std::optional<std::vector<rmm::device_uvector<edge_t>>> &&edgelist_edge_ids, std::optional<std::vector<rmm::device_uvector<edge_type_t>>> &&edgelist_edge_types, std::optional<std::vector<rmm::device_uvector<edge_time_t>>> &&edgelist_edge_start_times, std::optional<std::vector<rmm::device_uvector<edge_time_t>>> &&edgelist_edge_end_times, graph_properties_t graph_properties, bool renumber, bool do_expensive_check = false)#从给定的边列表(包含可选的边 ID、类型、开始和结束时间)创建图(以及可选的顶点列表)。
此版本接受分块的边列表作为输入(例如,来自多个文件的边数据)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型,目前仅支持 int32_t。
edge_time_t – 边时间的类型。必须是整数类型。
store_transposed – 指示在存储边时是使用源(如果为 false)还是目标(如果为 true)作为二维稀疏矩阵的主要索引的标志。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
vertices – 如果有效,则是图中待重新编号的全部顶点集合的一部分。此参数可用于包含孤立顶点。如果
renumber
为 false 且vertices
有效,则vertices
元素应是从 0 开始的连续整数。如果是多 GPU,对每个顶点应用 compute_gpu_id_from_vertex_t 应返回本地 GPU ID,此函数才能工作(顶点应预先打乱)。edgelist_srcs – 边源顶点 ID 的向量。在多 GPU 情况下,对每条边应用
compute_gpu_id_from_ext_edge_endpoints_t
应该返回本地 GPU ID,以便此函数正常工作(边应预先洗牌/打乱)。edgelist_dsts – 边目标顶点 ID 的向量。
edgelist_weights – 边的权重值向量。
edgelist_edge_ids – 边的
edge_id
值向量。edgelist_edge_types – 边的
edge_type
值向量。edgelist_edge_start_times – 边的起始时间值向量
edgelist_edge_end_times – 边的结束时间值向量
graph_properties – 输入(可选顶点列表和)边列表表示的图属性。
renumber – 指示是否重新编号顶点(如果
multi_gpu
为 true,则必须为 true)。do_expensive_check – 用于运行昂贵输入参数检查的标志(如果设置为
true
)。- 返回值:
包含生成的图和存储提供的边属性的可选 edge_property_t 对象以及重新编号映射(如果
renumber
为 true)的元组。
- template<typename vertex_t, typename edge_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>> get_two_hop_neighbors(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<raft::device_span<vertex_t const>> start_vertices)#查找图中的所有 2 跳邻居。
在输入图中查找顶点对,使得每对顶点通过长度为两跳的路径连接。
- 抛出:
cugraph::logic_error – 发生错误时。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph – 输入图对象
start_vertices – 用于查找两跳邻居的可选起始顶点列表
- 返回值:
包含相距两跳的顶点对的元组。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
rmm::device_uvector<weight_t> compute_in_weight_sums(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, edge_property_view_t<edge_t, weight_t const*> edge_weight_view)#计算每个顶点的入边权重总和。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 输入图的图视图对象,用于计算每个顶点的入边权重总和。
edge_weight_view – 保存 graph_view 的边权重的视图对象。
- 返回值:
每个顶点的入边权重总和。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
rmm::device_uvector<weight_t> compute_out_weight_sums(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, edge_property_view_t<edge_t, weight_t const*> edge_weight_view)#计算每个顶点的出边权重总和。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 输入图的图视图对象,用于计算每个顶点的出边权重总和。
edge_weight_view – 保存 graph_view 的边权重的视图对象。
- 返回值:
每个顶点的出边权重总和。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
weight_t compute_max_in_weight_sum(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, edge_property_view_t<edge_t, weight_t const*> edge_weight_view)#计算每个顶点的最大入边权重总和。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 输入图的图视图对象,用于计算每个顶点的最大入边权重总和。
edge_weight_view – 保存 graph_view 的边权重的视图对象。
- 返回值:
每个顶点的最大入边权重总和。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
weight_t compute_max_out_weight_sum(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, edge_property_view_t<edge_t, weight_t const*> edge_weight_view)#计算每个顶点的最大出边权重总和。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 输入图的图视图对象,用于计算每个顶点的最大出边权重总和。
edge_weight_view – 保存 graph_view 的边权重的视图对象。
- 返回值:
每个顶点的最大出边权重总和。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
weight_t compute_total_edge_weight(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, edge_property_view_t<edge_t, weight_t const*> edge_weight_view)#对整组边的权重求和。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 输入图的图视图对象,用于对边权重求和。
edge_weight_view – 保存 graph_view 的边权重的视图对象。
- 返回值:
整组边的权重总和。
- template<typename vertex_t, typename edge_t, bool store_transposed, bool multi_gpu>
rmm::device_uvector<vertex_t> select_random_vertices(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<raft::device_span<vertex_t const>> given_set, raft::random::RngState &rng_state, size_t select_count, bool with_replacement, bool sort_vertices, bool do_expensive_check = false)#选择随机顶点。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
store_transposed – 标志,指示是否使用源(如果为 false)或目的(如果为 true)作为主索引,通过二维稀疏矩阵存储边。
multi_gpu – 指示模板实例化是针对单 GPU (false) 还是多 GPU (true) 的标志。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 输入图的图视图对象,用于从中选择随机顶点。
given_set – 要从中采样的分布式集合。如果未指定 given_set,则从 graph_view 提供的整个顶点范围中采样。
rng_state – 保存伪随机数生成器状态的 RngState 实例。
select_count – 要从图中选择的顶点数量
with_replacement – 如果为 true,则有放回采样;如果为 false,则无放回采样
sort_vertices – 如果为 true,则返回排序后的顶点(按升序)。
- 返回值:
所选顶点的设备向量。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename edge_time_t>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<edge_time_t>>, std::optional<rmm::device_uvector<edge_time_t>>>> remove_self_loops(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_start_times, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_end_times)#从边列表中移除自环。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。当前支持 float 和 double。
edge_type_t – 边类型的类型。需要是整数类型。
edge_time_t – 边时间的类型。必须是整数类型。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
edgelist_srcs – 源顶点 ID 列表
edgelist_dsts – 目标顶点 ID 列表
edgelist_weights – 可选的边权重列表
edgelist_edge_ids – 可选的边 ID 列表
edgelist_edge_types – 可选的边类型列表
edgelist_edge_start_times – 可选的边开始时间列表
edgelist_edge_end_times – 可选的边结束时间列表
- 返回值:
存储边源、目标、可选权重、可选边 ID、可选边类型、可选边开始时间和可选边结束时间的向量元组。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename edge_time_t>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<edge_time_t>>, std::optional<rmm::device_uvector<edge_time_t>>>> remove_multi_edges(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_start_times, std::optional<rmm::device_uvector<edge_time_t>> &&edgelist_edge_edge_times, bool keep_min_value_edge = false)#移除多重边时只保留其中一条边。
当存在多重边时,只会保留其中一条边。如果
keep_min_value_edge
为 false,将在多重边中的边中选择任意一条边。如果keep_min_value_edge
为 true,将选择值最小的边。首先比较边权重(如果edgelist_weights.has_value()
为 true);其次比较边 ID(如果edgelist_edge_ids.has_value()
为 true);最后比较边类型(如果edgelist_edge_types.has_value()
为 true)。在 MG(多 GPU)环境中,假定边已经被洗牌到正确的 GPU 上,在这种情况下,任何多重边都将在同一个 GPU 上。
此版本接受单个块中的边。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。当前支持 float 和 double。
edge_type_t – 边类型的类型。需要是整数类型。
edge_time_t – 边时间的类型。必须是整数类型。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
edgelist_srcs – 源顶点 ID 列表
edgelist_dsts – 目标顶点 ID 列表
edgelist_weights – 可选的边权重列表
edgelist_edge_ids – 可选的边 ID 列表
edgelist_edge_types – 可选的边类型列表
edgelist_edge_start_times – 可选的边开始时间列表
edgelist_edge_end_times – 可选的边结束时间列表
keep_min_value_edge – 标志,指示是在多重边中保留任意一条边 (false) 还是保留值最小的边 (true)。仅当
edgelist_weights.has_value()
|edgelist_edge_ids.has_value()
|edgelist_edge_types.has_value()
|edgelist_edge_start_times.has_value()
|edgelist_edge_end_times.has_value()is
为 true 时相关。如果每条边具有多个属性值,则按权重(如果有效)、边 ID(如果有效)、边类型(如果有效)、边开始时间(如果有效)和边结束时间(如果有效)的顺序比较边属性值。将其设置为 true 会产生性能开销,因为它需要更多比较。- 返回值:
存储边源、目标、可选权重、可选边 ID、可选边类型、可选边开始时间和可选边结束时间的 rmm::device_uvector 对象元组。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename edge_time_t>
std::tuple<std::vector<rmm::device_uvector<vertex_t>>, std::vector<rmm::device_uvector<vertex_t>>, std::optional<std::vector<rmm::device_uvector<weight_t>>>, std::optional<std::vector<rmm::device_uvector<edge_t>>>, std::optional<std::vector<rmm::device_uvector<edge_type_t>>>, std::optional<std::vector<rmm::device_uvector<edge_time_t>>>, std::optional<std::vector<rmm::device_uvector<edge_time_t>>>> remove_multi_edges(raft::handle_t const &handle, std::vector<rmm::device_uvector<vertex_t>> &&edgelist_srcs, std::vector<rmm::device_uvector<vertex_t>> &&edgelist_dsts, std::optional<std::vector<rmm::device_uvector<weight_t>>> &&edgelist_weights, std::optional<std::vector<rmm::device_uvector<edge_t>>> &&edgelist_edge_ids, std::optional<std::vector<rmm::device_uvector<edge_type_t>>> &&edgelist_edge_types, std::optional<std::vector<rmm::device_uvector<edge_time_t>>> &&edgelist_edge_start_times, std::optional<std::vector<rmm::device_uvector<edge_time_t>>> &&edgelist_edge_edge_times, bool keep_min_value_edge = false)#移除多重边时只保留其中一条边。
当存在多重边时,只会保留其中一条边。如果
keep_min_value_edge
为 false,将在多重边中的边中选择任意一条边。如果keep_min_value_edge
为 true,将选择值最小的边。首先比较边权重(如果edgelist_weights.has_value()
为 true);其次比较边 ID(如果edgelist_edge_ids.has_value()
为 true);最后比较边类型(如果edgelist_edge_types.has_value()
为 true)。在 MG(多 GPU)环境中,假定边已经被洗牌到正确的 GPU 上,在这种情况下,任何多重边都将在同一个 GPU 上。
此版本接受多个块中的边。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。当前支持 float 和 double。
edge_type_t – 边类型的类型。需要是整数类型。
edge_time_t – 边时间的类型。必须是整数类型。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
edgelist_srcs – 源顶点 ID 列表向量(每个边块一个向量元素)
edgelist_dsts – 目标顶点 ID 列表向量(每个边块一个向量元素)
edgelist_weights – 可选的边权重列表向量(每个边块一个向量元素)
edgelist_edge_ids – 可选的边 ID 列表向量(每个边块一个向量元素)
edgelist_edge_types – 可选的边类型列表向量(每个边块一个向量元素)
edgelist_edge_start_times – 可选的边开始时间列表向量(每个边块一个向量元素)
edgelist_edge_end_times – 可选的边结束时间列表向量(每个边块一个向量元素)
keep_min_value_edge – 标志,指示是在多重边中保留任意一条边 (false) 还是保留值最小的边 (true)。仅当
edgelist_weights.has_value()
|edgelist_edge_ids.has_value()
|edgelist_edge_types.has_value()
|edgelist_edge_start_times.has_value()
|edgelist_edge_end_times.has_value()is
为 true 时相关。如果每条边具有多个属性值,则按权重(如果有效)、边 ID(如果有效)、边类型(如果有效)、边开始时间(如果有效)和边结束时间(如果有效)的顺序比较边属性值。将其设置为 true 会产生性能开销,因为它需要更多比较。- 返回值:
std::vector 对象的元组,其中包含 rmm::device_uvector 对象(每个 std::vector 的 device_uvector 对象数量 = 边块数量),存储边源、目标、可选权重、可选边 ID、可选边类型、可选边开始时间和可选边结束时间。
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename edge_time_t>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<edge_time_t>>, std::optional<rmm::device_uvector<edge_time_t>>, std::vector<size_t>> shuffle_ext_edges(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edge_srcs, rmm::device_uvector<vertex_t> &&edge_dsts, std::optional<rmm::device_uvector<weight_t>> &&edge_weights, std::optional<rmm::device_uvector<edge_t>> &&edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edge_types, std::optional<rmm::device_uvector<edge_time_t>> &&edge_start_times, std::optional<rmm::device_uvector<edge_time_t>> &&edge_end_times, bool store_transposed)#通过边分区将外部边洗牌到拥有的 GPU 上
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。当前支持 float 和 double。
edge_type_t – 边类型的类型。需要是整数类型,目前只支持 int32_t。
edge_time_t – 边时间的类型。必须是整数类型。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法所需的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
edge_srcs – 源顶点 ID 向量
edge_dsts – 目标顶点 ID 向量
edge_weights – 可选的边权重向量
edge_ids – 可选的边 ID 向量
edge_types – 可选的边类型向量
edge_start_times – 可选的边开始时间向量
edge_end_times – 可选的边结束时间向量
store_transposed – 如果洗牌后的边将与 cugraph::graph_t 对象(store_tranposed = true)一起使用,则应为 true。否则应为 false。
- 返回值:
存储映射到此 GPU 的边源、目标、可选权重、可选边 ID、可选边类型、可选边开始时间和可选边结束时间的向量元组,以及存储从每个 GPU 接收到的边数量的向量。