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 - 병렬처리와 분산처리
▶ 분산처리는 다음과 같은 구조를 이룬다.
- 운영체제가 각각 존재한다
- 독립적인 메모리를 사용한다.
- 약한 결합 관계
▶ 병렬처리는 다음과 같은 구조를 이룬다.
- 운영체제가 하나만 존재한다.
- 공유된 메모리를 사용한다.
- 강한 결합 관계
'컴퓨터공학기초 개념 > 컴퓨터구조' 카테고리의 다른 글
24. 컴퓨터 구조 - 캐시메모리의 동작원리 (0) | 2021.08.25 |
---|---|
23. 컴퓨터 구조 - 메모리 시스템의 이해 (0) | 2021.08.25 |
21. 컴퓨터 구조 - 소프트웨어 구조 (0) | 2021.08.17 |
20. 컴퓨터구조 - 프로그램과 프로그래밍 언어 (0) | 2021.08.17 |
19. CPU 내부구조 - 입출력과 인터럽트 (0) | 2021.08.12 |
댓글