병렬 프로그래밍 모델은 다수의 연산을 동시에 수행하도록 설계된 컴퓨팅 환경에서 프로그램을 기술하고 구현하기 위한 추상적 틀을 의미한다. 이러한 모델은 하드웨어 구조, 메모리 접근 방식, 동기화 메커니즘 등을 추상화하여 개발자가 병렬 알고리즘을 효율적으로 설계·구현하도록 지원한다.
주요 유형
| 유형 | 특징 | 대표적인 모델 |
|---|---|---|
| 공유 메모리 모델 | 모든 프로세서가 동일한 물리적 메모리를 공유한다. 스레드 간에 메모리 주소가 동일하게 매핑되며, 락, 뮤텍스, 원자 연산 등으로 동기화한다. | POSIX Threads (pthreads), OpenMP, Cilk, Intel Threading Building Blocks (TBB) |
| 분산 메모리 모델 | 각 프로세서가 독립된 로컬 메모리를 보유하고, 통신은 명시적인 메시지 전달을 통해 이루어진다. 데이터 이동 비용이 명시적으로 고려된다. | MPI (Message Passing Interface) |
| 하이브리드 모델 | 공유 메모리와 분산 메모리 양쪽의 특성을 결합한다. 예를 들어, 노드 간에는 MPI, 노드 내부에서는 OpenMP를 사용하는 방식이 일반적이다. | MPI+OpenMP, CUDA (GPU와 CPU 결합) |
| 데이터 병렬 모델 | 동일한 연산을 대규모 데이터 집합에 적용한다. 연산은 데이터 요소마다 독립적으로 수행된다. | CUDA, OpenCL, SIMD (Single Instruction, Multiple Data) 명령어 집합 |
공통 요소
-
추상화 수준
- 스레드 수준: 프로그래머가 직접 스레드 생성·관리·동기화를 수행한다 (예: pthreads).
- 작업/루프 수준: 컴파일러나 런타임이 병렬 작업을 자동으로 분할·스케줄링한다 (예: OpenMP
#pragma parallel for).
-
동기화 메커니즘
- 락, 뮤텍스, 세마포어, 배리어, 원자 연산 등 다양한 방법이 제공된다.
- 모델마다 기본 제공되는 동기화 원시가 다르며, 성능과 복잡도에 영향을 미친다.
-
메모리 일관성 모델
- 강형 일관성: 모든 작업이 메모리 업데이트를 즉시 보이는 모델 (예: 일부 실시간 시스템).
- 약형 일관성: 업데이트가 일정 지연 후에 일관성을 갖는 모델 (예: 대부분의 현대 다중코어 CPU).
-
스케줄링
- 정적 스케줄링: 컴파일 타임에 작업 할당이 결정된다.
- 동적 스케줄링: 런타임에 작업 부하에 따라 동적으로 할당된다. OpenMP와 TBB는 동적 스케줄링을 지원한다.
활용 분야
- 과학·공학 시뮬레이션: 대규모 수치 해석, 기후 모델링, 유체 역학 등에서 높은 연산량을 병렬화한다.
- 데이터 분석·머신러닝: 대용량 데이터 전처리, 신경망 학습 등에서 GPU 기반 데이터 병렬 모델이 널리 사용된다.
- 실시간 시스템: 멀티코어 임베디드 장치에서 응답성을 확보하기 위해 경량 스레드 모델이 활용된다.
- 고성능 컴퓨팅(HPC): 슈퍼컴퓨터 클러스터에서는 MPI와 OpenMP를 조합한 하이브리드 모델이 일반적이다.
한계 및 고려 사항
- 디버깅 난이도: 경쟁 상태·데드락·메모리 일관성 오류 등 비동기적 동작으로 인한 버그 탐지가 어려울 수 있다.
- 성능 포터블리티: 모델에 따라 특정 하드웨어에 최적화된 코드가 다른 플랫폼에서 성능 저하를 초래할 수 있다.
- 스케일링 한계: 통신 오버헤드, 메모리 대역폭, 락 경합 등은 병렬 효율을 제한한다.
병렬 프로그래밍 모델은 현대 컴퓨팅에서 다중 코어 및 다중 노드 환경을 활용하기 위한 핵심적인 설계 개념이며, 다양한 하드웨어 및 응용 분야에 맞추어 여러 형태가 지속적으로 발전하고 있다.