본문 바로가기
컴퓨터공학기초 개념/컴퓨터구조

22. 컴퓨터구조 - 파이프라인과 병렬처리

by devraphy 2021. 8. 19.

0. 시작하기 전에

- 이전 포스팅까지 프로그램과 소프트웨어의 정의에 대해서 배우면서, 

- 프로그래밍 언어의 발전과 종류, 이를 이용한 프로그램 구조설계(아키텍처)에 대해서 배웠다. 

- 듀얼코어, 쿼드코어 등 하드웨어의 발전에 맞춰 하드웨어를 더욱 잘 활용하기 위해 다양한 프로그래밍 기법이 개발되었다. 

- 이번 포스팅에서는 기존의 순차적 프로그래밍이 발전된 형태로,

- 하드웨어를 더욱 효율적으로 사용할 수 있게 만드는 병렬처리와 파이프라인에 대해서 배워보자. 


1. Flynn의 컴퓨터 분류

- 컴퓨터 내부적으로 명령어와 데이터를 처리하는 흐름의 개수에 따라 분류하는 방식 

- 다음과 같이 분류된다. 

 

▶ SISD(Single Instruction Stream Single Data Stream)

- 단일 사용자의 명령어 입력을 1개의 CPU가 처리한다. 

- 한번에 한개의 명령어를 처리하는 구조 

- 제어장치와 프로세서를 각 1개씩 보유하는 구조 

- 파이프라인 기법(시간적 병렬 프로세서 구조)을 사용한다. 

- 일반적인 PC의 구조다. 

 

▶ SIMD(Single Instruction Stream Multiple Data Stream)

- 단일 사용자의 명령어 입력을 여러개의 CPU가 처리한다. 

- 다중 처리기 컴퓨터로서, 한번에 하나의 명령어만 처리하는 시스템

- 여러 프로세서(CPU)들의 동작을 하나의 제어장치가 제어한다. 

- Array processing(어레이 처리)기법을 사용한다.

 

▶ MISD(Multiple Instruction Stream Single Data Stream)

- 여러 사용자의 명령어 입력을 1개의 CPU가 처리한다. 

- 1개의 컴퓨터 자원을 20명이 같이 쓴다는 것이다. 

- 효율도 효능도 없는, 의미 없는 시스템 구조이기에 사용하지 않는다. 

 

▶ MIMD(Multiple Instruction Stream Multiple Data Stream)

- 여러 사용자의 명령어 입력을 여러개의 CPU가 처리한다. 

- 병렬처리와 분산처리로 분류된다.  


2. SISD - 파이프라인(Pipeline) 기법 

- 파이프라인 기법은 시간적 병렬 프로세서 구조 라고도 불린다. 

- 파이프라인 기법은 단일 CPU를 이용하여 병렬처리 시스템과 유사한 연산속도를 만들기 위한 방법이다. 

- 다음 그림 예시와 함께 파이프라인 기법에 대해서 이해해보자. 

 

 1개의 작업을 처리하는데 5개의 마이크로 연산을 수행해야 된다고 해보자. 

ex) 작업 = 덧셈 (A, B)

ex) 마이크로연산 = 명령어 로드, 명령어 해석, 오퍼랜드 검색, 연산, 인터럽트 발생유무 등 

 

1개의 작업을 마치는데 5초의 시간이 걸린다고 할 때, 

이처럼 순차적으로 작업을 처리할 때, 5개의 작업을 처리하려면 총 25초의 시간이 걸린다. (아래 그림참고)

순차처리 예시 - 클릭하면 확대됩니다.

 

▶ 그러나 병렬처리의 경우, 이야기가 다르다. 

▶ 병렬처리는 단일 CPU가 아니라 다수의 CPU를 가지고 있기 때문에, 동시연산이 가능하다. (아래 그림참고) 

병렬처리 예시

▶ 동시 처리가 가능하기에 작업 5개를 완료하는데 5초가 걸린다.

▶ 파이프 라인은 병렬처리 시스템과 유사한 연산속도를 만들기 위해, 다음과 같은 방식을 사용한다. 

파이프라인 예시 - 클릭하면 확대됩니다.

▶ 위의 그림처럼, 중첩을 이용하여 25초 보다 적은 시간안에 동일한 작업량을 처리할 수 있게 하는 것이다. 

▶ 작업 1의 1번 연산이 끝나면 해당 연산에 필요한 자원을 놀게 놔두는 것이 아니라, 다음 작업2의 1번 연산을 할당하는 것이다.  

▶ 당연히 병렬 처리시스템 만큼의 연산 수행속도를 뽑아낼 수는 없다. 

