'#슈퍼컴퓨팅'에 해당되는 글 1건
- 2019.04.23 :: 빅데이터(Big Data) 6회차 공부 - 수퍼컴퓨팅
슈퍼컴퓨팅
거대 연산 기능의 컴퓨터로 연산의 부하가 많은 응용프로그램 이용에 사용
과학 응용 소프트웨어 예
• 날씨 예측
• 기후 조사
• 분자 모델링
• 물리 시뮬레이션
• 양자 메카니즘
• 기름과 기체 확산
• 생물정보
클러스터
거대한 병렬 컴퓨팅 시스템을 설계할 때 접근 방법
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을 하는 이유는 버퍼에 쌓이지 않고 바로 쌓이게 하기 위해서 사용한다.
(메모리가 너무 작으면 쌓일때까지 기다린다음 출력하기 때문)
'빅데이터' 카테고리의 다른 글
빅데이터(Big Data) 6회차 공부 - 수퍼컴퓨팅 (0) | 2019.04.23 |
---|---|
빅데이터(Big Data) 5회차 공부 - 파이썬 (0) | 2019.03.26 |
빅데이터(Big Data) 4회차 공부 - 머신러닝 (0) | 2019.03.20 |
빅데이터(Big Data) 3회차 공부 (0) | 2019.03.19 |
빅데이터(Big Data) 2회차 공부 (0) | 2019.03.12 |
빅데이터(Big Data) 1회차 공부 (0) | 2019.03.06 |
댓글을 달아 주세요