본문 바로가기
컴퓨터구조

[키워드로 풀어본 컴퓨터구조] 02. 병렬 처리

by Lizardee 2023. 7. 9.
병렬 처리

병렬 처리는 명령어를 병렬로 동시에 처리하는 것을 의미한다. 

실행할 수 있는 코어를 여러 개 두는 방법, 쓰레드를 여러 개 하는 방법, 그리고 기본 명령어를 여러 개 수행시키는 방법이 있다. 최근 멀티코어 등이 더 중요해진 이유는 저전력-그린 IT와 발열문제 해결을 위함이다. 상대적으로 낮은 hz의 CPU Core 다수를 이용하므로 Throughput을 증가시키고 발열을 줄이는 개념이다.

병럴 처리에는 파이프라이닝, 슈퍼스칼라 등의 명령어 전달 방식 차이가 있고, 병렬 컴퓨팅 방식으로 SMP, MMP, LCMP 등이 있다.

 

 

기본 명령어 수행 과정에서의 한계

CPU가 하나의 명령(Operation)을 처리할 때는 각각 하나의 클록을 소비하게 된다. 이때 단위 시간에 하나의 명령만 처리할 수 있다. 읽기(FI)에서 읽어 온 명령을 해석(DI) 단계로 넘겨주면, 읽기를 처리하는 유닛은 DI, EI, WB를 진행하는 동안 유휴상태가 된다. 따라서 그 시간 동안의 비효율성을 갖게 된다.

 

 

기본 명령어 한계 극복 파이프라인

파이프라인

파이프라인은 기본적인 구조에서 비효율적인 부분을 극복하기 위한 한 가지 방법을 제시한다. CPU에서 하나의 명령을 처리하는 과정에서 미리 다음에 실행할 명령을 가져오는 것이다. 즉, 한 명령어를 처리하는 기본 유닛들의 효율성을 높이는 방법으로, 하나의 클록에 유닛의 동작을 중첩시키는 기술이다.

 

동시에 여러 명령 처리를 통한 슈퍼스칼라

슈퍼스칼라

스칼라라는 의미에는 양이라는 개념이 내포되어 있다. 슈퍼스칼라는 한 번에 처리하는 양 자체를 늘리는 개념이다.

슈퍼스칼라는 Processor 내에 파이프라인된 기능 유닛(ALU)을 여러 개 포함시켜, Cycle마다 한 개 이상의 명령어들이 동시에 실행될 수 있도록 하는 기술이다.

 

Clock Cycle 축소를 통한 효율화 슈퍼파이프라인

슈퍼파이프라인

파이프라인의 단계를 세분화하여 Clock Cycle을 줄이는 방식으로 효과적인 병렬 처리를 하기 위해, 몇 가지 동작을 명령어 수행 과정에서 각 단계를 엇갈리게 중첩하는 기술이다.

 

슈퍼스칼라 + 슈퍼파이프라인 = 슈퍼파이프라인드 슈퍼스칼라

슈퍼파이프라인드 슈퍼스칼라

이 방식은 슈퍼스칼라를 통해서 여러 개를 중첩하고, Clock Cycle 내에 명령어를 한 개 이상 처리함으로써, 슈퍼파이프라인의 효율성을 동시에 갖는 방식이다.

 

분산 실행을 통한 효율화 VLIW(Very Long Instruction Word)

VLIW(Very Long Instruction Word)

동시에 수행될 수 있는 명령어들을 컴파일 수준에서 추출하여 하나의 명령어로 압축하고, 실행은 여러 개의 기능 유닛(ALU)에 의해 분산되어 실행하는 방식이다.

VIEW 방식은 컴파일러가 동시실행 가능 명령어들을 검출해 하나의 명령어로 압축하여 동시 수행한다. 일정 크기의 VLIW 명령어로 압축되므로 기존 H/W, S/W와의 호환성 결여 발생이 가능하다. 예측이 상대적으로 쉬운 과학 계산 분야, 3차원 그래픽 처리, 멸티미디어 가속 등의 단순 자료의 반복처리에 활용된다.

VLIW 프로세서는 덜 복잡하고 더 작고 높은 클록 속도를 낸다.

 

 

파이프라이닝 기법의 문제점과 보완책

