MPI 개념

GraGrass·2024년 1월 22일
0

Chapter 2

Parallel programming models

1. CPU, GPU, Memory 관계 기준

Serial

  • CPU 코어 하나만 이용
  • 계산할 때 필요한 데이터는 메모리에 접근하여 가져옴

OpenMP

  • 한 노드(컴퓨터)에 있는 모든 코어 사용 가능
  • serial 코드에 비해 성능이 좋음

Accelerator Model

  • CUDA, OpenACC 등 가속기 모델
  • 주로 가속기로 GPU 이용
  • 호스트, 디바이스 메모리가 따로 존재하며 필요하다면 서로 copy

MPI

  • 여러 노드를 다 함께 사용 가능, GPU도 사용 가능
  • 한 노드에 여러 개의 프로세스
  • 다른 노드의 데이터를 가져오기 위해 MPI 통신 이용

MPI

1. 개요

Message Passing Interface

  • language 지원 X 라이브러리 O (따로 설치해야함)
  • process 간의 통신과 data 교환 기능
  • Distributed Memory System에서 주로 사용

MPI Implementation

  • MPICH(MVAPICH, Intel MPI), OpenMPI(LAM/MPI)
  • OpenMPI 위주로 실습 예정

2. MPI Basic Steps

Writing a Program

  • #include <mpi.h>
  • some essential function calls

Compiling

$ mpicc -o test.exe [-O3] [-march=knl] test.c
  • using a compilation script
  • GNU 환경에서 C로 작성된 MPI 코드 컴파일 시 mpicc 사용

Starting

$ mpirun -np 4 -hostfile hosts ./hello.x
  • mpirun으로 실행파일 실행
  • -np 옵션은 실행할 프로세스의 개수 지정
  • -hostfile 옵션은 host 이름을 저장하고 있는 machine file 지정
  • 위의 명령문 실행 시, hosts 파일의 node 01~04에서 4개의 프로세스가 실행됨

Specify the Machine File

  • Machine File: MPI 실행 노드를 지정한 file
  • scheduler 사용 시 scheduler가 자동으로 machine file 생성
  • 각 라인에 노드 주소(or host name) 지정

3. Example

C code

#include <stdio.h>
#include <mpi.h>

int main(int argc, char* argv[])
{
	// Initialize the library
    MPI_Init(&argc, &argv);
    
    // Do some work
    printf("Hello world\n");
    
    // Return the resources
    MPI_Finalize();
    return 0;
}

Result

  • -np 옵션의 값이 4이므로, Hello World! 가 4번 출력

4. Fortran Support

USE mpi_f08

  • Compile 과정에서 MPI subroutine의 인자 체크
  • Fortran 표준과 일관성 유지
  • Recommended!

USE mpi

  • Compile 과정에서 MPI subroutine의 인자 체크
  • MPI 핸들은 INTEGER로 정의
  • Fortran 표준과 일관성 유지 없음

INCLUDE 'mpif.h'

  • 이전 버전의 MPI 코드 호환성 위해 제공
  • MPI 3.0 이후 사용 비추천
profile
올해는 진짜 갓생 산다

0개의 댓글