Lilyanaa Ответов: 0

Использование MPI_reduce и MPI_scatter в C с mpi


Здравствуйте, из этого кода я хочу распределить одну строку 2D массива на весь процессор, например
Р1 =1,2,3,4
Р2=5,6,7,8
Р3=9,10,11,12
Р4=13,14,15,16
при запуске программы (mpirun -np 4 ./a)
MPI_Scatter 
это прекрасно работает но
MPI_Reduce
потому что остановка в терминале-это что-то не так?

Что я уже пробовал:

<pre>#include "mpi.h"
#include <stdio.h>
#define  size 4

int main ()
{
int np, rank, sendcount, recvcount, source,i;
int recvbuf[size];
int mymax;
int max=0;
MPI_Init(NULL,NULL);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &np);

  int sendbuf[size][size] ={
  {1, 2, 3, 4},
  {5, 6, 7, 8},
  {9,10,11, 12},
  {13, 14, 15, 16}    };

  source = 1;
  sendcount = size;
  recvcount = size;
  MPI_Scatter(sendbuf,sendcount,MPI_INT,recvbuf,recvcount,MPI_INT,source,MPI_COMM_WORLD);
  printf("rank= %d  Results: %d %d %d %d \n",rank,recvbuf[0],recvbuf[1],recvbuf[2],recvbuf[3]);
   
if (rank==0) {
//Each processor has a row, now find local max
   mymax = recvbuf[0]; 
   for(i=0;i<recvcount;i++) {
		if(mymax<recvbuf[i]) {
			mymax = recvbuf[i];
		}
	}
 MPI_Reduce(&mymax,&max ,1,MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
 printf(" Processor %d has max data after reduce : max= %d ", rank,max);

}

else 
    printf("----.\n");

MPI_Finalize();
}

0 Ответов