'#MPI'에 해당되는 글 1건

  1. 2019.04.23 :: 빅데이터(Big Data) 6회차 공부 - 수퍼컴퓨팅
빅데이터 2019. 4. 23. 14:33


슈퍼컴퓨팅

거대 연산 기능의 컴퓨터로 연산의 부하가 많은 응용프로그램 이용에 사용


과학 응용 소프트웨어 예 

• 날씨 예측 

• 기후 조사 

• 분자 모델링 

• 물리 시뮬레이션 

• 양자 메카니즘 

• 기름과 기체 확산 

• 생물정보




클러스터

거대한 병렬 컴퓨팅 시스템을 설계할 때 접근 방법


1. 지리적으로 광범위한 영역에 퍼져있는 수많은 컴퓨터를 특정한 문제를 해결하기 위한 목적으로 호출하는 것(광범위)

  -인터넷과 같이 광범위한 영역의 네트워크에서 잘 작동된다.

  -분산시스템(Distributed systems)이라 한다.


2. 많은 연산 노드를 서로 인접한 거리에 위치시키는 것(근접)

  -장점으로 통신에 소요되는 시간을 절약한다.

  -연산 능력을 계산에 많이 필요한 문제를 해결 가능

  -클러스터링(clustering)이라 한다.


->슈퍼컴퓨터는 하나가 아닌 여러대를 사용하며 처리하려 한다.

아무리 좋은 컴퓨터 1대를 사용해도 사용성은 1대 이상의 능력이 나오지 않기 때문에 

여러 컴퓨터 자원을 사용하려 한다.


• 클러스터는 느슨하게 혹은 긴밀하게 종속돼 함께 동작하는 컴퓨터의 그룹이다. 

  -한 클러스터 내에 존재하는 컴퓨터를 node라고 한다.

  -한 클러스터 내에 모든 노드들은 같은 종류의 task를 수행한다.

->작업이 주어졌을 때 동시에 같은 작업을 수행하게 한다. (슈퍼컴퓨터 중요개념)

작업=task

   -모든 슈퍼컴퓨터는 클러스터이지만, 모든 클러스터는 슈퍼컴퓨터가 아니다

 


• 이종클러스터(heterogeneous cluster) 

  - 클러스터의 모든 노드가 동일한 하드웨어 구성을 갖지 않는 경우


• 베오울프클러스터(Beowulf cluster)

  - 모든 노드는 이종 클러스터와 달리 동일한 하드웨어로 구성됨 

  - 오픈 소스 기반으로 리눅스 환경에서 쉽게 클러스터를 구축 

  - 클라이언트에 보조기억장치(하드디스크)를 두지 않고 서버에만 둔다는 특징이 있다. 

     따라서 클라이언트를 추가하고 제거하기 쉽다



병렬성과 동시성

 병렬성(Parallelism) 

  - 연산 태스크가 병렬로 수행되는 것 (task가 동시에 수행된다는 것을 의미) 

  - 병렬성은 주로 연산의 양이 많은 문제의 경우 사용 

  - 연산의 양이 많은 문제는 종종 연산이 적은 하위 문제들로 분할할 수 있기 때문에 

    병렬적으로 해결할 수 있음 

  - 병렬은 직렬의 상대적인 개념(순차적이냐 동시에 수행하냐) 

  - 직렬은 하나가 수행된 이후 다른 것이 차례로 수행된다는 것을 의미

  - 병렬은 동시성(Concurrency)과 관련됨


동시성(Concurrency)

  - 많은 연산 task가 동시 처리되는 것을 의미 

  - 태스크가 같은 시간에 처리될 필요는 없다 

  - 병렬성에서는 각 노드가 같은 시간 동안 각자의 태스크를 실행한다 

  - 동시 시스템에서는 한 연산이 다른 연산을 기다리지 않고 진행될 수 있다 

  - 하나 이상의 연산이 진행될 수 있다는 것을 의미 

  - 동시성의 가장 적절한 예는 OS의 프로세스 스케쥴링이다 

  - 동시성은 순차적인 개념의 반대다




