建议分布式计算,从流中获取数据

时间:2016-04-03 00:46:23

标签: c mpi stdout distributed-computing

在我的软件中,我通过流程 1 从流 X (另一个流程的stdout)读取信息,然后我将读取的信息发送给其他 N -1 流程,最后我收集了 1 N 流程详细阐述的所有数据。

现在我的问题是:“在流程之间共享从流中读取的信息的最有效方法是什么?”

PS。进程也可以在通过网络连接的不同计算机中。

我在此列出了一些可能性:

  1. 计算流线( M 线),保存为 N 文件 M / N 行并发送到每个进程1个文件。
  2. 计算流行( M 行),分配足够的内存以包含所有信息,直接向每个流程发送信息。
  3. 但我认为这些可能是一些问题:

    1. 编写这么多文件可能是一种开销,通过网络发送文件根本就没有效率。
    2. 我在进程 1 中需要足够的内存,因此该进程可能成为瓶颈。
    3. 你有什么建议,你有更好的想法吗? 我在C上使用MPI进行计算。

1 个答案:

答案 0 :(得分:1)

如果性能不是问题,使用文件就可以了。优点是,您可以将所有模块与文件保持为分离的接口。您甚至可以使用非常简单的命令行工具:

./YOUR_COMMAND > SPLIT_ALL
split -n l/$(N) -d SPLIT_ALL SPLIT_FILES

在shell中设置N或正确替换。 注意:遗憾的是,在这种情况下,您无法直接输入split,因为它无法确定从stdin读取时的总行数。如果循环,而不是连续分割是好的,你可以直接管道:

./YOUR_COMMAND | split -n r/$(N) -d - SPLIT_FILES

你的第二个解决方案也没问题 - 如果你有足够的内存。请记住使用适当的集体操作,例如MPI_Scatter(v)用于发送,MPI_GatherMPI_Reduce用于从客户端接收数据。

如果内存不足,则以块(例如100,000行)缓冲输入,然后将块分散到工作人员,计算,收集结果,然后重复。