如何解决了解 NetworkIt 中的内存使用情况
我正在使用 3BN+ 边图,因此我非常关注内存消耗。为了对内存消耗进行基准测试,我创建了一个二部图,在图的每一侧都有 10MN 节点,其中所有节点的度数为 1。我看到每条边的内存消耗大约为 0.5KB。这比我从以下信封数学背后的预期要高:
长度为 20MN = 20MN * size(node)的节点数组 所有邻接表占用的总空间 = 10MN * size(node) 所有权重列表占用的总空间 = 10MN * size(node)
因此,对于 8 字节的大小(节点),对于 10MN 边来说,大约为 40MN * 8 字节(0.3GB)。那将是每边 0.03kb。对于这种规模的图表,我看到的是总内存消耗为 4.5GB,或每条边 0.45kb。
我的问题是每个边缘是否需要 0.5kb 的内存消耗,如果是的话,我在上面的数学中遗漏了什么?这是否与预先分配邻接列表的方式有关?
以下是我用来衡量内存使用情况的脚本:
# Usage
# /path/to/this/script.py N_NODES DEGREE
import numpy as np
import networkit as nk
from memory_profiler import profile
EDGELIST_PATH = 'example_graph.edgelist'
def write_edgelist(n=10_000,d=2):
arrays = []
for i in range(d):
x = np.zeros([n,3],dtype=int)
x[:,0] = range(0,n)
x[:,1] = range(n,n * 2)
x[:,2] = np.random.randint(100,size=n)
np.random.shuffle(x[:,1])
arrays.append(x)
final = np.concatenate(arrays)
np.savetxt(EDGELIST_PATH,final,delimiter='\t',fmt='%i')
@profile
def read_edgelist():
edgelist_reader = nk.graphio.EdgeListReader(separator='\t',firstNode=0,continuous=False,directed=True
)
g = edgelist_reader.read(EDGELIST_PATH)
if __name__ == '__main__':
import sys
N = int(sys.argv[1])
D = int(sys.argv[2])
print(f"Running benchmark for {N=} and {D=}")
write_edgelist(n=N,d=D)
read_edgelist()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。