MPI(Message Passing Interface)

• 메시지 전달 인터페이스의 목적

  - 다양한 메세지 전달 프로그램을 작성하는 데 널리 이용될 메세지 전달에 대한 이식성,        효율성, 호환성의 표준을 정의하는 것 


• 플랫폼

  - 고성능 컴퓨팅(HPC), 병렬 컴퓨터, 클러스터, 분산 시스템 등이 존재하다. 

  - MPI 표준은 C, C++, Fortran으로 이식 가능한 메세지 전달 프로그램을 작성하기 위한        라이브러리 루틴의 구문과 의미를 정의한다.


• 관련 중요 요소 

  - MPI는 라이브러리를 위한 상세 사양이다. 

     - MPI 자체는 라이브러리가 아니다

  - MPI의 목적은 메세지 전달 표준이 실용적이어야 하며, 이식 가능해야 하고, 

    호환 가능해야 한다. 

  - 실제 MPI 라이브러리들은 MPI표준이 적용되는 방법에 따라 다르다.


• MPI의 특징

  - 모든 노드를 연결하는 네트워크와 분산 메모리를 포함하는 분산시스템에 최적화됨



  - 단순성: MPI 패러다임의 기본은 전통적인 통신 작업 .

  - 일반성: 병렬 아키텍처에 내장된 대부분의 시스템에 구현 가능 .

  - 성능: 구현은 기본 하드웨어의 속도와 일치할 수 있음 .

  - 확장성: 동일한 프로그램을 변경하지 않고 대규모 시스템에 적용할 수 있다.


scale out: 서버를 확장한다.

scale in: 서버를 줄인다.

scale up: 하드웨어 성능을 높인다.

scale down: 하드웨어 성능을 낮춘다.



• MPI4PY(MPI for Python) 

  - Python에서 MPI 바인딩을 제공 

  - 멀티프로세서로 구성된 컴퓨터를 사용하는 어떤 파이썬 프로그램도 실행 가능 

  - MPI-1/2/3 사양 위에 패키지로 구축됨 

  - 병렬프로그래밍의 객체지향 인터페이스를 제공 

  - MPI4PY는 어떤 Python객체에서

    - 지점 간 통신(point-to-point communication)의 전송, 수신으로 구성 

    - 군집 통신(collective communication)의 방송, 분산, 수집으로 구성 등을 제공한다.


• MPI4PY(MPI for Python) 개념 

  - MPI 랭크 및 프로세스 

  - 데이터 송수신 

  - 데이터 태깅 

  - 데이터 브로드캐스팅

  - 데이터 분산

  - 데이터 수집


• 기초 

  1. MPI는 단일 프로그램 다중 데이터(SPMD, Single-Program Multiple-Data) 개념을 사용


  2. SPMD 아키텍처 

    - 모든 프로세서(랭크라고함)는 동일한 코드를 실행 (프로세서= 랭크)

    - 각 프로세스는 다른 데이터 영역에 접근 

    - 모든 프로세스는 동시에 실행

 

 3. 랭크 

    - 병렬프로그램은 개별 프로세스로 분해된다 

    - 각 랭크는 고유한 주소 공간을 사용하기 때문에 데이터를 랭크에 따라 분할해야 한다 

    - 각 랭크는 프로그램 데이터의 일부를 자체 메모리에 보유한다 

    - 랭크는 0에서 n-1까지 순차적으로 넘버링된다.





Hello world 작성


comm = MPI.COMM_WORLD

name = MPI.Get_Processor_name() 현재 내가 돌리고 있는 프로세서 이름


sys.stdout.write("Hello World!")

sys.stdout.write("NAME: %s, my rank is %d\n" %(name, comm.rank))

system call을 하는 이유는 버퍼에 쌓이지 않고 바로 쌓이게 하기 위해서 사용한다.

(메모리가 너무 작으면 쌓일때까지 기다린다음 출력하기 때문)


posted by 마스터박 MasterPark

댓글을 달아 주세요