图函数#

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_offsetssubgraph_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 接收到的边数量的向量。