본문 바로가기
Computer Science/컴퓨터 구조

명령어 파이프라이닝

by Luinesse 2024. 1. 3.
반응형

명령어 파이프라이닝

명령어 파이프라이닝이란, 명령어 실행에 사용되는 H/W를 여러 단계로 분할함으로써 처리 속도를 높여주는 기술입니다.

예를들어, 3ns의 시간이 걸리는 명령어들이 있을 때, 명령어의 실행과 동시에 다음 명령어의 인출 또한 수행하면서, 처리 속도를 빠르게 합니다.

 

먼저 2단계 파이프라이닝의 경우, 인출과 실행을 동시에 실행합니다.

따라서, 처리 속도는 기존에 비해 2배에 수렴합니다. 하지만, ISR이나 JMP 와 같은 분기 명령어에 의해 성능저하가 발생할 수 있습니다.

 

이때 클록 주기는 시간이 더 긴 작업을 기준으로 설정합니다. ex) Fetch Cycle : 3ns, Execute Cycle : 1ns. then, CPU Clock Cycle : 3ns)

 

하지만 이렇게 되면, Execute Cycle에서 성능저하가 발생합니다. (2단계 파이프라이닝 이므로, Fetch Cycle의 3ns 동안 Execute Cycle 1개를 실행하면, 2ns의 성능저하 발생) 따라서, 더 세분화 하는 방법을 선택합니다.

 

다음으로 4단계 파이프라이닝입니다.

 

여기서는 명령어 인출 단계와 명령어 해독 단계, 오퍼랜드 인출 단계, 실행 단계로 나누어 실행합니다.

 

명령어가 늘어날수록 4단계 파이프라이닝에서 속도 향상 정도는 4배에 수렴합니다.

 

하지만, 4단계 미만을 실행하는 명령어의 경우에는 효율이 없습니다. ex) Operand Fetch Cycle X

그리고 클록은 처리시간이 가장 오래 걸리는 단계가 기준이므로, 2단계와 같은 효율 저하가 발생할 수 있습니다.

또한, Instruction Fetch와 Operand Fetch는 동시에 Main Memory를 접근하므로, 기억장치 충돌로 인해 지연이 발생할 수 있습니다. 거기에, 2단계에서처럼 분기명령어의 실행으로 미리 인출한 명령어의 실행이 무효화돼서 효율 저하가 발생합니다.

 

위에서 잠깐 언급한 속도 향상 정도를 구하는 방법은 다음과 같이 구할 수 있습니다.

 

단계 수를 K로, 명령어 수를 N으로 정의할 때, K단계 파이프라이닝에서 N개 명령어의 실행시간은

K + (N - 1) 로 구할 수 있습니다. (Tk)

 

파이프라이닝을 하지 않은 경우, 실행 시간은 K*N 으로 구할 수 있습니다. (T1)

 

이때 속도 향상 정도(Sp)를 구하는 방법은 T1 / Tk 로 구할 수 있습니다.

 

또한, K단계 파이프라이닝에서 효율(E)는 Sp/ K 로 구할 수 있습니다.

 

분기 문제를 해결하기위해 다음 4가지 방법을 대표적으로 사용합니다.

 

먼저, 분기 예측입니다.

이 방법은 분기 역사표를 만들어서, 다음 분기점을 예측하고 그에 따라서 어느 경로로 명령어를 인출할지 정하는 방법으로 확률에 기반한 방법입니다.

 

다음은 분기 목적지 선인출입니다.

이 방법의 경우, 분기문이 인식되면, 분기 명령어의 다음 명령어 뿐만아니라, 분기하게될 목적지의 명령어도 함께 인출하는 방법입니다.

 

세번째로 루프 버퍼입니다.

이 방법은 버퍼 공간에 가장 최근 인출된 명령어를 순서대로 저장하고, 분기가 발생했을 때 분기 목적지의 명령어가 버퍼에 있는지 검사하고 있다면 버퍼에 있는 명령어가 인출되는 방식입니다.

 

마지막으로 지연 분기입니다.

이 방법은 프로그램 내의 명령어를 재배치하여 분기가 발생했을 때, 효율 저하를 줄입니다.

 

조건 분기 명령어에서 사용하는 조건들은 CPU 내부의 상태 레지스터에 저장되어 있는 Flag bit로 검사합니다.

