如何在实时流应用程序上使用 mpi?

How to use mpi on a real-time streaming application?

我有 2 个进程,一个进程正在将数据包流出到另一个进程,直到内部中断停止该进程(发送的进程)。我想要一种机制,在该通道上有任何消息被接收之前,其他进程可以接收。

除了将停止命令也作为消息传输之外,还有什么方法可以做到这一点吗? 我不想将 finish/interrupt 作为另一条消息发送,因为在某些情况下中断会终止发送方进程。

if (world.rank() != 0) {
  while (!interrupt())
    world.send(ROOT, ID, a, bufferSize);
  // I prefer not to send finish/interrupt as another message
 }
 else {
  while (/*there is any packet to be received*/)
    world.recv(boost::mpi::any_source, ID, a, bufferSize);
}

如果 MPI_COMM_WORLD 进程之一挂掉,则无法正常继续应用程序。发送停止命令并保持发送者存活绝对是你应该做的。

理论上,您可以在 MPI 中使用单向通信或超时机制(使用 irecv / request::cancel),但我认为这没有任何意义..