title: "**병렬 컴퓨팅 : Parellel Computing**"
description: "**병렬 컴퓨팅 : Parellel Computing**"
cleanUrl: /sw-engineer/parellel-computing
ogImage: "<https://anyflower.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F7570d2fc-66b1-4e23-bb3c-ff7b56842b0d%2Fe7b02e99-3b39-4330-b596-37fdae6abdd6%2FUntitled.png?table=block&id=858dd03e-3dfd-4102-b6b8-62fd133eca97&spaceId=7570d2fc-66b1-4e23-bb3c-ff7b56842b0d&width=1080&userId=&cache=v2>"
floatFirstTOC: right
병렬 컴퓨팅의 정의
- 여러 명령어가 동시에 실행되는 컴퓨팅의 한 형태. 주로 고성능 컴퓨팅(high performance computing)에서 수년간 사용되어 왔지만, frequency scaling의 물리적 제한으로 인해 근간에 들어 더욱 주목 받고 있다. 최근에는 병렬 컴퓨팅이 multicore processors로 인해 Computer Architecture에서 주된 패러다임으로 자리잡아가고 있는 실정.
병렬 컴퓨팅의 특징
- 병렬 컴퓨터 프로그램은 순차적(sequential) 프로그램보다 더 어려운데 동시성(concurrency)는 경쟁 조건(race condition)과 같은 새로운 종류의 잠재적 버그를 유발하기 때문이다..
- 서로 다른 작업 간의 통신(communication)과 동기화(synchronization)는 통상 뛰어난 성능을 이루는 데 가장 큰 장벽이 되곤하며 전력 소비 역시 병렬 컴퓨팅에서 주요 고려사항임.
- 병렬화에 의한 프로그램의 속도 향상은 암달의 법칙을 따른다.
- (순차를 포함한) 병렬 컴퓨터와 프로그램 분류에는 주로 Flynn의 분류 체계를 따른다(SISD, SIMD, MISD, MIMD).
병렬성(parallelism)의 종류
- 비트 수준 병렬성(Bit-level parallelism) : 프로세서가 사이클 당 처리하는 정보의 량, 즉 word 크기를 높이는 방법. 초기의 8bit 마이크로프로세서에서 시작해 8bit, 16bit를 거쳐 32bit가 20여년간 주로 사용되다가 근래에는 64bit로 넘어가는 실정.
- 명령어 수준 병렬성(Instruction level parallelism) : 다중 상태(multi-stage)의 명령어 파이프라인 뿐 아니라 (function unit을 통해) 동시에 하나 이상의 명령어를 실행하는 수퍼스칼라(superscalar) 프로세서를 나타냄. 주로 수퍼스칼라를 설명할 때 사용.
- 데이터 병렬성(Data parallelism) : 여러 프로세서에 액세스하는 형태.
- 작업 병렬성(task parallelism) : ...
메모리와 통신
- 병렬 컴퓨터에서 주기억 장치는 (단일 주소 공간 내에서 모든 프로세스 요소가 공유되는) 공유 메모리 형태와 각각의 프로세스 요소가 자신만의 지역 주소 공간을 갖는 분산 메모리(distributed memory) 형태로 분류된다. 분산 메모리란 메모리가 논리적으로 분산됨을 의미하지만 종종 물리적으로 분리됨을 암시하기도 한다. 분산 공유 메모리(distributed shared memory)는 이들 두 방식이 혼합된 것으로서, 프로세싱 요소는 자신만의 지역 메모리 뿐 아니라 비지역적 프로세서의 메모리에 에 액세스하기도 한다.
모든 주 메모리에 동일한 지연률(latency)와 대역폭(bandwidth)으로 액세스 가능한 컴퓨터 아키텍처는 Uniform Memory Access(UMA) 시스템이라 하며 통상 (물리적으로 분산되지 않은) 공유 메모리 시스템이 여기에 속한다. 또한 이러한 속성을 지니지 않은 아키텍처는 Non-Uniform Memory Access(NUMA)로 알려져 있다. 분산 메모리 시스템은 NUMA에 속한다.
병렬 컴퓨터에서는 하나 이상의 위치에 동일한 값을 저장하는 캐시(cache)를 구성하기가 어려우며, 이로 인해 잘못된 연산을 수행할 여지가 많다. 이러한 컴퓨터는 캐시 값을 추적하고 전략적으로 일소(purge)함으로 캐시 일관성을 이루는 캐시 일관성 : Cache Coherency 시스템을 필요로 하며, Bus snooping(sniffing)은 이를 구현하는 가장 흔한 방법중 하나이다. 하지만 대규모의 고성능 캐시 일관성(cache coherence) 시스템 설계는 매우 어려우므로, 공유 메모리 컴퓨터 아키텍처는 분산 메모리 시스템에 비해 규모 확장이 어렵다.
프로세서 대 프로세서, 프로세서 대 메모리간 통신 H/W는 여러가지 방법으로 구현 가능하며, 그 방법으로서 공유(multiported, multiplexed) 메모리 기법 뿐 아니라 공유 버스 또는 star, ring, tree, hypercube, n-dimensional mesh 등의 여러 topology를 통해 상호 연결된 네트워크가 사용된다.
병렬 컴퓨터의 종류(classes of parallel computers)