Portál AbcLinuxu, 8. listopadu 2025 23:17
if (myid == 0)
{
cout << myid << ": Zahajuju prenos" << endl;
MPI_Send(&message, 1, MPI_INT, 1, TAG, MPI_COMM_WORLD);
MPI_Send(&message, 1, MPI_INT, 1, TAG, MPI_COMM_WORLD);
MPI_Send(&message, 1, MPI_INT, 2, TAG, MPI_COMM_WORLD);
}
else
{
while (1)
{
MPI_Irecv(&message, 1, MPI_INT, MPI_ANY_SOURCE, TAG, MPI_COMM_WORLD, &request);
MPI_Test(&request, &flag, &stat);
if (flag)
{
cout << myid << ": Dostal jsem zpravu od prvniho procesoru" << endl;
}
}
}
Program spoustim se 3 procesy a vetsinou vypise pouze:
0: Zahajuju prenos 2: Dostal jsem zpravu od prvniho procesoruTzn, zpravu dostane jen treti proces, ale druhy ne. Nekdy se dokonce vypise jen prvni radek. Tipuju ze tam nekde dochazi k deadlocku, ale nemuzu na to prijit kde. Pokud se divite, proc cyklicky kontroluju pritomnost dat pomoci neblokujiho receive+MPI_Test misto toho abych pouzil standardni MPI_Recv, tak je to z toho duvodu, ze obecne resim problem, aby proces kontrolovat zda mu dosla data, pokud ano, aby nejakym zpusobem odpovedel a pokud ne, tak at provadi jinou cinnost. Mozna jdu na toto uplne spatne, muzete me prosim nejak nasmerovat?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.