병렬계산을 위한 컴퓨터 구조들 by 바죠

병렬처리:

컴퓨터에서 병렬처리란 프로그램 명령어를 여러 프로세서에 분산시켜 동시에 수행함으로써 빠른 시간 내에 원하는 답을 구하는 작업을 일컫는다. 초기의 컴퓨터에서는 한번에 오직 하나의 프로그램만 수행되었다. 예를 들어, 계산 수행에 1시간 걸리는 프로그램과, 테이프에서 데이터 읽기에 1시간 걸리는 프로그램이 있다면, 이 두 프로그램을 수행시키는데는 총 2시간이 소요되었다. 초기의 병렬처리는 이 두 프로그램이 섞여서(interleaved) 수행되도록 하는 방법이었다. 즉, 한 프로그램이 입출력을 시작하여 끝나기를 기다리는 동안, 다른 계산 수행을 하는 프로그램이 실행될 수 있도록 하여 1시간 조금 더 걸리는 시간에 작업을 마치는 방법이었다. 물론, 병렬계산의 결과는 사용하는 컴퓨터의 수에 상관없이 같아야 한다.

다음 단계의 병렬처리는 멀티프로그래밍이었다. 멀티프로그래밍 시스템에서는 여러 사용자가 수행시킨 여러 프로그램이 있을 때 한 프로그램이 프로세서를 짧은 시간 동안 차지하여 작업을 수행시키고, 운영체계가 그 다음 프로그램이 수행되도록 하는 방식으로 작업을 하였다. 사용자에게는 모든 프로그램이 동시에 수행되는 것처럼 보인다. 이 시스템이 처음 봉착한 문제는 여러 프로그램이 한 자원을 집중적으로 사용할 때 효율적으로 해결해주지 못해서 나타나는 데드록 현상이었다.

벡터 프로세싱은 한 번에 한 개 이상의 일을 수행하려는 또 다른 시도였다. 이런 시스템에서는 한 개의 명령어로 두 어레이의 데이터를 더하거나 뺄 수 있는 기능이 추가되었다. 이런 기능은 벡터나 매트릭스 계산이 빈번히 나타나는 많은 엔지니어링 프로그램에서 매우 유용하게 이용되었다. 하지만 이런 계산을 많이 필요로 하지 않는 프로그램에서는 큰 효용이 없었다.

그 다음에 개발된 병렬처리의 기법은 멀티프로세싱이었다. 이 시스템에서는 두 개 이상의 프로세서가 한 프로그램을 같이 수행하여 작업을 마쳤다. 초기 단계에서는 주종(master/slave)관계의 구조였다. 한 프로세서(master)가 시스템의 모든 작업을 관장하도록 설계되었고, 다른 프로세서(slave)는 주 프로세서가 부여한 일만을 수행하였다. 이런 구조로 설계된 것은 그 당시에는 여러 프로세서가 협동하여 시스템 자원을 사용하는 것에 대한 기술이 부족했었기 때문이다.

이러한 문제를 해결하면서 나온 것이 SMP이다. SMP에서는 각 프로세서가 동등하게 시스템 작업의 흐름을 제어하는 기능이 있다. 원래의 목표는 SMP를 단일 프로세서가 멀티 프로그래밍을 하는 것처럼 보이게 하는 것이었다. 하지만 엔지니어들은 어떤 명령어의 순서를 바꾸어 실행시킴으로써 성능을 10~20% 향상시킬 수 있다는 것을 알아냈고, 프로그래머들은 좀더 복잡하게 프로그램을 하도록 주문 받게 되었다 (이러한 것은 두 개 이상의 프로그램이 같은 인자에 읽기나 쓰기를 동시에 실행할 때에만 나타난다. 따라서 복잡하게 프로그램해야 되는 경우는 소수의 특정한 프로그래머에게만 필요하다).

SMP시스템의 프로세서 수가 증가함에 따라 시스템의 한 편에서 다른 모든 부분으로 데이터를 전파시키는데 걸리는 시간도 증가했다. 프로세서의 수가 수십 개를 넘어가면 프로세서 수를 증가시킴으로 얻어지는 성능 향상이 너무 적어지게 된다. 전파 속도가 길어지는 문제를 해결하기 위하여 메시지 패싱 시스템이 고안되었다. 이런 시스템에서는 데이터를 공유한 프로그램이 특정 인자에 새로운 값이 할당되었다는 것을 알리기 위해 메시지를 전송한다. 그 인자의 새로운 값을 시스템의 모든 부분에 방송하는 대신에 그 값을 필요로 하는 프로그램에게만 전송한다.

