【发布时间】:2020-07-23 21:24:35
【问题描述】:
我想做一个巨大的模拟,需要大约 1 TB 的数据来描述一堆相互作用的粒子(每个粒子都有不同的相互作用)。是否可以将这些数据存储在 C++ 数组中?
我可以访问 60 个节点的集群。每个节点有 2 个 48x16GB DDR4 的 CPU。因此,每个节点总共有 192 GB,或 11520 GB = 11 TB 集群上的总 RAM。您将如何在此集群上动态分配 1 TB 数组?
【问题讨论】:
-
从 C++ 的角度来看,1 TB 的数组理论上不是问题。假设最小元素大小(1 字节)所需的大小是 ~
1e+12,它在 x86 ~1.8e19上的size_t范围内。所以球在集群一侧。它使用什么虚拟化、什么操作系统以及它使用什么底层分布式系统来共享 RAM。 -
@bolov:无论每个元素有多大,1 TB 的数据都会消耗 1 TB 的地址空间(请参阅:“一磅羽毛有多重?”)。而 x86_64 上的地址空间远不及 1.8e19 字节,事实上,由于硬件限制(48 位地址,2.8e14 可寻址字节),它远远小于。
-
@JohnZwinck 我的分析是关于是否可以存储数组的大小(在
size_t中)。至于地址空间,有虚拟化和 ds 系统允许您为单个进程访问那么多内存,即使它分布在服务器节点上。 -
每个节点192GB这个数字是怎么来的? 48 批 16GB 为 768GB
标签: c++ memory-management heap-memory large-data hpc