gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:10:07 25 4
gpt4 key购买 nike

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

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

PS。进程也可能位于通过网络连接的不同计算机中。

这里我列出了一些可能性:

  1. 计算流的行数(M行),保存到N个文件M/N行并发送到每个进程 1 个文件。
  2. 计算流的行数(M行),分配足够的内存来包含所有信息,将信息直接发送到每个进程。

但我认为这些可能是一些问题:

  1. 写入如此多的文件可能会产生开销,而且通过网络发送文件效率根本不高。
  2. 我的进程 1 需要足够的内存,因此该进程可能成为瓶颈。

您有什么建议,您有更好的想法吗?我在 C 上使用 MPI 来进行此计算。

最佳答案

如果性能不是问题,使用文件就可以了。优点是,您可以将所有内容保持模块化,并将文件作为解耦接口(interface)。您甚至可以使用非常简单的命令行工具:

./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 用于从客户端接收数据。

如果内存不足,则以 block (例如 100,000 行)的形式缓冲输入,然后将这些 block 分散给您的工作人员,进行计算、收集结果,然后重复。

关于c - 建议分布式计算,从流中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36380395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com