본문 바로가기
Parallel Programming

유한차분법(finite difference method)에서 boundary exchange하기

by suminhan 2016. 9. 28.

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

댓글