MPI Komunikacja procesów

0

Rysunek1.jpg

Witam,
mam problem bo nie wiem gdzie robię błąd :(
Zamieszczam rysunek aby pokazać jak powinny komunikować się procesy. Ostatni wysyła do pierwszego, czyli do 0;

Kod przedstawiam poniżej

#include <mpi.h>
#include <iostream>

using namespace std;

int main(int argc, char** argv)
{

int rank, size;

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Status status;

int wysyl = 0;
int odb = 0;
int x = 0;
int reszta = 0;

if(rank == 0) // proces 0 nastawia sie na odbior od ostatniego procesu
{
MPI_Recv(&odb,1,MPI_INT,size-1,99,MPI_COMM_WORLD,&status);

wysyl = 122;

if(size > 1)
MPI_Send(&wysyl,1,MPI_INT,rank*2+1,99,MPI_COMM_WORLD); // wysyla do procesu 1

if(size > 2)
MPI_Send(&wysyl,1,MPI_INT,rank*2+2,99,MPI_COMM_WORLD); // wysyla do procesu 2
}

if(rank > 1) // kazdy proces powyzej 0 bedzie odbieral wiadomos
{
if(rank == 1)
MPI_Recv(&odb,1,MPI_INT,0,99,MPI_COMM_WORLD,&status);

if(rank%2 == 0)
MPI_Recv(&odb,1,MPI_INT,rank/2-1,99,MPI_COMM_WORLD,&status);

if(rank%2 == 1 && rank > 1)
{
reszta = rank%2;
x = rank-reszta;
x /= 2;
MPI_Recv(&odb,1,MPI_INT,x,99,MPI_COMM_WORLD,&status);
}
}

if(rank < size/2 && rank > 0)// wysylka jest tylko przez polowe procesow
{
if(size%2 == 0)
cout << "liczba procesow musi byc nieparzysta, lub wynosic 2" << endl;

if(size%2 == 1)
  {  
     wysyl = 12;
     MPI_Send(&wysyl,1,MPI_INT,rank*2+1,99,MPI_COMM_WORLD);
     MPI_Send(&wysyl,1,MPI_INT,rank*2+2,99,MPI_COMM_WORLD);
  }

}

if(rank == size-1) // ostatni proces wysyla do zerowego
{
wysyl = 999;
MPI_Send(&wysyl,1,MPI_INT,0,99,MPI_COMM_WORLD);
}

cout << "proces: " << rank << "-wyslal: " << wysyl << " odebral: " << odb << endl;

MPI_Finalize();
return 0;

}

0
Rubens napisał(a):
if(rank > 1) // kazdy proces powyzej 0 bedzie odbieral wiadomos 

Tutaj powinno być

rank > 0

Swoją drogą to powinieneś wklejać kod z pomocą znaczników do kodu.

0

Dzieki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1