我需要分配 10^15 的内存来存储可以是 long long 类型的整数。如果我使用数组并声明类似
long long a[1000000000000000];
那永远行不通。那么我如何分配如此大量的内存。
我需要分配 10^15 的内存来存储可以是 long long 类型的整数。如果我使用数组并声明类似
long long a[1000000000000000];
那永远行不通。那么我如何分配如此大量的内存。
真正的大数组通常不是内存的工作,更多的是磁盘。每个 64 位的10 15 个数组元素(我认为)是 8 PB。目前你可以花大约 15 美元购买 8G 内存片,因此,即使你的机器可以处理那么多内存或地址空间,你也要花费大约 1500 万美元。
此外,随着即将推出的 DDR4 时钟频率高达约 4GT/s(千兆传输),即使每次传输都是 64 位值,仅将该阵列初始化为零仍需要大约一百万秒。你真的想在你的代码开始做任何有用的事情之前等待十一天半吗?
而且,即使你走磁盘路线,那也是相当多的。(大约)每 TB 50 美元,您仍然需要 400,000 美元,而且您可能必须提供自己的软件来以某种方式管理这 8,000 个磁盘。而且我什至不会考虑弄清楚初始化磁盘上的阵列需要多长时间。
您可能需要考虑重新表述您的问题以指示实际问题,而不是您当前拥有的问题,即建议的解决方案。可能您根本不需要那么多存储空间。
例如,如果您正在谈论一个数组,其中许多值都为零,那么稀疏数组是一种方法。
你不能。你没有所有这些记忆,而且你暂时不会拥有它。简单的。
编辑:如果你真的想处理不适合你的 RAM 的数据,你可以使用一些处理大容量存储数据的库,比如stxxl,但它的工作速度会慢很多,而且你总是有磁盘大小限制。
MPI 是您所需要的,这实际上是并行计算问题的小尺寸,劳伦斯利弗莫尔国家实验室的蓝色基因 Q 怪物拥有大约 1.5 PB 的内存。您需要使用块分解来划分您的问题和中提琴!
基本方法是在许多处理器之间将数组分成相等的块或块
您需要升级到 64 位系统。然后获取支持 64 位的编译器,然后将 al 放在 100000000000000000 的末尾。
你听说过稀疏矩阵实现吗?在其中一个稀疏矩阵中,尽管矩阵很大,但您只使用了矩阵的极少部分。
这是有关稀疏矩阵的基本信息,您实际上并没有全部使用它。只是需要的几点。