节点00可以将信息发送到等级为1的节点01,但是在第二次发送到节点01时它将被阻塞。为什么发生?非常感谢。我认为代码中没有死锁。当发送第二条消息时,mpi_send将被阻塞
鉴于MPI编程,有5个节点
.....
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
MPI_Status status;
int buff;
if(rank ==0)
{
buff=123;
for(int i=1;i<size;i++){
MPI_Send(&buff, 1, MPI_INT, i, tag, MPI_COMM_WORLD); //succeed
MPI_Send(&buff, 1, MPI_INT, i, tag, MPI_COMM_WORLD); //blocked
}
}
else
{
MPI_Recv(&buff, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);//succeed
MPI_Recv(&buff, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);//blocked
}
............
您是如何确定呼叫阻止的?每个等级的“标签”都很好定义和相同? – Zulan 2013-03-11 11:06:54