Hello, there was such a problem with mpi:

std::vector<int> sender(world_size,0); for(int j =0;j<world_size;++j){ for (int i =0 ;i < world_size;++i) { int rank = j + pow(2,i); if (rank<world_size) { sender[rank] = j; } } } if(world_rank!=0) { MPI_Status status,main_status; MPI_Probe(0, 0, MPI_COMM_WORLD, &status); MPI_Get_count(&status, MPI_INT, &number_amount); int number_buf = 0; printf("Process %d received ready for starting\n",world_rank); MPI_Recv(&number_buf, number_amount, MPI_INT, sender[world_rank], 0, MPI_COMM_WORLD, &main_status); printf("11Process %d received number %d from process %d\n",world_rank, number_buf,main_status.MPI_SOURCE); } for(int i =1;i<world_size;++i) { if (world_rank == sender[i]) { MPI_Send(&i, 1, MPI_INT, i, 0, MPI_COMM_WORLD); printf("0 thread %d send\n", sender[i]); } } 

Running on 4 machines should work like this:

processes 1 2 3 await receipt

Process 0 sends messages 1 2, and then 3 must accept from the 1st, but after receiving the first, it cannot send to the 3rd, and the latter will accept and everything drops, I cannot identify the error. (irecv / isend) do not help.

    0