분산 메모리 환경에서, 각 CPU는 독립적인 환경을 갖고 있기 때문에 MPI
를 통해 메세지를 주고 받는다. 서로 다른 interconnect를 가진 CPU들이 같은 소프트웨어를 읽어야 하기 때문에 이를 MPI에서 담당하게 된다.
C코드에서 MPI를 사용하기 위해서, mpi.h
를 임포트해야 한다. MPI 프로그래밍 소스코드를 컴파일하려면 다음과 같은 명령어를 입력해야 한다
mpicc -g -Wall -o mpi_hello mpi_hello.c
-g : 디버그 정보 생성
-Wall : 모든 Warning을 프린트한다.
-o : 실행파일 컴파일파일 경로를 정의할 수 있다.
이렇게 만들어진 C파일을 실행시킬 수 있다.
mpiexec -n <number of processes> <executable>
MPI_
로 시작MPI_Init(int* argc_p, char*** argv_p)
MPI 초기화
MPI_Finalize(void)
MPI 리소스 클린업
-> 다른 이들에게 메세지를 전송할 수 있는 프로세서의 묶음
MPI_COMM_WORLD
라고도 불린다.
int MPI_Comm_size(
MPI_Comm comm //in
int* comm_sz_p // out
)
해당 커뮤니케이터에 참여할 프로세서의 개수를 선언한다.
int MPI_Comm_rank(
MPI_Comm comm // in
int* my_rank_p // out
)
해당 커뮤니케이터에 내 프로세서가 몇번째 순위인지 선언한다.
MPI의 Send를 하는 함수이다. Send 과정은 아래처럼 나타난다.
메세지를 보냈으니,이제 받을 차례이다.
여기서 주의해야할 점들이 있다. Receiver는 아래 3가지 없이 메세지를 받아온다.
이를 MPI_Status를 체크하여 확인할 수 있다.
MPI를 몇 개 받았는지 아래함수로 확인할 수 있다.
none over taking : MPI Queue가 2개의 메세지를 보낸다고 할 때, 첫번째 메세지가 avaliable하고, 두번째 메세지가 확인되어야 한다. 즉, 순차적으로 도착해야한다.