▶ 다만, 기존의 순차적 실행보다 훨씬 시간을 단축 시킬 수 있다. 

 

a) 파이프라인의 장단점

- 여러개의 작업을 중첩으로 처리하여 작업 처리량과 시간적 효율을 향상시킨다. (장점)

- 파이프라인을 처리하는 도중 문제가 생기면 전체 연산과정에 문제가 생길 수 있다. (단점) 

- 파이프라인을 수행하려면 서로 다른 하드웨어 자원을 사용해야한다. 즉, 각기 다른 메모리 주소를 사용한다. (단점) 

- 파이프라인을 사용한다고, 반드시 일정한 비율로 연산속도가 향상되는 것은 아니다. 

 

b) 파이프라인 속도 향상식

- 파이프라인을 사용했을 때와 사용하지 않았을 때의 속도 차이를 계산하기 위한 공식이다. 

▶ k = 마이크로 연산 수 

▶ N = 작업 수

 

- 위에 사용했던 예시로 대입해보면 k = 5(마이크로 연산 수), N = 5 (작업 5개)가 되는 것이다. 

 

c) 파이프라인의 동작 방식

- 파이프라인에서는 클럭펄스와 세그먼트라는 개념이 사용된다.

- 각 개념의 의미는 다음과 같다. 

 

▶ 클럭펄스 - 다음 단계의 마이크로 연산으로 넘어갈 때 발생하는 전기신호 

▶ 세그먼트 - 단계와 시점을 의미

 

- 다음 그림 예제를 통해서 간단하게 세그먼트의 작동방식에 대해서 알아보자. 

 

- 위의 예제는 곱셈과 덧셈이 섞인 다항식을 연산하는 과정을 표로 나타낸 것이다. 

- 오퍼랜드 A, B, C가 있으며, A * B를 한 이후에 C를 더하는 연산을 진행하게 된다. 

- 마이크로 연산이 수행되어 완료될 때마다, 다음 단계로 넘어가기 위한 클럭펄스가 발생한다. 

 

위의 연산과정을 나타낸 표를 그림으로 표현하면 아래와 같다. 

- 여기서 주의해야 할 사항은 Segment가 단계이자 시점을 의미한다는 것이다. 

- 즉, 동일한 세그먼트에 있는 연산은 동시에 처리된다는 것을 의미한다. 

 

d) 파이프라인 정리

- 파이프라인은 1개의 CPU를 병렬처리시스템 처럼 사용하기 위해 만들어진 기법이다. 

- 즉, 코드를 처리 및 수행하는 방법론으로, 가성비를 극대화 시키기 위한 방법이라고 이해하면 좋을 것 같다. 

 

- 파이프라인은 순차적으로 데이터를 처리하지만 병렬적으로 처리할 수 있도록 하는 기법이다.

- 하나의 프로세스를 여러개의 서브 프로세스로 나누어, 동시에 서로 다른 데이터를 처리하도록 하는 기법이다.

 

- 서브 프로세스가 갖는 각각의 작업을 Segment(세그먼트)라고 부르며

- 하나의 서브 프로세스는 여러개의 segment를 갖을 수 있다. 

- 어떤 세그먼트에서 수행된 연산의 결과가 순차적으로 다음 세그먼트에게 넘어는 방식으로 동작한다. 

 


3. SIMD - Array processing 기법 

- 복수의 컴퓨터 또는 프로세스를 병렬로 동작시켜 전체적인 처리성능을 향상시키는 방식이다. 

- 공간적 병렬 프로세서 구조라고도 불린다. 

- 대장 CPU 아래에 여러개의 CPU가 있으며, 이들을 PE(processing element)라고 부른다.

- PE는 배열로 구성되어 있다.

- 대장 CPU가 PE에게 작업을 할당하는 방식으로 작동한다.  

- 다음 그림예시와 함께 알아보자. 

 

▶ Array processing 기법은 위의 그림과 같이 CPU가 배열에 구성되어 있다. 

 

▶ 대장 CPU가 하위 CPU인 PE에게 작업을 할당하는 방식으로 작동한다. 


4. MIMD - 병렬처리와 분산처리 

▶ 분산처리는 다음과 같은 구조를 이룬다. 

   - 운영체제가 각각 존재한다

   - 독립적인 메모리를 사용한다.

   - 약한 결합 관계

 

 

▶ 병렬처리는 다음과 같은 구조를 이룬다.

   - 운영체제가 하나만 존재한다.

   - 공유된 메모리를 사용한다.

   - 강한 결합 관계

댓글