Untitled
unknown
c_cpp
a year ago
1.6 kB
7
Indexable
#define WORLD MPI_COMM_WORLD #define IGNOR MPI_STATUS_IGNORE // לחלק את המערך ל2 ולשלוח מתהליך 0 לתהליך 1 את "אנ" וחצי מ "איי" // חישוב עם "או מ פי" של מערך "בי" - יצירת המערך בכל אחד מהתליכים //לשלוח את החצי של מערך "בי" מתהליך 1 לתהליך 0 // בתהליך 0 לעבור על כל המערך "בי" ולהדפיס את מי שיותר גדול מהשכן שלו int main(int argc,char **argv){ MPI_Init(&argc, &argv); int rank, size, *A,*B,N,half; MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if(size != 2){ printf("2 procs only"); MPI_Abort(WORLD,EXIT_FAILURE); } if (rank ==0){ N = readA(&A); // assume readA mallocs A and sets N as size of A half = N / 2; MPI_Send(&half,1,MPI_INT,1,0,WORLD); B = malloc(half * sizeof(int)); } else{ MPI_Recv(&half,1,MPI_INT,0,0,WORLD); A = malloc(half * sizeof(int)); B = malloc(half * sizeof(int)); } MPI_Scatter(A,half,MPI_INT,A,half,MPI_INT,0,WORLD); #pragma omp parallel for num_threads(4) for (int i = 0; i < half; i++) B[i] = f(A[i]); if (rank ==0){ MPI_Recv(B+half,half,MPI_INT,1,0,WORLD,IGNOR); #pragma omp parallel for num_threads(4) for (int i = 1; i < N-1; i++){ if(B[i] > B[i-1]) printf("%d,B[%d] > B[%d]\n",i,B[i],B[i-1]); } }else{ MPI_Send(B,half,MPI_INT,1,0,WORLD); } MPI_Finalize(); return EXIR_SUCCESS; }
Editor is loading...
Leave a Comment