※ 비전문가가 공부하며 정리한 자료라 잘못된 정보가 있을 수 있음
◐ 병렬 컴퓨팅은 무엇인가
직렬 컴퓨팅(Serial Computing)
일반적으로 소프트웨어는 순차적(=직렬) 계산으로 쓰여진다.
- 문제는 명령의 개별 시리즈로 나눠진다.
- 명령들(instructions)을 순차적으로 하나를 처리한 후 그 다음을 처리한다.
- 하나의 프로세서에서 명령을 처리된다.
- 언제나 하나의 명령만 처리한다.
병렬 컴퓨팅(Parallel Computing)
가장 간단한 의미로, 병렬 컴퓨팅은 계산 문제를 해결하기 위한 여러 대의 컴퓨터 자원을 동시에 사용하는 것이다.
- 하나의 문제는 동시에 해결할 수 있는 개별 문제들로 나눠진다.
- 각각의 문제는 명령의 시리즈로 더 나눠진다.
- 각각의 문제 속 명령들은 다른 프로세서에서 동시에 처리된다.
- 전반적인 제어/조정 메커니즘(대표적으로 Open Grid Scheduler)이 사용된다.
- 병렬 컴퓨팅을 위한 계산 문제 조건
- 동시에 해결할 수 있는 별개의 작업으로 쪼개질 수 있어야 한다.
- 여러 프로그램의 명령을 언제든지 실행할 수 있어야 한다.
- 단일 계산 자원보다 여러 계산 자원을 사용하여 더 짧은 시간에 해결할 수 있어야 한다.
- 컴퓨터 자원은 일반적으로
- 여러 개의 프로세서나 코어를 가진 단일 컴퓨터이다.
- 네트워크에 연결된 컴퓨터의 임의 개수이다.
병렬 컴퓨터(Parallel Computer)
- 오늘날 거의 모든 독립 실행형 컴퓨터는 하드웨어 관점에서 병렬이다.
- 다중 기능 단위[multiple functional units]
(L1 캐시, L2 캐시, branch, prefetch, 디코드, 부동 소수점, GPU(그래픽 처리), 정수 등)\ - 다중 실행 단위/코어[multiple execution units/cores]
- 다중 하드웨어 스레드[multiple hardware threads]
- 다중 기능 단위[multiple functional units]
- 네트워크는 여러 독립 실행형 컴퓨터(노드[node])를 연결하여 더 큰 병렬 컴퓨터 클러스터를 만든다.
- 예를 들어, 아래 개략도는 일반적인 LLNL 병렬 컴퓨터 클러스터를 보여준다.
- 각 계산 노드[compute node]는 그 자체로 다중 프로세서 병렬 컴퓨터이다.
- 여러 계산 노드가 Infiniband 네트워크로 연결된다.
- 특수 용도 노드, 멀티 프로세서 또한 다른 용도로 사용된다.
- 세계 대부분의 대형 병렬 컴퓨터(= 슈퍼 컴퓨터)는 소수의 잘 알려진 공급업체가 생산한 하드웨어 클러스터이다.
- (2021년 6월 기준) 레노버(Lenovo)가 36.8%로 압도적인 시장 점유율을 보이고 있다.
- 이어서 인스퍼(Inspur), 휴렛팩커드(Hewlett Packard Enterprise; HPE), 중커수광(Sugon) 아토스(Atos) 순이다.
- 무서운 점은 레노버, 인스퍼, 중커수광은 중국 회사로 총 점유율이 50%를 넘는다는 것...
- 참고로 HPE는 미국 회사, 아토스는 프랑스 회사이다.
◐ 병렬 컴퓨팅을 사용는 이유
실제 세상은 아주 복잡하다
- 자연계에서는 많이 복잡하고 상호 연관된 사건들이 동시에, 그러나 시간순으로 일어나고 있다.
- 직렬 컴퓨팅에 비해 병렬 컴퓨팅은 복잡한 현실 세계의 현상을 모델링하고, 시뮬레이션하고, 이해하는 데 훨씬 적합하다.
- 아래는 병렬 컴퓨팅을 활용 예시
- 은하 형성, 행성 운동, 기후 변화 시뮬레이션
Source : Lawrence Livermore National Laboratory / Livermore Computing Center - 혼잡 시간 교통 체증, 판구조, 날씨 예측
Source : Lawrence Livermore National Laboratory / Livermore Computing Center
- 은하 형성, 행성 운동, 기후 변화 시뮬레이션
병렬 프로그래밍을 사용하는 가장 큰 이유
1. 시간 또는 돈을 절약한다.
- 이론적으로 작업에 더 많은 리소스를 투입하면 완료 시간이 단축되고 잠재적인 비용 절감 효과가 있다.
- 병렬 컴퓨터는 값싸고 일반적인 부품으로 만들 수 있다.
2. 더 크고 / 더 많은 복잡한 문제들을 해결한다.
- 많은 문제들은 아주 크고 복잡해서 직렬 프로그램으로 해결하는 것은, 특히 제한된 컴퓨터 메모리를 감안할 때, 비현실적이거나 불가능하다.
- 예 : 페타플롭(petaflops) 및 페타바이트(petabytes) 규모의 계산 자원이 필요한 "Grand Challenge Probelms"
- 예 : 매초 수백만 건의 처리(transactions)를 처리하는 웹 검색 엔진/데이터베이스
3. 동시 실행(concurrency)를 제공한다.
- 단일 계산 자원은 한 번에 한 가지 작업만 수행할 수 있지만, 다중 계산 자원은 동시에 여러 가지 작업을 수행할 수 있다.
- 예 : Collaborative Networks는 전세계 사람들이 "가상으로" 만나 작업을 수행할 수 있는 글로벌 장소를 제공한다.
4. 멀리 떨어진(non-local) 자원들을 활용한다.
- 로컬 계산 자원이 양이 부족하거나 성능이 충분하지 않은 경우 광역 네트워크 또는 인터넷 상의 계산 자원을 사용한다.
- 예 : (2018년 5월 기준) SETI@Home은 전세계 거의 모든 국가에서 170만 명 이상의 사용자를 보유하고 있다.
5. 병렬로 구성된 하드웨어를 더 잘 사용한다.
- 현대의 컴퓨터, 심지어 노트북도 프로세서/코어가 여러 개인 컴퓨터의 구성(architecture)에서 병렬로 존재한다.
- 병렬 소프트웨어는 특히 다중 코어, 스레드 등이 있는 병렬 하드웨어를 대상으로 한다.
- 대부분의 경우, 현대 컴퓨터에서 실행되는 직렬 프로그램은 잠재적인 컴퓨터 성능을 "낭비"한다.
향후 전망
- 과거 20년이 넘는 시간동안, 훨씬 더 빠른 네트워크, 분산 시스템, 멀티 프로세서 컴퓨터 구성 (특히 데스크탑 수준)에서 나타난 추세는 병렬화가 컴퓨팅의 미래임을 분명하게 보여준다.
- 같은 기간 동안 슈퍼컴퓨터 성능은 50만 배 이상 증가했으며, 지금은 끝이 보이지 않는다.
- Exascale 컴퓨팅 경쟁은 이미 진행 중이다. 우리는 Exascale 시대에 접어들고 있다!
- Exflop = 초당 $10^{18}$회 계산
- US DOE Exascale Computing Project
◐ 병렬 컴퓨팅은 누가 쓰나
과학(Science)과 공학(Engineering)
- 역사적으로 병렬 컴퓨팅은 "the high end of computing"으로 여겨져 왔으며, 과학과 공학의 많은 분야에서 어려운 문제를 모델링하는데 사용되어 왔다.
- 대기(Atmosphere), 지구(Earth), 환경(Environment)
- 물리학(Physics) - 응용(applied), 핵(nuclear), 입자(particle), 응집 물질(condensed matter), 고압(high pressure), 핵융합(fusion), 광자학(photonics)
- 생명과학(Bioscience), 생명공학(Biotechnology), 유전학(Genetics)
- 화학(Chemistry), 분자과학(Molecular Science)
- 지질학(Geology), 지진학(Seismology)
- 기계 공학(Mechanical Engineering) - 인공기관(prosthetics)부터 우주선(spacecraft)까지
- 전자 공학(Electrical Engineering), 회로 설계(Circuit Design), 초소형 전자공학(microelectronics)
- 컴퓨터 과학(Computer Science), 수학(Mathematics)
- 방위 산업(Defense), 무기(Weapons)
산업(Industiral)과 상업(Commercial)
- 오늘날 상용 애플리케이션은 더 빠른 컴퓨터 개발에 더 큰 원동력을 제공한다. 이러한 애플리케이션은 많은 양의 데이터를 정교한 방식으로 처리해야 한다. 아래는 예시 분야이다.
- "빅데이터(Big Data)", 데이터베이스(database), 데이터 마이닝(data mining)
- 인공지능(Artificial Intelligence; AI)
- 석유 탐사(Oil exploration)
- 웹 검색 엔젠(Web search engines), 웹 기반 비즈니스 서비스(web based business services)
- 의료 영상 및 진단(Medical imaging and diagnosis)
- 제약 설계(Pharmaceutical design)
- 재무 및 경제 모델링(Financial and economic modeling)
- 국가 및 다국적 기업의 경영(Management of national and multi-national corporations)
- (특히 엔터테인먼트 산업에서) 고급 그래픽 및 가상 현실(Advanced graphics and virtual reality, particularly in the entertainment industry)
- 네트워크화된 비디오 및 멀티미디어 기술(Networked video and multi-media technologies)
- 협업 작업 환경(Collaborative work environments)
광범위한 응용
- 병렬 컴퓨팅은 현재 전세계에 걸쳐 아주 다양하게 응용되어 광범위하게 사용되고 있다.
- (2021년 6월 기준) 역시나 연구 분야에 가장 많이 쓰이고 있다.
◐ 참고문헌(References)
Lawrence Livermore National Laboratory / Livermore Computing Center - Introduction to Parallel Computing Tutorial
삼성SDS 스토리 - 병렬컴퓨팅
위키피디아 - Parallel Computing
OMNISCI - Parallel Computing
GeeksforGeeks - Introduction to Parallel Computing
'프로그래밍 (Programming) > 병렬 컴퓨팅 (Parallel Computing)' 카테고리의 다른 글
TOP500.org 통계로 보는 병렬컴퓨팅(2021년 6월 기준) (0) | 2021.10.31 |
---|
댓글