MPI

규규·2024년 7월 11일
0

병렬 프로그래밍

목록 보기
10/11

개요

  • MPI (Message Passing Interface) 는 소스코드에서 하나의 변수로 선언된 것일지라도, 각각의 프로세스가 이름만 같은 별도의 변수를 가지며 값도 독립적임.
  • 서로 다른 프로세스간 값을 주고 받기 위해 별도 함수 호출 필요.
  • 여러 개의 Node 가 연결된 환경에서 사용이 유용.

MPI 프로그래밍

  • 헤더 파일 인클루드 필요 #include<mpi.h>
  • 컴파일 랩퍼 사용 필요
    • mpicc,mpicxx,mpifort
    • mpicc -show 로 랩핑하는 option 확인 가능
  • 별도의 프로그램으로 실행 필요. `mpiexec -n <프로세서 개수> <실행파일 이름> <명령행 인자들>

초기화 및 프로세스 랭크

  • MPI_Init(&argc, &argv) : 명령행 인자의 포인터를 넘겨 줌.
  • MPI_COMM_WORLD :
    • 서로 데이터를 주고 받는 프로세스들의 집합체로서 커뮤니케이터 중 하나.
    • 프로그램 구동에 사용되는 모든 프로세스는 여기 포함되어, MPI_COMM_WORLD 를 인자로 주고 MPI 함수 호출하면, 프로세스가 서로 데이터 주도 받을 수 있음.
int n_size, n_rank;
MPI_Comm_size(MPI_COMM_WORLD, &n_size_);
MPI_Comm_rank(MPI_COMM_WORLD, &n_rank_);
  • 프로세스 랭크 : 프로세스의 id 역할을 하는 정수의 변수. 0부터 시작. 프로세스 마다 다른 값을 가짐.

프로세스 간의 데이터 송수신

  • MPI_Send : 다른 프로세스에 데이터를 보냄.
  • MPI_Recv : 다른 프로세스로부터 데이터를 받음.
  • 송수신 함수에서 MPI 자료형을 나타내는 MPI_Datatype 을 활용.
  • tag : 두 프로세스가 주고 받는 데이터를 구분하기 위한 정수형 변수.

출처 :

profile
복습용 저장소

0개의 댓글