Как использовать mpi в потоковом приложении в реальном времени?

У меня есть 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);
}

0

Решение

Если один из MPI_COMM_WORLD процессы умирают, нет возможности правильно продолжить приложение. Отправка команды остановки и поддержание отправителя в живых — это абсолютно то, что вы должны сделать.

Теоретически, вы можете использовать одностороннюю связь в MPI или механизм тайм-аута (используя irecv / request::cancel), но я не вижу в этом смысла ..

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector