본문 바로가기
HPC

MPI 작업 시 효율/성능 분석: SMP, DMP, Slurm 연관 및 프로세스 배치 전략

by Yoon_estar 2025. 4. 23.
728x90

개요

고성능 컴퓨팅(HPC) 환경에서 병렬 처리는 필수 요소이며, 특히 MPI(Message Passing Interface)를 활용한 병렬 작업은 대규모 연산 처리에 핵심적입니다. 이 글에서는 MPI 병렬 처리 시 사용하는 메모리 모델(SMP와 DMP)과 Slurm 스케줄러의 프로세스 배치 방식(Round-Robin vs Fill-Up)에 대해 HPC 전문가 관점에서 자세히 정리하겠습니다.

1.Serial,SMP와 DMP란 무엇인가?

🔹Serial (직렬 처리)

  • 정의 : 프로그램이 단일 프로세스, 단일 스레드로 순차적으로 실행되는 방식
  • 특징 :
    • 개발이 간단하고 직관적
    • 디버깅이 쉬움
    • CPU 한개만 사용하므로 다중 코어/노드의 이점을 살릴 수 없음

🔹 SMP (Symmetric Multiprocessing)

  • 정의 : 단일 노드에서 여러 CPU(또는 코어)가 하나의 물리 메모리를 공유하며 병렬 처리
  • 구성 예시 : 하나의  서버에 32코어에 CPU, 모든 코어가 공유 메모리 접근
  • 장점
    • 빠른 메모리 접근 속도 (shared memory)
    • 스레드 간 통신 비용이 적음
    • 캐시 locality 활용 가능 
  • 단점
    • 노드 내부의 자원 한계로 인해 확장성이 낮음
    • false sharing, cache coherence 문제가 발생할 수 있음

🔹DMP(Distributed Memory Parallelism)

  • 정의 : 여러 노드가 각각 독립된 메모리를 갖고, 노드 간에는 MPI 통신을  통해 데이터 교환
  • 구성 예시 : 10대의 서버가 네트워크로 연결된 클러스터, 각 노드는 독립된 RAM 보유
  • 사용 기술 : MPI, OpenMPI, MPICH 등
  • 장점
    • 뛰어난 확장성(수천 개 노드까지 확장 가능)
    • 자원 독립성과 분산 처리에 유리
  • 단점
    • 통신 오버헤드 존재(특히 네트워크 지연, bandwidth 병목)
    • 복잡한 통신 프로그래밍 필요

🔸 SMP vs DMP 핵심 비교표

항목 SMP(공유 메모리) DMP(분산 메모리)
🧠 메모리 구조 공유 독립
🧩 구성 범위 단일 노드 다중 노드
📦 대표 기술 OpenMP, pthreads MPI, OpenMPI
🔄 통신 방식 메모리 공유 메시지 패싱
🧰 확장성 제한적 우수

 

🔸 OpenMP vs OpenMPI: 완전히 다른 개념

항목 OpenMP OpenMPI
🧠 목적 단일 노드 내에서 스레드 기반 병렬 처리 다중 노드 간 프로세스 기반 메시지 통신(MPI)
🧩 기반 모델 SMP (Shared Memory) DMP (Distributed Memory)
📦 기능 #pragma omp parallel로 스레드 분기 mpirun, MPI_Send, MPI_Bcast 등으로 노드간 데이터 전달
🔄 메모리 접근 메모리 공유 메모리 독립(복사/전송)
🧰 주요 사용처 CPU 코어 수 많은 단일 노드 내 병렬 연산 여러 노드로 구성된 HPC 클러스터 병렬 처리
📚 관련 라이브러리 컴파일러 내장(Intel, GCC) 별도 설치 : OpenMPI, MPICH, Intel MPI 등
🤝 함께 쓰일 수 있는가? 함께 사용 가능 OpenMP와 함께 사용하여 노드 내부/외부 병렬 분리

 

🔸 OpenMP는 SMP인가?

OpenMP 자체는 하드웨어 구조가 아니지만, SMP 시스템 위에서 동작하는 소프트웨어 병렬화 도구입니다.

  • ✅ OpenMP는 **SMP 시스템(공유 메모리 기반)**에서 성능을 최대한 발휘합니다.
  • ❗ 하지만 "OpenMP = SMP"는 틀린 표현입니다. 정확히 말하면 OpenMP는 SMP 구조를 활용하는 병렬 프로그래밍 모델입니다.

 

