我在google的环境中测试cu-graph的查询效率

 急流 |GPU 加速数据科学 (rapids.ai)icon-default.png?t=O83Ahttps://rapids.ai/#quick-start

使用rpids提供的实验环境,薅google羊毛,用AI直接编码

我做个2个应用,一个是用networks进行查询,一个是用cu-graph进行查询:

1000万节点、2000万条边,剔除重复边,

结论是:networks用了0.64秒,cu-graph用了0.29秒,大概快2倍。

上图如下:

# prompt: 并提供一个图的样本集(不少于10万个节点,20万条边,注意去重重复边)。然后用networks,遍历一遍所有节点的最长路径,你要测试可以正常运行后再输出。还要输出查询时间。

import cudf
import cugraph
import time
import random

# 生成一个包含100000个节点和200000条边的随机图,并去重重复边
num_nodes = 10000000
num_edges = 20000000

edges = set()
while len(edges) < num_edges:
    source_node = random.randint(0, num_nodes - 1)
    destination_node = random.randint(0, num_nodes - 1)
    if source_node != destination_node:
        edges.add((source_node, destination_node))

source_nodes = [edge[0] for edge in edges]
destination_nodes = [edge[1] for edge in edges]
edge_weights = [random.randint(1, 10) for _ in range(num_edges)]

graph_data = cudf.DataFrame({'src': source_nodes, 'dst': destination_nodes, 'weight': edge_weights})

# 创建一个cuGraph图
G = cugraph.Graph()
G.from_cudf_edgelist(graph_data, source='src', destination='dst', edge_attr='weight')

# 使用BFS算法遍历所有节点的最长路径
start_node = 0
start_time = time.time()

bfs_result = cugraph.bfs(G, start_node)

# 找出最长路径
max_distance = bfs_result['distance'].max()
longest_path_nodes = bfs_result[bfs_result['distance'] == max_distance]['vertex'].to_pandas().tolist()

end_time = time.time()

print(f"最长路径节点: {longest_path_nodes}")
print(f"最长路径长度: {max_distance}")
print(f"查询时间: {end_time - start_time} 秒")

结果networkx是用了0.6秒

最长路径长度: 9223372036854775807
查询时间: 0.6359281539916992 秒
# prompt: 并提供一个图的样本集(不少于10万个节点,20万条边,注意剔除重复边)。然后用cu-graph库BFS算法,遍历一遍所有节点的最长路径,你要测试可以正常运行后再输出。还要输出查询时间。

import cugraph
import cudf
import time

# 生成样本图数据
n_nodes = 10000000
n_edges = 20000000

source = cudf.Series(data=[i % n_nodes for i in range(n_edges)])
destination = cudf.Series(data=[(i * 7) % n_nodes for i in range(n_edges)])
edge_data = cudf.DataFrame({'src': source, 'dst': destination})

# 剔除重复边
edge_data = edge_data.drop_duplicates()

# 创建cuGraph图
G = cugraph.Graph()
G.from_cudf_edgelist(edge_data, source='src', destination='dst')

# BFS算法遍历
start_node = 0

start_time = time.time()
bfs_result = cugraph.bfs(G, start_node)
end_time = time.time()

# 输出最长路径(可以使用bfs_result中的distance列找到最远节点)
max_distance = bfs_result['distance'].max()
farthest_node = bfs_result[bfs_result['distance'] == max_distance]['vertex'].iloc[0]
print(f"最长路径距离为: {max_distance}")
print(f"最远节点为: {farthest_node}")


# 输出查询时间
print(f"查询时间: {end_time - start_time} 秒")

最长路径距离为: 9223372036854775807 最远节点为: 1 查询时间: 0.29384779930114746 秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值