这是我们计划的特色。 MPI_Send函数不起作用,MPI_Send之前的printf语句正常工作,但控件不会在MPI_Send之后转到printf语句。并且它不会进入if(rank> 0)条件。
#define MASTER_TO_SLAVE_TAG 1
#define SLAVE_TO_MASTER_TAG 4
void MPI_Init(int argc,char ***argv);
int MPI_Comm_rank( MPI_Comm comm, int *rank);
int MPI_Comm_size(MPI_Comm comm, int *totalProcess);
if(rank==0)
{
printf("before send “);
double tArray[1];
tArray[0]=t;
for(rank=1;rank<totalProcess;rank++)
MPI_Send(&tArray, 1, MPI_DOUBLE, rank, MASTER_TO_SLAVE_TAG,MPI_COMM_WORLD);
printf("after send “);
}
if(rank>0)
{
printf(“inside slave”);
MPI_Recv(&tArray, 1, MPI_DOUBLE, 0, SLAVE_TO_MASTER_TAG,MPI_COMM_WORLD, &status);
}
答案 0 :(得分:1)
您尝试从不同的标签接收,而不是用于发送。 MPI_SEND
和MPI_RECV
来电符合MPI_Comm
,标记和排名。如果您不匹配所有三个,则永远不会收到消息。