가로가 n, 세로가 m인 배열 uu (이중배열은 아니고 이중배열처럼 쓰이는 일차 배열)의 boundary에서 정보 교환시
void exchange_boundary(int m, int n, double *uu, int nprocs, int myrank){
int i,j;
MPI_Request req[4];
MPI_Status stat[4];
if(myrank < nprocs-1){
MPI_Isend(&uu[(m-1)*n], n, MPI_DOUBLE, myrank+1, 123, MPI_COMM_WORLD, &req[0]);
MPI_Irecv(&uu[m*n], n, MPI_DOUBLE, myrank+1, 321, MPI_COMM_WORLD, &req[1]);
}
if(myrank > 0){
MPI_Isend(&uu[n], n, MPI_DOUBLE, myrank-1, 321, MPI_COMM_WORLD, &req[2]);
MPI_Irecv(&uu[0], n, MPI_DOUBLE, myrank-1, 123, MPI_COMM_WORLD, &req[3]);
}
if(myrank < nprocs-1){
MPI_Waitall(2, req, stat);
}
if(myrank > 0){
MPI_Waitall(2, req+2, stat+2);
}
}이와 같은 코드로 해결 가능
'Parallel Programming' 카테고리의 다른 글
| KSC 2013 3번 문제 및 답안 (0) | 2016.10.01 |
|---|---|
| KSC 2013 2번 문제 및 답안 (0) | 2016.10.01 |
| KSC 2013 1번 문제 및 답안 (0) | 2016.10.01 |
| 블록 분할코드 (0) | 2016.09.13 |
| 병렬 컴퓨팅 효율검사 (0) | 2016.09.09 |
댓글