병렬프로그램 환경

인쇄
▶ 병렬 처리

병렬 처리란 '프로그램 내의 계산 영역을 여러 개로 나누어 각각에 대한 계산을 여러 프로세서에서 동시에 수행하는 것' 이다. 사용자는 문제를 병렬 처리하기 위해 적절한 병렬 컴퓨팅 자원과 병렬 프로그래밍 기술이 필요하다.

▶ 병렬 컴퓨팅과 계산 자원

병렬 컴퓨팅이란 문제를 해결하기 위해 다수의 계산 자원을 동시에 사용하는 것을 말하며 이를 위해 여러 개의 프로세 서를 가지는 단일 컴퓨터, 네트워크로 연결된 다수의 컴퓨터(Workstation Clusters) 또는 이 둘의 결합된 형태로 구성되는 시스템 등의 병렬 컴퓨팅 계산 자원이 필요하다.

▶ 병렬 처리의 목적

문제를 병렬로 처리하는 주된 목적은 무엇보다 프로그램의 실제 실행시간(wall-clock time)을 줄이고자 하는 것이다. 사용자는 여러 프로세서에게 작업을 분담시켜 동시에 계산을 수행하게 함으로써 프로그램의 실행시간을 단축시킬 수 있으며 또한 해결할 수 있는 문제의 규모를 키울 수 있다.

▶ 병렬 컴퓨텅의 중요성

고성능 프로세서의 지속적인 개발은 전송속도와 소형화에 대한 물리적인 한계의 비용 상승에 대한 경제적 제한 때문에 어려움 이 있다. 따라서 보다 강력하고 보다 빠른 프로세서를 기반으로 하는 고성능 단일 프로세서 시스템의 개발이 어느 정도 한계에 이르렀다. 현재 그다지 비싸지 않은 가격의 범용적인 프로세서들의 성능 또한 상당한 수준에 이르러 있기에 이러한 범용 프로 세서들을 여러개 병렬로 묶어 동시에 사용하게 함으로써 상대적으로 낮은 비용으로 사용자가 원하는 만큼의 성능 이득 효과를 누릴 수 있다.

▶ 병렬성 유형

병렬 프로그래밍을 위한 첫 단계는 문제를 보다 작은 여러 개의 문제들로 분해해야 하는 일이다. 이렇게 분해된 문제들은 각각 프로세스에 할당되어 동시에 작업이 수행되게 된다. 사용자는 해결하고자 하는 문제가 가지는 병렬성을 고려하여 가장 적합한 방식으로 문제를 나누어야 하는데, 일반적으로 병렬성 유형은 크게 데이터 병렬성(Data Parallelism)과 태스크 병렬성 (Task Parallelism)의 두 가지로 구분할 수 있다.

데이터 병렬성

: 전체 데이터를 가능한 동일한 크기로 나누어 각 프로세스에 할당하고 프로세스는 할당 받은 데이터에 대해 동일한 일련의 계산을 수행하는 것으로 도메인 분해(Domain Decomposition) 라고도 한다.

태스크 병렬성

: 각 프로세스가 서로 다른 계산을 할당 받아 수행하는 것으로 기능적 분해(Functional Decomposition)라고도 한다. 각 프로세스는 동일한 데이터 또는 서로 다른 데이터를 가지고 서로 다른 함수의 계산을 수행하게 된다.

▶ 병렬 프로그래밍 모델

공유 메모리 시스템에서 메시지 패싱을 이용한 병렬화가 가능하고, 분산 메모리 시스템에서도 변수 공유를 통한 통신(DSM : Distributed Shared Memory)을 지원하기도 하지만 병렬화의 목적이 프로그램의 실행 시간을 최대한 단축시키는데 있는한 최적화된 프로그램의 작성을 위해 사용자는 시스템 아키텍처에 따라 다른 프로그래밍 모 델을 선택해야 한다.

공유 메모리 병렬 프로그래밍 모델

: 하나의 프로세스에 속한 스레드들은 시스템 자원을 공유 하므로 다중 스레드 프로그램이 공유 메모리 아키텍처에 적합하다. 다중 스레드 병렬 프로그램의 작성 방식은 POSIX 스레드 라이브러리(pthreads)를 직접 호출하여 사용자가 스레드 생성과 작업할당을 제어하거나 소스 프로그램에 컴파일러가 지원하는 지시어를 삽입하여 컴파일러가 다중 스레드 실행 프로그램을 생성하도록 하는(OpenMP)방식이 대표적이다. 이 중 스레드 제어에 관한 사용자의 부담이 적은 후자(OpenMP)의 방식이 널리 사용되고 있다. OpenMP는 공유메모리 환경에서 다중 스레드(multi-thread)병렬 프로그램을 작성하기 위한 응용 프로그램 인터페이스(API : Application Program Interface)로 프로그램의 병렬 실행을 위해 Fork-Join 모델을 사용한다.

메시지 패싱 병렬 프로그래밍 모델

: 병렬 시스템을 구성하는 노드들이 주소 공간을 공유하고 있지 않다면 각 프로세스는 다른 프로세스들이 갱신하는 데이터에 접근하기 위해 서로 연결된 네트워크를 통하여 데이터를 주고 받아야 한다. 메시지 패싱 방식의 병렬 프로그래밍 도구로는 HPF(High Performance Fortran), PVM(Parallel Virtual Machine), MPI(Message Passing interface)등이 있으며, 이들 중 MPI가 표준으로 자리 잡았다.

하이브리드 병렬 프로그래밍 모델

: 한 프로그램 내에서 공유 메모리 모델과 메시지 패싱 모델을 모두 이용하여 프로그래밍 하는 것을 말한다. 이러한 하이브리드 프로그래밍 모델은 분산-공유 메모리 아키텍처에 적합하다. SMP로 구성된 각 노드마다 다중 스레드를 가지는 단일 프로세스를 생성하여 프로그램을 수행하는데 노드 내의 프로세서에 할당된 스레드는 메모리 공유를 통해 통신하고 서로 다른 노드 간의 프로세스는 메시지 패싱을 통하여 통신하게 된다. 같은 노드 내의 프로세스들 사이의 통신은 서로 다른 노드 간의 통신과 비교해 통신 지연시간(latency)과 대역폭(bandwidth)등이 최적화되어 있다. 따라서 분산-공유 메모리 아키텍처를 가지는 시스템 상에서의 메시지 패싱을 이용한 병렬화 수행은 일반적인 분산 메모리 시스템에서 보다 빠르게 수행된다.

SPMD와 MPMD

: 대부분의 병렬 프로그램은 SPMD(Single Program Multiple Data) 형태를 가진다. SPMD 형태 의 병렬프로그램이란 병렬 프로그램을 수행하는 모든 프로세스 또는 스레드가 동일한 하나의 프로그램을 실행하면서 프로그램 내의 함수를 서로 다른 데이터를 가지는 병렬로 실행하거나(도메인 분해) 각각 서로 다른 함수를 맡아 병렬로 실행하는 것을 (기능적 분해) 말한다. MPMD(Multiple Program Multiple Data) 형태의 병렬 프로그램은 여러 개의 프로그램으로 구성된다. 각 프로세서 또는 스레드가 각각 서로 다른 프로그램을 실행시키면서 프로그램이 필요로 하는 데이터를 통신을 통해 주고 받게 된다.

공유 메모리 병렬 프로그래밍 모델, 메시지 패싱 병렬 프로그래밍 모델, 하이브리드 병렬 프로그래밍 모델