Использование 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(); }