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 |