2. Hybrid 병렬 처리 : MPI + OpenMP

현대 HPC 환경에서는 다음과 같은 구조를 많이 사용합니다:

  • 노드 간 병렬 처리 → MPI (DMP)
  • 노드 내부 병렬 처리 → OpenMP (SMP)

 

3. Slurm에서의 프로세스 배치 전략 : Round-Robin VS Fill-Up

  • MPI 작업을 Slurm에서 제출할 때, 프로세스 배치 방식은 전체 성능에 큰 영향을 미칩니다. 

🔹 Fill-Up (Packed)

  • 설명 : 한 노드의 코어를 먼저 가득 채운 후, 다음 노드로 넘어가는 방식
  • 옵션 : srun --distribution=block:block
  • 장점 :
    • 노드 내부 통신은 빠르고 효율적 (shared memory)
    • 캐시 효율성이 높음
  • 단점 :
    • 부하가 일부 노드에 집중되어 불균형 가능

🔹 Round-Robin (Cyclic)

  • 설명 : 각 노드에 1개씩 번갈아가면서 프로세스를 분배하는 방식
  • 옵션 : srun --distribution=cyclic:cyclic
  • 장점 :
    • 부하 균형이 좋고, 전체 자원을 고르게 활용
    • 네트워크 병목이 분산됨
  • 단점 : 
    • 노드 간 통신이 많아져 MPI 통신 오버헤드 증가
    • 캐시 locality 저하

4. 성능 VS 효율 : Slurm 작업 요청 시 선택 기준

Slurm에서 MPI 작업을 제출할 때 --hint=nomultithread 또는 --cpu-bind, --distribution 같은 옵션 외에도 성능(Performance) 또는 효율(Efficiency) 중심의 자원 할당이 중요한 차이를 만듭니다.

🔸 성능 중심 배치 (Performance)

  • 설명 : 가능한 많은 노드에 작업을 분산하여 병렬 성능 극대화
  • 특징 :
    • 노드 수 증가 → 더 많은 병렬 작업 분산 가능
    • 캐시 ㅎ율 증가, 데이터 로컬리티 향상
    • Slurm은 부하 분산을 고려하여 다수 노드에 작업을 흩뿌림
  • 적합한 작업 : 
    • 계산량이 크고 통신 병목이 크지 않은 작업
    • 최대한 빨리 끝내야하는 실험성 워크로드

🔸 효율 중심 배치 (Efficiency)

  • 설명 : 적은 수의 노드에 작업을 집중시켜 자원 활용도 극대화
  • 특징 :
    • 노드 수 적음 → MPI 통신 비용 최소화
    • 전력, 자원 사용량 효율화
    • 일부 노드에 연산을 집중시켜 scheduling cost 절감
  • 적합한 작업 :
    • 자원 사용 최소화가 중요한 장기 작업
    • 실시간성이 크지 않고 효율 중심인 워크로드

✅ 실제 테스트에서도, 동일한 MPI 작업에 대해 성능 중심 전략을 택하면 여러 노드에 분산되어 빠르게 종료되었고, 효율 중심 전략을 선택하면 상대적으로 적은 수의 노드에서 실행되어 더 오랜 시간이 소요되었지만 자원 사용률은 더 높았습니다.

 

5. 성능 최적화 요령

상황 추천 모델 이유
단일 노드, 다수 코어 SMP (OpenMP), Fill-UP 빠른 shared memory 사용, 통신 없음
다중 노드 대규모 계산 DMP(MPI), Round-Robin 부하 분산, 확장성 확보
중간 규모, 최적 균형 Hybrid + Fill UP 노드 내 연산 집중 + MPI 확장성
빠른 결과 우선 성능 중심 배치 노드 분산을 통해 처리 시간 단축
자원 절약 우선 효율 중심 배치 소수 노드 집중으로 자원 사용 최소화

 

 

추가적으로, NUMA 아키텍처에서는 --cpu-bind, numactl 등의 옵션으로 메모리 접근 최적화도 고려해야 성능을 극대화할 수 있습니다.

'HPC' 카테고리의 다른 글

[HPC] CPU 성능 분석  (0) 2025.01.24
[HPC]Singularity 설치 및 사용 가이드  (0) 2024.12.05
[HPC]Singularity  (0) 2024.11.25
[Ubuntu] SGE 설치  (0) 2024.09.03
HPE (Hewlett Packard Enterprise): 고성능 컴퓨팅의 선두 주자  (0) 2024.06.11