在C ++中并行加载128个文件

时间:2014-03-13 23:40:29

标签: c++ parallel-processing

我一直在研究一个项目,新的要求是将128个文件并行加载到物理内存中。所有这128个文件都驻留在同一目录/文件夹中。是否有可用于解决此问题的算法或解决方案?我需要用C ++编写代码。

2 个答案:

答案 0 :(得分:7)

按顺序加载128个文件的最快方法。并行性不起作用,因为磁盘头一次不能存在于多个位置。即使是随机存取存储设备(如SSD)或磁盘的DRAM缓存,它们仍然必须顺序通过总线。

读完之后,它们肯定可以并存在内存中。

我建议使用for循环来检查文件大小,分配内存和读取每个文件。循环将迭代128次。当您获得每个文件时,您可以与后续读取并行地开始数据处理。


并行计算可以加快速度,因为您拥有多核处理器。重叠的网络请求可以加快速度,因为往返延迟很长。 只有当您有多个磁盘时,并行磁盘I / O才能加快速度,并且数据之间会有适当的分配。您的不是。 (如果您使用RAID条带集,则磁盘控制器将发出并行读取,而您的应用程序无需额外工作)

如果您的经理坚持“它必须并行读取,有必要”,开始谈论128个磁盘阵列,使用花哨的覆盖系统使128个磁盘上的文件看起来好像在同一个目录中

此后要求应该更加合理。

答案 1 :(得分:1)

虽然我完全同意Ben Voigt的回答,如果你真的想要这样做(如果没有别的,向你的管理层证明它不值得做),那么解决方案是:< / p>

  1. 创建要加载的128个文件的列表。
  2. 对于列表中的每个项目,创建一个线程,为线程提供文件的名称和存储数据的位置[对于文件内容来说足够大,或者为{{{{{{ 1}}]。
  3. 在每个线程中,打开给定文件,将内容读入给定存储。关闭文件,完成线程。
  4. 等待所有线程完成。
  5. 我几乎可以保证,除非你有一些非常奇特的硬件,即使是并行的4个文件,除非文件很小,否则这个解决方案比顺序进程慢。