MPI vs OpenMP, Hybrid MPI

규규·2024년 3월 6일
0

병렬 프로그래밍

목록 보기
6/11
post-thumbnail

Affinity

OpenMP binding 조절 방법

  • 환경변수 이용
    • OMP_PROC_BIND
      • true : thread 가 프로세서에 고정
      • spread : 스레드가 가능한 넓게 분산
      • close : 스레드가 가능한 가까운 프로세서에 할당
      • master : 스레드가 부모 스레드와 동일 프로세서에 고정
      • false or disabled : no binding
    • OMP_PLACEES
      • 스레드를 특정한 하드웨어 자원 (코어, 소켓, PID) 배치를 지정
      • cores : 물리적 코어에 스레드를 바인딩. 하이퍼스레딩 조건이라면 각 물리적 코어에 여러 스레드가 있을 수 있는데, 이 옵션은 물리적 코어 단위에 스레드를 고정
      • threads : 시스템의 논리 프로세서 (하이퍼스레딩을 포함한 모든 CPU 스레드0 에 바인딩
      • sockets : 각 CPU 소켓 단위로 스레드를 바인딩
      • 명시적 프로세서 집합 : “{0,1},{2,3},{4,5},{6,7}” or “{0},{1},{2}” (thread 4개를 binding)
  • 디렉티브 이용
    • #pragma omp parallel proc_bind(spread)

OpenMP

  • 모든 스레드가 동일한 메모리에 엑세스 함. (shared memory paradigm, 공유 변수 활용) 이 접근 방식은 루프 병렬화를 단순화하고 멀티 코어 프로세서 기능을 효과적으로 활용 가능.
  • MPI 에 비해 synchronization, communication overhead 가 최소화 되므로 memory bandwidth 가 높은 경우에 효과적 임
  • 구현이 용이함
  • 기계 학습, 전산 유체 역학, 일기 예보 등에 사용
    업로드중..

MPI

  • message passing paradigm 에 기반 함 (process 는 explicit communication 으로 data 를 교환)
  • 각 프로세스는 자체 메모리 공간이 있음
  • 수천 개의 노드가 있는 대규모 시스템에서 탁월 함. HPC 에 적절. 대규모 시뮬레이션에 자주 사용.
  • 복잡성이 증가하고 개발이 어려움
  • 다른 아키텍처 노드로 이식성이 뛰어 남
  • 대규모 기후 모델링, 분자 역학 시뮬레이션 등에 활용
    업로드중..

OpenMP vs MPI 중 어떤걸 사용해야 할 지 선택하는 경우

Case1

메모리가 부족하고 Operations 이 빠르다면, MPI 사용이 적절
-> 통신을 최소한으로 제한하면서 메모리를 최대한 확보

Case2

dataset 이 작고 App 속도를 올리고 싶은 경우 OpenMP 가 적절 (사용이 쉬움)

Case3

더 많은 메모리 (= 더 많은 node) 와 계산 속도를 최대한 높이고 싶은 경우

  • node 당 코어가 8개 이하인 경우 OpenMP 의 overhead (thread 시작 등) 이 processor-internal MPI communication (= share memory 에서의 MPI message 를 보내는 것) 보다 큼
  • 하지만 node 당 코어가 16개 이상인 경우 MPI 와 OpenMP 를 동시에 쓰는게 유리 (하이브리드)

결론

  • 항상 1개의 node 에서만 실행된다면 OpenMP 가 유리

  • 대부분의 과학 코드는 다중 코어 노드를 완전히 사용하려고 할 때, 하이브리드 접근을 함.

  • hardware thread 지원이 될 때, thread-level parallelism 을 하는게 합리적임

  • MPI rank 가 올라가면 communication 이 증가하고, collective operation 이 값 비싸짐

  • 계산 작업이 독립적이고, communication 이 많이 필요하지 않다면 MPI 병렬 처리가 의미가 있음

  • SMP or NUMA 아키텍처에서는 OpenMP 를 사용하지 않을 이유가 없음. OpenMP 와 MPI 는 완벽하게 함께 작동 가능함. OpenMP 는 각 node 에서 쓰고, node 간에는 MPI 를 씀. (hybrid programming) 이 방법이 고성능 컴퓨팅의 주류임

  • Network latency 는 보통 수 us 임. (operation 수천번 할 시간). 만약 Data 를 전송 했는데 계산량이 적다면, messaging overhead 가 더 커서 효율이 오히려 떨어 짐.

출처
https://stackoverflow.com/questions/11332018/mpi-vs-openmp-for-a-shared-memory
https://www.quora.com/Why-would-adding-MPI-slow-down-my-CUDA-OpenMP-parallel-program-rather-than-speed-it-up

profile
복습용 저장소

0개의 댓글