조건 플래그는 다음과 같습니다.

 

S : Sign bit (양수, 음수 검사. 양수가 0, 음수가 1)

Z : Zero bit (연산 결과가 0인지 검사. 0이라면, 1)

C : Carry bit (덧셈 혹은 뺄셈에서 올림수 혹은 내림수가 발생하면 1)

X

E : Equal bit (두 수를 비교한 결과가 같다면 1)

V : Overflow bit (산술 연산 과정에서 오버플로우가 발생했다면 1)

I : Interrupt bit (인터럽트가 가능하다면 1, 인터럽트가 불가능하다면 0)

P : Supervisor bit (CPU가 Supervisor mode인지 User mode 인지 세트)

 

Supervisor mode는 OS를 포함한 시스템 프로그램을 수행하는 모드를 말하고, 사용자 모드는 사용자 프로그램 혹은 응용 프로그램이 수행되는 모드입니다. (추후 운영체제 내용에서 Protection과 관련됨)

 

슈퍼스칼라

슈퍼스칼라(M-WAY 파이프라인)는 CPU내부에 여러개의 명령어 파이프라인들을 포함시킨 구조로, CPU 클록 주기마다 각 명령어 파이프라인이 별도의 명령어를 인출하여 동시에 실행합니다. 이때, 프로그램 처리 속도는 파이프라인의 수만큼 높아질 수 있습니다.

 

슈퍼스칼라에서 속도 향상 정도를 구하는 방법은 다음과 같습니다.

 

먼저 단일 파이프라인의 실행 시간(T1)을 구합니다.

T1 = K + (N - 1)

 

그리고, M-WAY 파이프라인 (슈퍼스칼라)의 실행 시간(Tm)을 구합니다.

Tm = K + (N - M) / M

 

속도 향상 정도(Sp)는 T1 / Tm 으로 구해집니다.

 

그 결과 Sp는 M에 수렴합니다.

 

슈퍼스칼라는 다른 파이프라인 방법보다 더 빠른 속도를 낼 수 있지만, 하드웨어 이용에 있어서 단점이 존재합니다.

ex) IR이 M보다 작으면 M-WAY 파이프라이닝 불가능

 

그리고, 데이터 의존성이 있으면 안된다는 조건이 있습니다.

WHY? M-WAY 파이프라이닝으로 여러 명령어가 실행되는데, 한 명령어의 결과 값이 있어야만, 실행 가능한 명령어가 동시 실행된다면 실행 불가능. 이는 곧 효율 저하로 이어짐.

 

이를 해결하기 위해, H/W를 추가 설치하거나, 명령어 실행 순서를 재배치 하는 방법을 사용합니다.

 

코어 및 스레드

속도향상을 위해서, CPU Core와 Thread를 사용하는 방법도 있습니다.

 

먼저 CPU Core는 명령어 실행에 필요한 CPU 내부의 핵심 H/W Module로 슈퍼스칼라 모듈이나 ALU, Register Set .. etc를 말합니다.

 

이때, 코어의 수를 늘려서 속도를 향상할 수 있습니다. 이를 Multi - Core Processor 라고 부릅니다. (Dual - Core, Quad - Core)

 

단일 코어 대비 코어의 수만큼의 속도 향상을 기대할 수 있는 장점이 있습니다. ex) Dual-Core의 경우 2배

각 코어들은 내부 캐시 메모리나 시스템 버스 등을 공유합니다. 

 

각 CPU Core는 별도의 H/W Module로 구현된 상태로 하나의 칩에 포함되므로, 멀티태스킹이 가능합니다.

 

다음으로 Thread는 독립적으로 실행될 수 있는 최소 크기의 프로그램 단위를 말합니다. 단, Thread는 Register Set를 필요로 하므로, CPU Core가 Register Set를 1개 가지고 있다면, 단일 스레딩이 가능하고, 2개 이상이라면, 멀티 스레딩이 가능합니다.

반응형

'Computer Science > 컴퓨터 구조' 카테고리의 다른 글

컴퓨터의 수 표현  (0) 2024.01.08
명령어 세트(Instruction Set)  (1) 2024.01.04
명령어 실행  (0) 2024.01.02
CPU의 구조  (0) 2024.01.02
컴퓨터 구조의 발전  (0) 2024.01.02