가로가 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 |
댓글