본문 바로가기
CS/Linux

MPI 병렬 프로그래밍

by JHyun0302 2023. 8. 30.
728x90

메시지 패싱 (message passing) 프로그래밍 

  • 프로세스들간의 통신을 통해 하나의 작업을 나눠서 병렬 계산
  • 분산 메모리 방식

 

 

※ MPI (Message Passing Interface) : 메시지 패싱 모델의 표준

 

 

 

 

※ Communicator : 서로 통신 가능한 프로세스 집합 

  • 한 프로그램 내 여러 communicator 존재
  • MPI 통신은 같은 Communicator에 속한 프로세스끼리 가능

 

 

 Rank : Communicator내 프로세스 구분하기 위한 고유 번호

 

 

 

 

 PTP (Point To Point communication) : 한 쌍의 프로세스 간의 메시지 통신

 

 Collective communication : 한 무리의 프로세스들 간의 메시지 통신 (1:1, 1:N, M:N 통신)

 

 

 

 

 


MPI_Init 함수 : MPI 환경 초기화

int MPI_Init( int *argc, char ***argv )
  • 1번 파라미터 : 인수들의 수에 대한 pointer
  • 2번 파라미터 : 인수 벡터에 대한 pointer

 

 

 

Communicator size : communicator 내 프로세스 수

  int MPI_Comm_size(MPI_Comm comm, int *size)
  • 1번 파라미터 : Communicator
  • 2번 파라미터 : Communicator 내의 프로세스 수

 

 

 

Rank : 자신의 rank 확인

int MPI_Comm_rank(MPI_Comm comm, int *rank)
  • 1번 파라미터 : Communicator
  • 2번 파라미터 : 프로세스의 rank

 

 

 

MPI_Finalize 함수 : MPI 환경 해제

int MPI_Finalize(void)

 

 

 

 

기본 구조

void main(int argc, char *argv[]){

    int rank, size; 
    MPI_Init(&argc, &argv);  // MPI 초기화
    MPI_Comm_size(MPI_COMM_WORLD, &size);      // communicator 내의 프로세스 수 확인
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);     // communicator 내의 프로세스 rank 확인
    
    /*... your code here...*/ 
    
    MPI_Finalize();         // MPI 종료 
}

 

 

 

 

 

 

 


Blocking & Non-Blocking

 

 

블록킹 통신 (동기 통신)

- 프로세스는 통신이 완료될 때까지 블록킹되어 다른 작업을 수행하지 못함

교착(deadlock) 상태가 발생할 수 있으며 프로그램 실행속도가 느려질 수 있음 

 

 

논블록킹 통신 (비동기 통신)

- 프로세스는 통신이 완료될 때까지 블록킹되지 않으며 다른 작업을 수행 가능

교착 상태를 방지 할 수 있고 블록킹에 비해 실행속도가 빠를 수 있음

 

 

 

 

반응형

'CS > Linux' 카테고리의 다른 글

OpenMp 병렬 프로그래밍  (0) 2023.08.29
Process & Signal  (0) 2023.08.29
디렉토리 관리 관련 함수  (0) 2023.08.29
파일 관리 관련 함수  (0) 2023.08.29
Func (File System & File Input/Output)  (0) 2023.08.29