Узел00 может отправить информацию узлу 101, чей ранг 1 успешно, но он будет заблокирован при втором отправке на узел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
}
............
Как вы определили, что блоки вызовов? Является ли 'tag' четко определенным и идентичным для каждого ранга? – Zulan