从许多并行可执行文件写入单个文件的最佳方法

时间:2014-03-03 07:54:55

标签: c++ parallel-processing mpi

我目前正在进行大量的数值模拟(C ++ / MPI)。对于每次模拟,我都会更改参数并获得最终值。请注意,每个模拟本身都是并行模拟,使用MPI单独执行。将这些数据保存在二进制文件中避免任何同时写入和重叠的最有效方法是什么?

2 个答案:

答案 0 :(得分:3)

这取决于程序中的文件编写模式:

  • 如果您不经常写(与您的计算量相比),您可以使用互斥锁保护文件编写代码
  • 如果更频繁地写作,你可以为每个线程提供一个单独的文件,然后将它们合并到最终文件中

您还可以创建一个要写入的数据队列,哪些场景计算线程将是生成器,并且会有一个线程将数据写入磁盘。如果编写消费者无法跟上生产者的步伐,你可能需要某种队列大小控制。

带队列的方案也很好,因为它分离了计算和IO,提高了模块性。

答案 1 :(得分:0)

您可能希望将数据存储在内存中,然后在完成所有任务后保存已排序和汇总的结果,而不是在每个可执行文件中写入文件。

有一些框架可以帮助您并行执行任务并汇总结果。我建议使用LeoTask框架:https://github.com/mleoking/LeoTask

它不仅可以完成这项工作,还可以提供许多其他有用的功能。例如,它可以在电力中断后恢复并继续运行您的任务,而不会丢失您的计算结果。