【发布时间】:2011-02-07 11:15:47
【问题描述】:
我遇到以下问题。我需要存储 大量 信息 (~32 GB) 并能够尽可能快地操作它。我想知道最好的方法是什么(编程语言 + 操作系统 + 任何你认为重要的组合)。
我使用的信息结构是双精度浮点数(8 字节)的 4D 数组 (NxNxNxN)。现在我的解决方案是将 4D 数组分割成 2D 数组,并将它们存储在我计算机 HDD 中的单独文件中。这真的很慢,而且对数据的操作令人难以忍受,所以这根本不是解决方案!
我正在考虑搬到我所在国家/地区的超级计算设施并将所有信息存储在 RAM 中,但我不确定如何实现应用程序以利用它(我不是专业程序员,所以任何书籍/参考资料都会对我有很大帮助)。
我正在考虑的另一种解决方案是购买具有大量 RAM 的专用服务器,但我不确定这是否能解决问题。所以现在我的无知并没有让我选择最好的方法。
如果你遇到这种情况,你会怎么做?我愿意接受任何想法。
提前致谢!
编辑:很抱歉没有提供足够的信息,我会尝试更具体的。
我正在存储一个离散的 4D 数学函数。我想要执行的操作包括数组的转置(更改 b[i,j,k,l] = a[j,i,k,l] 等)、数组乘法等。
由于这是对提议实验的模拟,因此这些操作只会应用一次。一旦得到结果,就不需要对数据进行更多的操作了。
编辑(2):
我还希望将来能够存储更多信息,因此该解决方案应该具有某种可扩展性。当前的 32 GB 目标是因为我想要拥有 N=256 个点的数组,但如果我可以使用 N=512 会更好(这意味着 512 GB 来存储它!)。
【问题讨论】:
-
这在很大程度上取决于您打算如何处理这些数据。您能更明确地说明您的操作吗?
-
32GB 不算多。大型强子对撞机 ATLAS 实验的输出(峰值速率)只有 5 分钟多一点……
-
补充一下 Chris 所说的,处理大量数据有不同的方法,其中一些更喜欢某些用途而不是其他用途。例如,过多的分页会降低您的性能,为了避免这种情况,有必要知道您将如何访问数据。
-
您是否有 64 位系统,内存 >32GB?你能得到一个吗?您的转换是计算密集型的吗?您的应用程序可以分发到机器集群吗? “快”有多快?
-
@Donal:我确信 ATLAS 的人的预算与该数字相符 :-) @David+@Stephen:性能很重要,但不是那么重要。我可以先尝试 N=64,一旦正确调试,我可以运行 N=256,然后等两天?现在的主要问题是我无法将它存储在快速(比 HDD 更快)的存储设备中。我可以访问我大学中的一个集群,以及我居住的城市中另一个更强大的集群(0.12 欧元/小时)。关于它是否可以分发到集群,不知道,这可能是一个解决方案。我怎么知道?
标签: arrays memory memory-management hpc