▶ 파이프라이닝 기법의 문제점

파이프라이닝 기법의 문제점은 병렬수행의 동작이 서로 독립적이어야 한다는 점이다.

분기나 점프 명령어의 오동작 우려가 있고, 명령어 수행결과가 다음 명령어에 영향을 미칠 시 처리가 어렵다.

 

▶ 파이프라이닝 기법의 문제점에 대한 보완책

 

 

병렬 처리 방식 비교 및 EPIC(Explicitly Parallel Instruction Computing)

▶ 병렬 처리 방식 비교

VLIW, Superpipeline, Superscalar 비교

 

▶ EPIC(Explicitly Parallel Instruction Computing)

EPIC(Explicitly Parallel Instruction Computing)

EPIC는 컴파일러가 소스 코드로부터 명시적 병렬성을 찾아 병렬 처리가 가능하도록 기계어 코드를 생성하고, 이 코드가 병렬 수행된다.

 

대용량 처리 및 분산 컴퓨팅 환경이 계속해서 필요함에 따라 적용이 되고 있고, 범용성 응용 분야에서의 연구가 되고 있다. 과학 계산의 분야에서는 좋은 성능을 발휘한다.

병렬 컴퓨터 기술의 핵심으로 프로세스 내 Pipeline 기능 세분화 및 다수의 동기화된 프로세스(Array Processor) 이용 기술은 계속 발전될 것이다.

 

 

하이퍼 스레딩(Hyper threading)의 개념
  • 하이퍼 스레딩(Hyper threading): 하나의 CPU 내에서 두 개의 CPU처럼 처리하는 가상 기술

하이퍼 스레딩(Hyper threading)

Hyper threading은 그래픽 및 동영상 편집의 작업 시 타 작업의 병행처리 욕구가 증대되는 상황에서 고가의 Core를 추가하는 방법이 아닌, 적은 비용으로 유사한 효과를 이루기 위한 방법 중 하나이다. Clock만 높이는 것이 아니라, CPU의 유휴자원을 최대한 활용하는 방식으로 인텔에서 발표한 것이다.

 

하이퍼 스레딩(Hyper threading)의 특징 및 향후 전망

▶ Hyper threading 장점

  • 프로세스의 논리적인 분할을 통해 자원 공유의 부하를 감소시키고, 병렬처리 및 다중 프로세싱을 통해 CPU 능력이 향상된다.
  • 프로세스 동기 제어 시 발생하는 Mutex 및 Context Switching 부하는 감소된다.

▶ Hyper threading 단점

  • 발열량 및 전력소모가 증대된다.

▶ Hyper threading 향후 전망

  • 사실상 이 기술을 발표한 Intel에서도 이제는 듀얼 코어나 코어2 듀오라는 방식의 실제 물리적 이중 또는 사중 코어로 발전하고 있어서, 실용성 면에서는 큰 의미가 없다.

병렬 처리 기법과 Hyper threading과의 비교

 

 

병렬 컴퓨팅

: 다수 Processor들이 다수 프로그램 또는 단일 프로그램의 분할된 부분들을 분담하여 동시에 처리하는 컴퓨터

 

컴퓨터 분류 별 특징

병렬 컴퓨터 분류

▶ SSID(Single Instruction Single Data)

  • 고전의 폰노이만 방식 구조로, 한 번에 한 개씩 명령어/데이터를 순차처리한다.
  • Piplelining 기법 -- 실행과정을 여러 단계로 나누어 중첩시켜서 처리 속도를 높인다.ㄹ

 

▶ SIMD(Single Instruction Multi Data)

**PU: Processing Unit

  • 단일 CPU와 다중 ALU를 갖춘 구조이다.
  • 다수의 ALU는 모두 하나의 제어장치에 의해 통제되고, 명령어 실행과정에서 서로 다른 데이터를 이용한다.

 

▶ MISD(Multiple Instruction stream Single Data stream)

  • 여러 개의 처리가 하나의 데이터 스트림에 대하여 서로 다른 명령어를 실행하는 구조인데, 현실적으로 구현되기 어렵고 적용 사례도 없다.

 

