본문 바로가기

CS/컴퓨터구조

[컴퓨터구조] Parallel Processing(3)

현재 글은 Parallel Processing(2)에서 이어지며, 컴퓨터 구조와 아키텍처 서적 및 대학에서 들은 강의를 기반으로 한다.


SMP와 클러스터의 비교

 SMP와 클러스터 방식 모두 병렬 컴퓨팅을 목적으로 하고 있으며, 다른 분야에서 두 방식 모두 상용화되어 있다.

  • SMP
    • 공유 메모리를 사용하기 때문에 관리하기 쉽다.
    • 일반적인 컴퓨터 모델과 유사하게 동작하므로 기존에 사용하던 프로그래밍 방식을 사용할 수 있으며, 기존 프로그램들을 조금씩 수정하면 병렬 동작이 호환된다.
    • 물리적 공간, 전력 소모가 적다. ( 일반적으로 작은 규모로 사용하기 때문에 당연하다. )
    • 과거부터 많이 연구되어 왔기 때문에 여러 이론들이 잘 정립되어 있으며 안정적이다.
  • Cluster
    • 확장성이 매우 좋다.
    • 가용성이 높다. 고장이 발생하더라도 다른 노드로 쉽게 대체된다.
    • 기존에 사용되던 시스템 및 장비를 이용하므로 비교적 저렴하게 구현할 수 있으므로 redundancy를 두기 쉽다.

NUMA

 SMP는 기존 프로그래밍 방식을 동일하게 사용할 수 있으나 확장성이 낮은 단점이 있다. 클러스터는 확장성이 매우 좋지만 메시지 패싱 등 기법을 이용하므로 기존 프로그래밍 방식을 사용하기 힘든 단점이 있다. 두가지 방식의 장점을 활용하고 단점을 극복하자는 측면에서 NUMA 방식이 도입되었다고 한다.

  • UMA(Uniform Memory Access)
    : 모든 메모리에 대한 접근 시간이 동일한 경우
  • NUMA(Non Uniform Memory Access)
    : 메모리의 위치에 따라 접근 시간이 다른 경우
  • CC-NUMA(Cache-Coherent NUMA)
    : 외부 메모리 접근 시 발생하는 오버헤드를 줄이기 위해 캐시를 두되, 각 캐시의 일관성을 유지하는 경우

 UMA 방식은 어떤 프로세서가 어떤 메모리 위치를 접근하더라도 동일한 접근 시간을 가지는 방식이다. 단일 공유 메모리를 사용하는 경우로, 병렬 처리에 참여하는 프로세서의 수가 증가함에 따라 메모리 사용에 대한 충돌이 자주 발생할 수 있는 문제가 있다.

 단일 메모리 접근 때문에 문제가 발생할 때 고려할 수 있는 선택 중 하나는 메모리 자체를 여러 위치로 분산하여 한번에 다수의 메모리 접근을 가능하게 하는 방법이다. NUMA는 large scale multiprocessing을 수행한다. 각 노드는 자신의 메모리를 가지고 있으며, 전체 메모리는 기존 메모리 사용 방식에 따라 매핑된다. 자신에게 가까운 메모리, 즉 노드 내의 메모리에 대한 접근 속도는 빠르지만 외부 노드의 메모리에 대한 접근은 네트워크 등 외부 연결 링크를 거쳐야 하므로 상대적으로 느린 모습을 보인다. 따라서 NUMA 구조를 사용하려면 외부 메모리를 최대한 접근하지 않도록 구현해야 한다.

 NUMA 구조에서 외부 노드의 메모리를 접근할 때 발생하는 오버헤드를 최대한 줄이기 위해 각 노드 내에 캐시를 두고, 이 캐시 사이의 일관성을 유지하는 방식을 고안했는데, 이게 CC-NUMA다.  CC-NUMA는 각 로컬 노드에 캐시를 둬서 외부 메모리에 대한 접근을 최대한 줄이므로 메모리 접근에 대한 오버헤드가 감소한다. 다만 분산 환경에서 캐시의 일관성 유지는 매우 어렵고 이 과정에서도 오버헤드가 발생하기 때문에 실제로는 그냥 캐시의 일관성을 포기하고 NUMA 방식을 그나마 사용한다고 한다.

NUMA의 장단점

 결론부터 내리면, NUMA에는 장단점이 있긴 한데, 실제로 잘 사용되지는 않는다. 

  • 장점
    • 기존 컴퓨터와 유사한 논리적 메모리 체계를 사용하기 때문에 소프트웨어 개발에 큰 변화 없이 병렬적으로 구현할 수 있다. (SMP의 장점을 공유)
    • 외부 노드에 대한 메모리 접근을 최대한 줄이도록 설계하면 사실상 내부에서 처리하는 셈이므로 오버헤드 감소 및 성능 향상으로 이어진다.
  • 단점
    • 외부 노드에 대한 접근이 많아지도록 작업을 할당하면 성능이 크게 감소할 수 있다.
    • 메모리가 SMP처럼 transparent 하지는 않다. ( 이 부분은 검색이 필요 )
    • 메모리가 전반적으로 연결되어 있으므로 한 노드의 메모리가 망가지면 다른 컴퓨터들도 작동하기 어려워진다. 즉 가용성이 낮아진다.

