1

我正在用 C 编写一个程序来解决优化问题,为此我需要创建一个浮点类型的数组,其顺序为 10 13 个元素。是否可以在具有 20GB 内存的机器上执行此操作。

4

2 回答 2

3

C 中的 Afloat占用 4 个字节(假设 IEEE 浮点算法,现在非常接近通用)。这意味着 10 13 个元素天真地需要 4×10 13字节的空间。这是相当多的(40 TB,也就是桌面系统的相当多的磁盘,而不是大多数人在 RAM 方面所能承受的)所以你需要找到另一种方法。

数据是否稀疏(即大部分为零)?如果是,您可以尝试使用哈希表或树来仅存储其他值;如果您的数据足够稀疏,那么您可以将所有内容都放入其中。还要注意处理 10 13 个元素将需要很长时间。即使你可以每秒处理十亿个项目(非常快,即使是现在),它仍然需要 10 4秒(几个小时),我敢打赌,在任何不平凡的情况下,你都无法做到得到任何接近那个速度的东西。你能找到一些方法让数据存储稀疏而且处理,这样你就可以不理会大量的零吗?

当然,如果数据不是稀疏的,那么你注定要失败。在这种情况下,您可能需要找到一个更小、更易于处理的问题。

于 2012-06-15T13:24:35.790 回答
0

我想如果你有一个有很多交换空间的 64 位机器,你可以声明一个大小为 10^13 的数组,它可能会工作。

但是对于这种规模的数据集,仔细考虑问题的性质变得很重要。您真的需要对所有 10^13 个元素进行随机访问读写操作吗?数组是否稀疏?你能把它表达为一个 map/reduce 问题吗?如果是这样,对 10^13 个元素的顺序访问比随机访问更实用。

于 2012-06-15T13:22:06.800 回答