Portál AbcLinuxu, 14. května 2025 01:32
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.