병렬 처리 프로그래밍
공유 메모리
- 공유 메모리 병렬프로그래밍 모델은 SMP나 CMP 등의 공유 메모리 시스템 구조에 적합한 방식으로써 다수의 코어(멀티코어인 경우)의 협력을 통해 병렬화를 수행하는 모델
- 흔히 말하는 멀티스레드 병렬 프로그래밍이 이 방식
여러 개의 스레드를 생성한 후 다수의 코어로 분배하여 병렬처리를 수행하는데 스레드 생성 및 처리를 위해 일반적으로 유닉스 내 posix계열은 pthread를 사용한다
물론 윈도우도 지원한다
- 하지만 pthread는 스레드 생성을 지원하는 API이기 때문에 생성부터 관리, 동기화 등 모두 제어 필요
- 따라서 pthread를 이용하여 별도의 스레드를 생성하기보다 OpenMP같은 병렬 프로그래밍 API를 이용하여 병렬 프로그래밍을 구성
메시징
- 공유 메모리 구조가 아닌 각 메모리 블럭이 분리되어 있는 경우에는 각 프로세스나 스레드 간 통신이 필요
- 사실 프로세스 말고 스레드도 각 스레드 레지스터는 분리되어 있어 컨텍스트 스위칭에 의한 메시지 전달이 이루어짐
메시징 모델
MPI (Message Passing Interface)
- 분산 메모리 시스템 구조에 사용되는 병렬 프로그래밍 모델
- 노드 간에 서로 네트워크를 통해 메시지를 주고받는 형태로 정보를 공유
- 네트워크 상의 통신 속도가 성능의 매우 중요
- 고속의 연산처리를 필요로 하는 계산에 사용 (기상청 기상컴퓨터 등)
Map Reduce
- 하둡 클러스터에 사용되는 맵리듀스는 빅데이터 처리에 적합하게 설계된 모델
- HDFS라는 분산 파일 시스템을 사용하여 대규모의 데이터를 저장/처
- Data Replica 특성을 이용하여 특정 노드에 장애가 발생되더라도 다른 노드를 통하여 중단 없이 작업을 진행
가속기 병렬 프로그래밍
- 지금까지 살펴본 모델은 모두 범용 CPU를 활용한 병렬 프로그래밍 모델
- 범용 CPU가 아닌 특정 연산에 특화된 가속기를 활용하여 병렬화하는 모델을 구분
- 해당 방식을 가속기 병렬 프로그래밍 모델이라고 함
가속기 병렬 프로그래밍의 구성
- 가속기를 활용한 연산처리 방식은 단순하고 반복적인 수치계산에 최적화된 CPU, DSP, GPU등을 활용하는 프로그래밍 모델
- 수치계산에 최적화되어 있으므로 데이터 자체의 병렬화에 많이 사용됨
- 현재 병렬컴퓨팅 시장은 GPU를 활용한 GPGPU 기술과 GPGPU를 지원 프로그래밍으로 이분되어 있음
- NVIDA에서 만든 CUDA/CUDA 프레임워크 OpenACC
- 크로노스 그룹에서 만든 OpenCL
참고 꼭 보기