C, MPI: программа не завершает и не печатает номера

#include "mpi.h" #include  int main(int argc,char *argv[]){ int numtasks, rank, rc, count, tag=1, i =0; MPI_Status Stat; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) //for process 0 we print received messages { for(i=0; i< 9; i ++){ printf("value of i is: %d\n",i ); rc = MPI_Recv(&inmsg, 1, MPI_CHAR, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, &Stat); printf("Task %d: Received %d char(s) from task %d with tag %d \n", rank, count, Stat.MPI_SOURCE, Stat.MPI_TAG); } } else //for the other 9 processes { if(rank % 2 == 0){ //if rank is an even number rc = MPI_Send(&outmsg, 1, MPI_CHAR, 0, tag, MPI_COMM_WORLD); //send message to process with rank 0 } } MPI_Finalize(); } // 

Эта программа запускается с 10 процессами. Процесс с рангом 0 получает сообщения и распечатывает их, если исходный процесс имеет четный ранг. Процессы с рангом, отличным от 0, отправляют процесс с рангом 0 сообщение, содержащее символ ‘x’
Теперь, в отношении ранга 0, он имеет цикл for, который в основном петли 9 раз. В цикле он выдает значение переменной итерации i и принятого символьного и исходного процесса.
Однако, когда я запускаю свою программу, она не заканчивается.
Результат выглядит следующим образом:

 Task 0: Received 0 char(s) from task 2 with tag 1 value of i is: 1 Task 0: Received 0 char(s) from task 6 with tag 1 value of i is: 2 Task 0: Received 0 char(s) from task 4 with tag 1 value of i is: 3 Task 0: Received 0 char(s) from task 8 with tag 1 value of i is: 4 

Как мне получить его для печати других значений i таких как 5,6,7,8,9?

Вы используете архитектуру master-slave для параллельной обработки, ваш процесс 0 является ведущим и ожидает ввода 9 других процессов, но в вашем коде только процесс с четным идентификационным номером запускает вывод, а именно процесс 2, 4 , 6, 8.

вы не поместили поведение для процессов 1,3,5,7 и 9, поэтому мастер все еще ждет их, поэтому программа, ожидающая завершения параллельного процесса:

вам нужно заполнить исходный код здесь

  if(rank % 2 == 0){ //if rank is an even number rc = MPI_Send(&outmsg, 1, MPI_CHAR, 0, tag, MPI_COMM_WORLD); //send message to process with rank 0 }else{ //logic for process 1,3,5,7,9 }