2016-06-29 19 views
0

Ich habe 2 Prozesse, ein Prozess streamt Pakete zu einem anderen bis ein interner Interrupt den Prozess stoppt (der Prozess, der sendet). Ich möchte einen Mechanismus haben, den der andere Prozess empfangen kann, bis eine Nachricht auf diesem Kanal empfangen wird.Wie verwende ich mpi in einer Echtzeit-Streaming-Anwendung?

Gibt es einen anderen Weg, als den Befehl halt als Nachricht zu übertragen? Ich möchte nicht beenden/Interrupt als eine andere Nachricht senden, da es Szenarien geben kann, dass der Interrupt den Absenderprozess beenden kann.

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); 
} 

Antwort

1

Wenn einer der MPI_COMM_WORLD Prozesse stirbt, gibt es keine Möglichkeit, um richtig die Anwendung fortzusetzen. Das Senden eines Haltebefehls und das Beibehalten des Senders ist absolut das, was Sie tun sollten.

Theoretisch könnten Sie einseitige Kommunikation in MPI oder einem Timeout-Mechanismus verwenden (irecv/request::cancel verwenden), aber ich sehe keinen Weg, dies Sinn machen würde ..