2016-06-29 3 views
0

У меня есть 2 процесса, один процесс передает пакеты другим, пока внутреннее прерывание не прекратит процесс (процесс, который отправляет). Я хочу иметь механизм, который может получить другой процесс, пока не будет получено какое-либо сообщение на этом канале.Как использовать mpi в потоковом приложении реального времени?

Есть ли способ сделать это, кроме передачи команды 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); 
} 

ответ

1

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

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

Смежные вопросы