hatte ich so etwas wieMPI Besetzt Warten auf Antwort
while(j<nOSlaves)
{
//Iterate through all the slaves.
for(int i=1;i<nOSlaves && j<nOSlaves;i++)
{
//Create a taskMessage which contains length and distance.
MPI_Status st;
MPI_Recv(&buffer, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &st);
if (buffer > 0)
{ //Handle the message.... }
}
}
Das Problem ist jetzt, dass ich alle warten, bis die Nachricht eintrifft, ich es schneller wollte und versuchte, es async.
MPI_Irecv(&buffer, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &rq);
int flag = 0;
MPI_Test(&rq, &flag, &st);
//If the asynchronous message has been received advance, else try again later.
if (flag)
{ //Handle the message.... }
Aber nach jeder Iteration der für werde ich die Anfrage verlieren. Gibt es eine Möglichkeit, alle "Slaves" zu durchlaufen und zu schauen, ob einige bereits beantwortet haben?
Was versuchen Sie eigentlich hier, was ist das größere Kommunikationsmuster? Sieht so aus, als könnten Sie eine Art Kollektiv benutzen, aber die Frage ist nicht klar genug, um richtig zu antworten. – Zulan