공유 메모리를 사용하는 대신 프로그램간 메시지 전송을 위해 네트웍를 이용하는 방식도 등장했다. 이렇게 함으로써 한 시스템 내에 수백 개나 수천 개의 프로세서가 효율적으로 함께 작동할 수 있게 되었다(확장성이 좋다는 표현을 쓴다). 이러한 시스템을 MPP시스템이라 부른다.

MPP에서 효율적으로 수행되는 프로그램들은 방대한 데이터를 처리할 때 프로그램을 여러 독립적인 부분으로 나누어 실행시킬 수 있는 것들이다. 예를 들어 데이터마이닝 같은 경우 정적인 데이터베이스에 대하여 여러 가지 독립적인 검색을 수행한다. 또 체스 게임 같은 인공지능에서는 여러 가지 다른 수를 분석하여 볼 필요가 있다. 많은 경우 MPP시스템은 프로세서의 클러스터로 구성된다. 각 클러스터는 SMP처럼 작동하며, 메시지 패싱은 클러스터간에서만 일어난다. 인자를 어드레싱하는 것이 메시지를 통해서나 메모리 어드레스를 통해 가능하기 때문에 어떤 MPP시스템은 NUMA 시스템이라 부른다.

SMP는 비교적 프로그래밍이 간편하지만 MPP는 그렇지 않다. SMP시스템은 다뤄야 할 데이터 량이 너무 방대하지 않다면 거의 모든 종류의 프로그램에 잘 맞는다. 하지만 방대한 데이터를 다루는 데이터마이닝은 MPP만이 다룰 수 있다.

MPP (massively parallel processing) ; 고도 병렬처리

MPP[엠피피]란 프로그램을 여러 부분으로 나누어 여러 프로세서가 각 부분을 동시에 수행시키는 것을 말한다. 이때 각 프로세서는 각기 운영체계메모리를 따로 가지고 일을 수행하며 각 프로세서간에는 메시지 패싱과 같은 기법을 이용하여 통신을 한다. 따라서 하나의 프로그램을 수행하는데 수 백 혹은 수 천개의 프로세서를 이용할 수 있다. MPP의 성능을 제대로 발휘하려면, 프로그램을 독립적으로 수행되는 여러 부분으로 나누고, 각 프로세서가 다른 프로세서와 정보를 주고받는 일을 최대한 효율적으로 할 수 있는 하드웨어 구조와, 이를 뒷받침하는 운영체계의 성능이 잘 조화를 이루어야 한다.

보통 MPP시스템은 SMP와 비교하여 loosely coupled 시스템이라 부르기도 한다. SMP시스템에 비하여 MPP시스템은 여러 데이터베이스를 동시에 검색하는 의사결정시스템이나 데이터웨어하우징 시스템에서 보다 나은 성능을 나타낸다. 또한 같은 패턴이 반복되는 이미지 프로세싱에도 적합한 것으로 알려져 있다.

----------------------
본래 컴퓨터란 것이 저장된 프로그램을 가져와서 순서대로 일을 처리하는것이다. 40여년 동안 그러한 개념에는 별다른 특이한 현상이 없었다. 다만, 처리 속도에서 엄청난 발전이 있어왔다. von Neumann Architecture

그러한 컴퓨터의 처리속도는 지금도 매우 발전하고 있다. 하지만, 지금 상황에서 지금의 컴퓨터 보다 항상 10배 정도 빠른 컴퓨터를 남보다 빨리 생산하기란 매우 어럽게 되어가고 있다. 기술적, 경제적인 이유등이 있을 수 있을 것이다.
여러개의 컴퓨터를 네트워크로 연결하는 방식이 도입된다. 즉, 동시에 하나의 아웃풋을 내기위해서 여러대의 컴퓨터가 동시에 일을 한다. 메모리-씨피유를 한 대의 컴퓨터로 볼수 있다. 이런식으로 1000 대 이상을 연결하면 보통 massively parallel 컴퓨터라고 부른다. 네트워크의 통신 능력(latency+bandwidth)이 매우 중요해진다. Distributed Memory, 네트워크 연결에 따라서 컴퓨터의 성능이 많이 달라질 수 있다. 미리넷 vs fast ethernet 최근 많은 연구실에서 수십대의 PC컴퓨터들을 ethernet 으로 연결하여 사용하고 있다. 물론, 리눅스를 이용한 것이 대부분이다. 높은 가격대비 성능을 자랑한다.
돈은 좀 들지만, 보다 큰 메모리를 사용하는 방식도 있다. 이는 메모리에서 씨피유로 데이터를 가져오는데 걸리는 시간이 매우 짧다는 점에 착안한 것이다. 물론 비싼 기계가 되고 말것이다. 하지만, 사용자 수준에서는 매우 편리할 것이다. Shared Memory, Symmetric Multiprocessor (SMP) machines : Uniform Memory Access (UMA), Non-Uniform Memory Access (NUMA)
바로 위의 두가지 아이디어를 합친 기계형식이다. 메모리도 상당히 크고 씨피유도 많이 탑제된, 그리고 그들이 네트워크로 연결된 형식의 기계가 나오는 것은 자연스러워 보인다. 가격은 올라가겠지만. 세계에서 가장 빠른 컴퓨터는 아래의 형식을 취하고 있다. Hybrid Distributed-Shared Memory
  아래의 표에서 알 수 있듯이 MPI를 이용한 병렬 프로그램 작성이 가장 일반적인  방식이다.  하지만, 컴퓨터간 통신능력 (단위시간당 전송하거나 전송받는 데이터량)은 컴퓨터 계산 능력(단위시간 당 계산하는 능력)에 비해서 매우 느리다.

