Untitled
unknown
c_cpp
2 years ago
1.6 kB
8
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