MPI在循环中连续发送和接收消息
我试着做一个程序,进程0应该开始初始化发送消息到一个随机进程而不是它自己,然后所选的随机进程应该接收消息并发送到另一个随机进程。这应该一直发生,直到完成用户作为输入给出的要发送的请求消息数为止。我看到我的程序要么以最大值2发送消息,要么甚至没有发送消息,并给出以下错误 **其中一个进程终止得很糟糕:清理 应用程序使用退出字符串终止:终止(信号15) ** 这是我的代码,让我知道里面的漏洞是什么。随机生成部分不包括在内,工作正常MPI在循环中连续发送和接收消息,mpi,Mpi,我试着做一个程序,进程0应该开始初始化发送消息到一个随机进程而不是它自己,然后所选的随机进程应该接收消息并发送到另一个随机进程。这应该一直发生,直到完成用户作为输入给出的要发送的请求消息数为止。我看到我的程序要么以最大值2发送消息,要么甚至没有发送消息,并给出以下错误 **其中一个进程终止得很糟糕:清理 应用程序使用退出字符串终止:终止(信号15) ** 这是我的代码,让我知道里面的漏洞是什么。随机生成部分不包括在内,工作正常 if(rank==0) { rnum=rgenerator(rank
if(rank==0)
{
rnum=rgenerator(rank,size);
string++;
MPI_Send(&string, 50, MPI_INT, rnum, rnum, MPI_COMM_WORLD);
printf("\n process %d sends message to process %d",rank, rnum);
//MPI_Recv(&flag, 100, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
}
while(flag!=1)
{
if(MPI_Recv(&string, 50, MPI_INT, MPI_ANY_SOURCE, rank, MPI_COMM_WORLD, &status)==MPI_SUCCESS)
{
printf("\n process %d receives message from process %d count : %d",rank, status.MPI_SOURCE, string);
rnum=rgenerator(rank,size);
printf("\n Random num generated is %d",rnum);
string=string+1;
MPI_Send(&string, 50, MPI_INT, rnum, rnum, MPI_COMM_WORLD);
count++;
printf("\n process %d sends message to process %d", rank, rnum);
//MPI_Bcast(&count, 40, MPI_INT, rank, MPI_COMM_WORLD);
if(string==n)
{
printf("\n\n Messages reached");
flag=1;
}
}
else
flag=0;
}
您应该确保发送和接收操作的数量相同。在代码中,发送操作比recv操作多。因此,一个进程将崩溃 要避免这种情况,您只需在您的标志不等于1时发送:
//MPI_Send(&string, 50, MPI_INT, rnum, rnum, MPI_COMM_WORLD);
count++;
printf("\n process %d sends message to process %d", rank, rnum);
//MPI_Bcast(&count, 40, MPI_INT, rank, MPI_COMM_WORLD);
if(string==n)
{
printf("\n\n Messages reached");
flag=1;
}
if(flag!=1){//make sure that you need to send one message.
MPI_Send(&string, 50, MPI_INT, rnum, rnum, MPI_COMM_WORLD);
}
您应该确保发送和接收操作的数量相同。在代码中,发送操作比recv操作多。因此,一个进程将崩溃 要避免这种情况,您只需在您的标志不等于1时发送:
//MPI_Send(&string, 50, MPI_INT, rnum, rnum, MPI_COMM_WORLD);
count++;
printf("\n process %d sends message to process %d", rank, rnum);
//MPI_Bcast(&count, 40, MPI_INT, rank, MPI_COMM_WORLD);
if(string==n)
{
printf("\n\n Messages reached");
flag=1;
}
if(flag!=1){//make sure that you need to send one message.
MPI_Send(&string, 50, MPI_INT, rnum, rnum, MPI_COMM_WORLD);
}