Witam wszystkich. Miałem ostatnio zaliczenie z oprogramowania klastrowego niestety nie poszło mi zbyt dobrze. Zadanie polegało na symulacji działania programu w C++ z wykorzystaniem MPI. Nigdy nie byłem dobry z C++ a do tego jeszcze to MPI... Niżej przedstawiam treść zadania i cały program:
Dla podanego niżej programu w standardzie MPI określić, symulując jego działanie, jaka liczba zostanie wyświetlona na ekranie jako wynik działania tego programu, jeżeli jako parametr -np w wywołaniu polecenia "mpirun" podano wartość równą 4 a 1 parametr wywołania programu 3.
#include<mpi.h>
#include<iostream>
using namespace std;
int main(int grac, char **argv)
{
int rank,size;
MPI_Status status;
MPI_Init(&grac,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int lewy=rank-1;
int prawy=rank+1;
int a=atoi(argv[1]);
int b=0;
if(rank==size-1) prawy=0;
if(rank==0) lewy=size-1;
for (int i=0;i<size;i++)
{
MPI_Send(&a,1,MPI_INT,lewy,99,MPI_COMM_WORLD);
a++;
MPI_Recv(&b,1,MPI_INT,prawy,99,MPI_COMM_WORLD,&status);
a-=2*b;
}
if(rank==1)
cout<<"wynik="<<a<<endl;
MPI_Finalize();
}
Chodzi o to, że nie wiem w jaki sposób przebiega komunikacja między komunikatorami a co za tym idzie jak po kolei program jest wykonywany.
Oczywiście sam wynik działania programu nie jest najważniejszy. Interesuje mnie w jaki sposób obliczyć wynik bez korzystania z kompilatora. Będę wdzięczny za wszelką pomoc.
pozdrawiam