▶ MIMD(Multiple Instruction Multiple Data)

  • 다중 프로세서로 구성되고, 서로 다른 명령어와 데이터를 처리한다.
  • 프로세서 간 연결 방법에 따라 -- SMP, MPP, LCMP 등이 있다.
  • 약결합 방식: 각각의 처리기가 각각의 local memory를 가지는 독립적 구조, 처리기 사이의 데이터 교환이 많지 않을 경우에 사용
  • 강결합 방식: 각각의 처리기가 하나의 공유 메모리를 사용하는 구조, 처리기 사이의 데이터 교환이 빈번하게 발생할 경우에 사용

 

MMID 방식의 종류
  • 프로세서 간 연결 방법에 따라 분류

▶ SMP(Symmetric Multi Processing)

SMP(Symmetric Multi Processing)

단일처리기 시스템에서 나타나는 성능의 한계를 극복하기 위해, 여러 개의 처리기를 공유 버스나 상호 연결망에 연결시켜 놓은 시스템이다. 단일 OS와 단일 Memory로 구성된 완전 공유 구조로, 모든 CPU가 모든 시스템자원을 공유하며, CPU 간 데이터 정합성 작업이 필요하다.

SMP 시스템의 최대 장점은 프로그래밍 인터페이스가 기존 단일처리기 시스템과 동일하다는 점이다. 즉, SMP 시스템의 구조가 프로그래머에게는 투명하기 때문에, 프로그램을 하는 데 별도의 노력을 필요로 하지 않는다.

SMP 시스템의 단점은 캐시에 의한 버스 트래픽 증가 등의 이유로, 공유 버스에 많은 부하가 발생할 수 있다는 점이다. 

 

▶ MPP(Massively Parallel Processing)

MPP(Massively Parallel Processing)

MPP는 노드 별 각각의 CPU와 전용 메모리로 구성되어 메모리를 공유하지 않는 구조이다. 다수의 CPU들이 서로 독립적으로 작동하여 최고의 성능을 발휘하도록 하는 구성 방식으로, 프로세스와 메모리, 운영체제로 구성된 각각의 노드로 작동하여 시스템 확장 시에도 성능의 감소가 없다.

주로 과학계산용 Application이나 노드 간 통신이 적은 분야에 사용한다. 확장성이 뛰어나고, 대용량의 DB를 지원하며, 개발비용이 저렴하고, 많은 수의 프로세서 연결이 가능하다는 장점이 있다.

프로그램이 복잡하여 Application 개발/이식/운용이 어렵고, 적용되는 시스템 소프트웨어가 많지 않다는 단점이 있다.

 

▶ NUMA(Non-Uniform Memory Access)

NUMA는 멀티 프로세싱 시스템에서 지역적으로는 메모리를 공유하며, 성능을 향상시키고, 시스템 확장성이 있도록 마이크로프로세서 클러스터를 구성하기 위한 방법이다.

NUMA는 SMP 시스템에서 사용된다. SMP 시스템은 서로 밀접하게 결합되어, 모든 것을 공유하는 시스템으로서, 다중 프로세서들이 하나의 단일 운영체제 하에서 공통의 버스를 통해 각각의 메모리에 엑세스한다. SMP의 한계는 마이크로프로세서가 추가됨에 따라, 공유 버스나 데이터 경로가 과중한 부하가 생기게 되어, 성능에 병목현상이 일어나는데 있다. NUMA는 몇 개의 마이크로프로세서들 간에 중간 단계의 공유 메모리를 추가함으로써, 모든 데이터 액세스가 주 버스상에서 움직이지 않아도 되도록 한다.

NUMA 시스템은 MPP Node와 유사한 하나 이상의 Quad로 구성된다. CC(Cache Coherent) - NUMA: 하나의 운영체제가 탑재되는 단일 노드 개념으로, 캐시 Coherence를 하드웨어적으로 구현하여, 메모리 접근 지연 시간을 단축시킬 수 있다. 분산된 메모리들이 결합하여 하나의 메모리를 구성하므로, 데이터나 페이지의 복사본이 메모리들 사이에 존재하지 않는다.

 

▶ RMC(Reflective Memory Cluster)

 

COMA(Cache-Only Memory Architecture)

 

MMID 방식에서의 메모리 공유 방식의 비교

SMP, MPP, NUMA 형태의 비교