MPI를 사용하기 전에, 먼저 기본적인 개념들을 알아봅시다.


1. 프로세서 & 프로세스(Processor & Process)

먼저 프로세서와 프로세스의 차이점을 짚고 넘어가겠습니다.

프로세서는 "연산을 수행하기 위한 기본적인 하드웨어 단위"이며, 프로세스는 그 안에서 돌아가는 프로그램을 뜻합니다. 고로 한 프로세서에 한 프로세스가 돌아가는 것이 제일 효율이 좋겠죠?

OpenMP는 스레드 기준으로 작업을 할당하지만, MPI는 프로세스를 기준으로 하여 작업을 할당합니다. 따라서 OpenMP는 여러 노드를 이용한 병렬화를 시키는 것이 불가능하지만, MPI는 가능합니다(두개를 같이 사용하는 경우가 많습니다). 우리는 이 각각의 프로세스를 다루게 될 겁니다.


2. 메세지(Message)

각각의 프로세스들이 작업을 수행할 떄, 서로가 통신을 할때 쓰이는 개념입니다. MPI에서는 이 메세지를 이용해서 데이터를 주고받게 되는데요, 이 때 메세지를 어떻게 주고 받을 것인지에 따라서 프로그램의 효율이 많이 차이나게 됩니다. 통신 cost가 상당히 높기 때문이지요.


3. 태그(Tag)

메세지를 구분하기 위해서 꼬리표를 붙입니다. 한번에 여러개의 메세지를 보낼 때 활용할 수 있습니다.


4. 커뮤니케이터(Communicator)

통신할 수 있는 프로세스들의 집합입니다. 같은 커뮤니케이터 안에 있는 프로세스들끼리만 통신이 가능하고, 한 프로세스가 여러 커뮤니케이터에 묶일 수 있습니다. MPI는 기본적으로 MPI_COMM_WORLD라는 커뮤니케이터를 제공합니다.


*커뮤니케이터와 프로세서의 관계를 간단하게 그려보았습니다. MPI_COMM_WORLD 커뮤니케이터는 병렬프로그램에서 사용되는 모든 프로세스를 포함합니다.


5. 랭크(rank)

프로세스들을 구분짓는 방법입니다. 여러 프로세스를 다루게 되기 때문에, MPI에서는 이 프로세스들을 컨트롤하기 위해 랭크라는 개념을 만들었습니다. 0번부터 각 프로세스에 할당이 되며, 각각 프로세스마다 다른 일을 시킬 수 있죠.


대강의 MPI에서 사용되는 개념을 살펴봤는데요, 다음 포스팅에서는 예제를 통해서 저 요소들이 어떻게 쓰이는지 알아보는 시간을 가지겠습니다.

+ Recent posts