在我的软件中,我通过流程 1 从流 X (另一个流程的stdout)读取信息,然后我将读取的信息发送给其他 N -1 流程,最后我收集了 1 N 流程详细阐述的所有数据。
现在我的问题是:“在流程之间共享从流中读取的信息的最有效方法是什么?”
PS。进程也可以在通过网络连接的不同计算机中。
我在此列出了一些可能性:
但我认为这些可能是一些问题:
你有什么建议,你有更好的想法吗? 我在C上使用MPI进行计算。
答案 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_Gather
或MPI_Reduce
用于从客户端接收数据。
如果内存不足,则以块(例如100,000行)缓冲输入,然后将块分散到工作人员,计算,收集结果,然后重复。