【发布时间】:2012-04-19 07:19:43
【问题描述】:
我正在研究一个数学问题,它的优势是能够“预先计算”大约一半的问题,将此信息保存到文件中,然后多次重复使用它来计算我的问题的各种“实例” .困难在于上传所有这些信息以解决实际问题是一个主要瓶颈。
更具体地说:
我可以预先计算大量信息 - 大量的概率 (long double)、大量的 std::map<int,int> 等等 - 并将所有这些信息保存到磁盘(几 Gb)。
我的程序的后半部分接受一个输入参数D。对于每个 D,我需要执行大量计算,这些计算涉及到预先计算的数据(来自文件)和其他一些特定于 D 的数据的组合(这样每个D的问题都不同)。
有时我需要从文件中挑选出某些预先计算的信息。其他时候,我需要上传(大)文件中的每条数据。
有什么策略可以让 IO 更快?
由于其他原因,我已经将程序并行化(MPI,通过boost::mpi),但无论如何,访问磁盘上的文件会让我的计算时间难以忍受。
有什么策略或优化吗?
目前我正在使用cstdio 做所有事情,即没有iostream。这会有很大的不同吗?
【问题讨论】:
-
您是否有可用内存将部分数据加载到缓存中?
-
我会认真考虑购买 SSD,因为实施自定义解决方案(类似于数据库系统)所花费的时间很容易值得您花在磁盘上的 300 美元。另外我想激进的操作系统 IO 调度程序可能会有所帮助。
-
SSD 是个好主意。或者(假设这是在 64 位机器上有意义)购买 32 GB 内存也是一个相对便宜的选择。
-
您有并行文件系统来支持并行 I/O 吗?
-
@AlexandreC。好吧,如果我在某处的超级计算机上运行东西,那么 SSD 是不可能的......
标签: c++ optimization io