예를 들면, 통상 컴퓨터들의 경우 수백 megaFlops 이상의 계산 능력을 가지고 있다. 하지만, 120 microsecond (기가비트 이더넷을 사용할 경우)는 정말 데이터 통신 없이 그냥 접속을 확인하는데에만 걸리는 시간이다. 물론, 데이터 양이 많을 수록 전송하는데 더 많은 시간이 걸린다.

물리학자를 위한 MPI
http://ihlee.kriss.re.kr/~ihlee/compphys/mpi_phys.htm
컴퓨터의 기종에 관계없이 일반적인 병렬처리를 위해서는 MPI를 사용하는 것이 일반적으로 유리하다. 물론, OpenMP와 같이 거의 자동적으로 소스 코드를 병렬처리에 맞도록 재설계해 주는 경우 (kapf90 -conc -psyntax=openmp prog.f)도 있지만 SMP (여러 개의 프로세서가 버스를 통하여 하나의 거대한 메모리에 연결된 것. 공유메모리. 이와 같은 장비는 상대적으로 고가일 수밖에 없다. 프로세서 숫자의 확장에 상대적으로 심각한 제한이 있다. Compaq ES40, Sun E10000, HP N-class)와 같은 환경에서만 작동하며 일반적인 적용이 불가능하다. 위에서 언급한 방식으로는 유저가 원하는대로 자동으로 병렬화가 안된다. SMP기종과 달리 일반적인 클러스터 장비들에서는 모든 메모리가 모든 프로세서들에게 연결되어 있지 않다. C, (C++)언어나 포트란언어에서 같은 방식으로 사용되는 MPI를 이용하는 것이 병렬계산의 기본이다. 유저에 따라서는 PVM과 MPI를 동시에 사용하는 아주 전문적인 유저들 (병렬 계산 스페셜 리스트라고 할 만하다.)도 있다. 지역적으로 분산된 장비들을 사용하는 분산컴퓨팅 (distributed computing, cluster computing 과는 구별되는 것이다.) 방식에서도 MPI를 이용할 수 있다. http://www.myri.com  : MPICH-GM,  http://www.niu.edu/mpi  : MPICH-G2

Top 10 Reasons to Prefer MPI Over PVM

1. MPI has more than one freely available, quality implementation. (LAM,MPICH,CHIMP)

2. MPI defines a 3rd party profiling mechanism.

3. MPI has full asynchronous communication.

4. MPI groups are solid and efficient.

5. MPI efficiently manages message buffers.

6. MPI synchronization protects 3rd party software.

7. MPI can efficiently program MPP and clusters.

8. MPI is totally portable.    컴퓨터의 기종에 상관없이 사용될 수 있어야 한다.

9. MPI is formally specified.

10. MPI is a standard.

조금 황당하지만, 병렬컴퓨터의 새로운 구조가 있다. 다름 아닌 인터넷으로 연결된 피씨들이다. 여기서 피씨들은 그야말로 "여러분들의 피씨들"이다. 한 마디 말로서 "여러분들의 피씨들"을 빌려 사용한다. 외계인을 찾는 seti@home 프로젝트가 이러한 형식의 병렬계산컴퓨터 사용의 시작이다. 홈페이지를 개설하고 "여러분들의 피씨들"이 도움이 된다고 한다. 그리고 다운로드할 수 있는 프로그램들을 홈페이지에 올려둔다. 그리고 사용자들이 자신의 피씨를 사용하지 않는 시간에 들어가서 계산을 하고 결과물을 가져온다. 컴퓨터 자원을 지금 당장 제공할 수 있는 사람들의 숫자가 쉽게 1000 명 이상일 경우 상당히 많은 계산을 할수도 있다. 물론, 병렬 알고리듬에 잘 부합하는 문제들만 풀수 있을것이다. 새로운 문제 풀이 방식을 도입하고 적용하는 경우가 많다.

------------------------

------------------------

MPI 핵심 분산 계산 기능들:
http://incredible.egloos.com/3755171


핑백

덧글

댓글 입력 영역

최근 포토로그



MathJax