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에서 사용되는 개념을 살펴봤는데요, 다음 포스팅에서는 예제를 통해서 저 요소들이 어떻게 쓰이는지 알아보는 시간을 가지겠습니다.

안녕하세요. 이번에는 "병렬 프로그래밍 이야기"라는 카테고리로 글을 쓰게 되었습니다. 말 그대로 병렬 프로그래밍에 관련된 자료를 정리할 예정입니다.

병렬 프로그래밍이라는 단어가 별로 익숙치 않으시는 분도 많으실 거 같은데요, 말 그대로 '한 작업을 여러 컴퓨터에게 나누어 일을 시키는 작업'입니다. 그냥 알아서 나눠서 시키면 되지 않을까? 란 생각을 하시는 분도 계실지 모르지만, 이 작업이 그렇게 간단하게 알아서 되는 작업은 아닙니다. 직접 병렬화 코드를 짜 주어야 합니다.

이 때, 병렬화를 위해서 자주 쓰이는 몇가지 언어가 있습니다. OpenMP, OpenMPI, OpenACC 등이 있지요. 저는 그 중에서도 MPI에 대해 정리를 해 볼 생각입니다.


왜 그런고 하니, 제가 병렬 프로그래밍 관련 자료를 열심히 찾아보던 중에, 한글로 된 MPI 관련 자료가 그리 많지 않다는 사실을 깨달아서 직접 정리를 해 보면서 공부도 하자! 라는 생각에 시작하였습니다.

메시지 전달 인터페이스(Message Passing InterfaceMPI)는 주로 C와 Fortran에서 쓰이는 병렬화 프로그래밍입니다. 각각의 프로세스를 관리할 수 있고, 각 프로세스마다 통신을 하며 작업을 할 수 있게 되어있죠.

먼저 MPI 시스템의 기본 구조를 정리하는 것 부터 시작하여, 점 대 점 통신, 집합 통신, 토폴로지 등의 내용을 정리할 예정이구요, 예제들도 이곳저곳에서 찾아보며 작성해 볼 생각입니다.

그럼 같이 빢치는재밌는 병렬 프로그래밍을 공부해 봅시다!

+ Recent posts