MPP(Massively Parallel Processing)

 초 대규모 프로세싱을 위한 방식으로, 클러스터처럼 여러개의 노드를 두고 메시지를 주고 받으면서 병렬 연산을 수행한다. 단, 클러스터가 이미 존재하는 시스템(상용 컴퓨터, 이더넷 네트워크)을 사용하는데 비해 MPP의 경우 병렬 프로세싱을 최적화하기 위한 새로운 장치 및 네트워크 구조를 사용하므로 가격이 매우 비싸며, 각 노드를 분리했을 때 독자적으로 동작할 수 있다는 보장이 없다.

 클러스터 이전에 분산 병렬 처리 시스템을 구현하는 경우 MPP 형태를 사용했다고 한다.

Interconnection Network for MPP

 MPP는 현재 사용되는 이더넷 프로토콜 및 구조를 사용하는 대신 병렬 처리 전용으로 고안된 네트워크를 이용한다. 각 네트워크는 2가지 척도를 기준으로 평가될 수 있다.

  • diameter: 다른 노드로 메시지를 보낼 때 거쳐 가는 최대 노드 수
  • degree: 주변 노드와 연결된 횟수

diameter이 낮고 degree가 높을 수록 좋다.

Linear Array

  • diameter: N - 1 ( 0 ~ N-1 )
  • degree: 2 (양 끝은 1)

 딱 봐도 효율적인 구조는 아니다.

Ring

linear array와는 달리 양 끝점이 연결되어 순환할 수 있는 구조를 가진다.

  • diameter
    • bidirectional: N / 2 
    • unidirectional: N - 1

 양 옆의 노드 이외에 멀리 있는 노드와 연결 관계가 존재하는 링을 코달 링(chordal ring)이라고 부르며, 당연히 일반적인 링보다 diameter이 감소하게 된다.

Tree / Fat Tree

(좌) 일반 트리 구조 (우) fat tree

 searching 등을 수행하기 위한 병렬 시스템에는 tree 구조도 사용된다. 이때 tree 구조는 상위 레벨로 갈수록 트래픽이 증가하여 병목 현상이 발생할 수 있다. 이를 방지하기 위해 상위 레벨로 갈수록 트래픽을 더 많이 감당할 수 있도록 채널을 더 많이 두는 fat tree 구조로 구현하기도 한다.

  • diameter: 2(k - 1), k = log2(N+1)

Mesh Network

 Mesh 네트워크는 계층 없이 주변 노드와 연결되는 네트워크 구조를 의미한다.

Torus Network

 ring과 mesh 네트워크를 적절히 섞어놓은 구조로, 확장성이 좋은 편이다.

  • diameter: 2 * ( N / 2 ) ( N * N 토러스인 경우 )

Hyper Network

3차원 형식으로 이동하는 네트워크. 각 노드에서 어떤 함수(C0, C1, C2)를 선택하는지에 따라 경로가 결정된다.

Self-routing on hypercube

 두 노드의 번호를 알면 이동 경로를 알 수 있는 특수한 구조의 네트워크.

  • 두 노드의 번호를 나타내는 2진수 비트에 대해 XOR 연산을 수행한다.
  • XOR 결과 비트의 각 자리에 대해 낮은 순서부터  x, y, z, 4차원 방향에 대응되도록 이동한다. ( 값이 1일때 이동 )

 위 예시처럼 0110 -> 1101을 원한다고 생각해보자. 0110 XOR 1101 = 1011이므로 X, Y, 4차원 방향으로 이동하면 1101에 도달할 수 있다. (1011 : 4ZYX 일때, Z = 0이므로 해당 방향으로 이동하지 않는다.)


클라우드 컴퓨팅

 위에서 언급한 여러가지 병렬 처리 방식으로 동작하는 대표적인 예시 중 하나가 클라우드 컴퓨팅이다. 

https://cloud.google.com/learn/what-is-cloud-computing?hl=ko

 

클라우드 컴퓨팅이란 무엇인가요?  |  Google Cloud

클라우드 컴퓨팅에 대해 헷갈리시나요? 퍼블릭 클라우드 컴퓨팅은 확장 가능한 주문형 서비스를 제공합니다. 클라우드 컴퓨팅 유형에 대해 자세히 알아봅니다.

cloud.google.com

  • on demand 방식으로 리소스를 제공하는 방식.
  • 일반적으로 데이터베이스가 여러 데이터 센터에 흩어져서 연결되어 있음.
  • 사용자는 내부 구조가 어떤지에 대해 알 방법이 없으며, 제품을 사용할 때 대응되는 가상화된 환경을 제공.

포그 컴퓨팅

https://www.techtarget.com/iotagenda/definition/fog-computing-fogging

 클라우드 컴퓨팅과 비슷하나, IoT 환경에서 요구하는 real-time low latency 동작을 만족하기 위해 연산을 로컬 영역의 IoT 디바이스 가까이에서 수행하고 연산한 결과만을 클라우드 서버로 전달하는 방식.

 기존 클라우드 컴퓨팅은 서버 상에서 연산을 모두 수행했으나, IoT 환경에서 요구하는 빠른 속도를 만족하기에는 클라우드 컴퓨팅의 속도가 상대적으로 느리며, IoT 디바이스는 매 순간 수많은 raw data를 생성하기 때문에 이를 모두 서버에서 처리하는 것은 부담이 된다. 따라서 연산 역할을 IoT 디바이스 또는 IoT 디바이스와 가까이 있는 장치에게 맡기고, 서버는 가공된 정보만을 받아 처리하는 방식을 취한다. 이 경우 그렇게 큰 데이터가 오가지 않기 때문에 latency가 낮아진다.