У меня есть 2 процесса, один процесс передает пакеты другому, пока внутреннее прерывание не остановит процесс (процесс, который отправляет). Я хочу иметь механизм, который другой процесс может получать до тех пор, пока на этом канале не будет получено какое-либо сообщение.
Есть ли способ сделать это, кроме передачи команды halt в виде сообщения?
Я предпочитаю не отправлять финиш / прерывание как другое сообщение, потому что могут быть сценарии, когда прерывание может убить процесс отправителя.
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
), но я не вижу в этом смысла ..
Других решений пока нет …