【问题标题】:How can we allocate memory of order 10^15 in C我们如何在 C 中分配 10^15 阶的内存
【发布时间】:2012-09-02 08:17:05
【问题描述】:

我需要分配 10^15 的内存来存储可以是 long long 类型的整数。 如果我使用数组并声明类似

long long  a[1000000000000000];

那永远行不通。那么如何分配这么大的内存呢。

【问题讨论】:

  • 您有 750 万 GB 的内存吗?
  • 这么多内存会非常昂贵。如果您有 8000 个 1TB 硬盘驱动器,您能做的最好的就是将其存储在文件中。在这种情况下,您应该了解文件的读/写。

标签: c memory-management


【解决方案1】:

真正大的数组通常不是内存的工作,更多的是磁盘。每个 64 位的 1015 个数组元素(我认为)是 8 PB。目前你可以花大约 15 美元购买 8G 内存片,因此,即使你的机器可以处理那么多内存或地址空间,你也要花费大约 1500 万美元。

此外,随着即将推出的 DDR4 时钟频率高达约 4GT/s(千兆传输),即使每次传输都是 64 位值,仅将该阵列初始化为零仍需要大约一百万秒。您真的想在您的代码开始做任何有用的事情之前等待 11 天半吗?

而且,即使你走磁盘路线,那也是相当多的。 (大约)每 TB 50 美元,您仍然需要 400,000 美元,而且您可能必须提供自己的软件来以某种方式管理这 8,000 个磁盘。而且我什至不会考虑弄清楚初始化磁盘上的数组需要多长时间。

可能想考虑重新表述您的问题以指出实际的问题,而不是您目前拥有的建议的解决方案。可能您根本不需要那么多存储空间。

例如,如果您正在讨论一个数组,其中许多值都为零,那么稀疏数组就是一种方法。

【讨论】:

    【解决方案2】:

    你不能。你没有所有这些记忆,而且你暂时不会拥有它。很简单。

    编辑:如果你真的想处理不适合你的 RAM 的数据,你可以使用一些处理大容量存储数据的库,比如 stxxl,但它的工作速度会慢很多,而且你总是磁盘大小限制。

    【讨论】:

      【解决方案3】:

      MPI 是您所需要的,它实际上是并行计算问题的小尺寸,Lawerence Livermore 国家实验室的蓝色基因 Q 怪物拥有大约 1.5 PB 的内存。您需要使用块分解来划分您的问题和中提琴!

      基本方法是将数组划分为多个处理器之间的相等块或块

      【讨论】:

        【解决方案4】:

        您需要升级到 64 位系统。然后得到支持 64 位的编译器,然后在 100000000000000000 的末尾加上一个 l。

        你听说过sparse matrix implementation吗?在其中一个稀疏矩阵中,尽管矩阵很大,但您只使用了矩阵的极少部分。

        Here are some libraries for you.

        Here is a basic info about sparse-matrices你实际上并没有使用它。只是需要的几个点。

        【讨论】:

        • 10^15 很容易适应 64 位
        • 我没有检查零的数量。编辑...好的。固定!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多