与打开的mpi一起使用

时间:2019-02-01 14:49:55

标签: c++ mpi

我尝试在c ++中使用打开的mpi进行多次发送/接收,但是它不起作用,起初我只是尝试将值从cpu 0发送到cpu 1 cpu 1必须进行一些计算,然后,cpu1将结果发送到cp0,cpu0测试是否结束,如果结束则结束,否则他将新值发送到cpu1直到结束。 对不起,我的英语不好。

int main(int argc, char **argv)
{MPI_Init(NULL, NULL);
MPI_Status status; //////////////////////
MPI_Request request;/////////////////////
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size); // Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int i=0,s=10, max=10,d;
int *ss=&s;
int done=0;
if (world_rank== 0)
{while (i<max)
{MPI_Isend(&ss , 0 , MPI_INT, 1, i, MPI_COMM_WORLD, &request);
MPI_Wait(&request, &status);
i=i+1;
MPI_Irecv(&ss , 0 , MPI_INT, 1, i+100, MPI_COMM_WORLD, &request);
}
}
if (world_rank==1)
{while (true)
{MPI_Irecv(&ss , 0 , MPI_INT, 0, i, MPI_COMM_WORLD, &request);
d=*ss+1;
ss=&(d);
MPI_Isend(&ss , 0 , MPI_INT, 0, i+100, MPI_COMM_WORLD, &request);
MPI_Wait(&request, &status);
if (status.MPI_TAG >= 110) {printf("Process %d exiting work loop.\n",     world_rank);break;}
}}
MPI_Finalize(); 
cout << "fin du programme !!!" << endl;
cout<< "s=   " << *ss << "    from world_rank  =  " << world_rank <<  endl;
return 0;
}

0 个答案:

没有答案