컴퓨터 파이프라인 - keompyuteo paipeulain

단일 사이클


한 클럭 동안 하나의 명령어를 수행한다.

가장 길게 실행되는 명령어한 클럭의 기준이 된다.

lw = 가장 길다.
Instruction Memory → register file → ALU → MEM→ register file

=

다른 명령어가 빨리 끝나더라도

클럭 시간이 줄어들지 않는다.

설계원칙 3, 자주일어나는 일을 빠르게

원칙에 어긋난다.

그러므로

파이프라인을 통해 성능 향상 시키자

단일 사이클 구현은 오늘날 왜 사용되지 않는가?

단일 사이클 구현

클럭 사이클모든 명령어에 대해 같은 길이를 같는다.

클럭 사이클이 너무 길다
= 
비효율

파이프라이닝

여러 명령어가 중첩되어 실행


파이프라인은 병렬 처리 방식이라고 말할 수 있다.

아래는 세탁기로 예를 든 파이프라인의 구조를 설명한다.

컴퓨터 파이프라인 - keompyuteo paipeulain
세탁, 탈수, 옷 개기, 옷장에 넣기를 세탁의 한 사이클이라고 생각하자.

단일 사이클의 경우

한 사이클이 끝나야 다음 세탁물을 세탁할 수 있다.

그러나 파이프라인을 사용한다면,

세탁이 끝나 놀고있는 세탁기에 다음 세탁물을 세탁하므로써

여러 행동을 중첩해서 실행할 수 있게된다.

MIPS 파이프라인


MIPS의 파이프라인은 5단계로 구성되어 있다.

1. IF(Instruction Fetch)
메모리에서 명령어를 가져옴

2. ID(Instruction Decode)
명령어를 읽고/해독, 레지스터를 읽음.

MIPS명령어는 형식이 규칙적이어서
읽기/해독이 동시에 일어난다.

3. EX(Execute)
연산 수행 or 주소 계산

4. MEM(Memory access
데이터 메모리에 있는 피연산자의 접근

5. WB(Writeback) 
결과값을 레지스터에 쓴다.

MIPS


MIPS(Microprocessor without interlocked pipeline stage)는

그 이름에서 찾아볼 수 있듯이 파이프라인 실행을 위해 설계되었다.

1. 모든 MIPS 명령어의 길이가 같다.
IF 단계에서 명령어를 가져오고
ID 단계에서 해독하는 것을 훨씬 쉽게해준다. 

2. 명령어의 형식이 몇가지되지 않는다.
명령어끼리 레지스터의 위치가 같아
ID단계에서 명령어 읽고/해독
레지스터 읽기를 같이 수행할 수 있다.

3. loadstore 명령어에서만 메모리를 사용한다.
메모리에 있는 피연산자에서 바로 연산수행이 가능했다면
EX, MEM 단계가
주소단계, 메모리 단계, 실행단계로
확장되어야 했을 것이다.

4. 피연산자가 메모리에 정렬되어있으므로
메모리에 두번 접근할 이유가 없다.


파이프라인 Diagram

컴퓨터 파이프라인 - keompyuteo paipeulain

파이프라인 데이터패스

컴퓨터 파이프라인 - keompyuteo paipeulain

제어유닛을 포함한 파이프라인

컴퓨터 파이프라인 - keompyuteo paipeulain

파이프 라인

단일 사이클 : 클럭 사이클이 모든 명령어에 대해 같은 길이를 갖는다. 클럭 사이클이 너무 길어서 비효율적.
병렬 처리 : 컴퓨터 시스템 계산 속도 향상을 위해 동시 데이터 처리 기능을 제공.

병렬처리의 방법 - 파이프 라인

다단계 데이터 처리법 : 한 클럭(CPU등의 순차 회로 연산 장치에 가해지는 진동)에 다양한 명령어 수행. 동시 다중 데이터 처리
각 명령어의 실행시간을 개선하지는 못하지만 처리량 개선 가능

컴퓨터 파이프라인 - keompyuteo paipeulain

세탁, 탈수, 옷 개기, 옷장 넣기를 세탁의 한 사이클로 표현한다. 

단일 사이클의 경우 : 한 사이클이 끝나야 다음 세탁물을 세탁 할 수 있다. 

파이프 라인의 경우 : 세탁이 끝난 세탁기에 다음 세탁물을 바로 집어 넣게 함으로써 여러 행동을 중첩해서 실행하도록 한다.

파이프라이닝으로 명령어 실행하는데 걸리는 전체 시간
T(시간), k(첫 번째 명령어 실행에 걸리는 주기), 나머지 (N-1)개의 명령어들은 각각 한 주기씩만 소요됨. 

T = k+(N-1)
명령어 5개, 명령어 4단계, 한 명령어 처리 시간이 1이라 할 때

일반적 방법 : 1*4*5=20시간 (T = k*n)
파이프라이닝 : 4+1+1+1+1=8시간
20/8 = 2.5배 개선

가장 효율적인 파이프라인의 조건 : 각 단계별 처리 시간이 일정해야한다. 

컴퓨터 파이프라인 - keompyuteo paipeulain

처리 시간이 일정하지 않고 처리 단계가 균등하지 않아서 발생하는 파이프 라인의 지연, 중지 현상을 해저드(Hazard)라고 한다.

해저드

1 : 구조적 해저드

다른 단계에 있는 명령어들이 동시에 같은 프로세서의 자원을 사용하는 상황

컴퓨터 파이프라인 - keompyuteo paipeulain

해결법


1. 하드웨어/리소스 추가. 하드웨어적 제한을 하드웨어를 늘려 병렬 구성함으로써 해결.

2. 하버드 아키텍처 사용
데이터와 명령어를 각각의 메모리에 분리


3. 메모리 인터리빙
메모리 모듈별로 병렬 접근 수행


4. 지연
nop명령어를 추가하여 파이프 라인 수행을 일시 정지.

2 : 데이터 해저드

컴퓨터 파이프라인 - keompyuteo paipeulain

해결법 

1. 전방 전달 이전 instruction(명령어)에 의해 해당 레지스터의 결과값이 영향을 받는게 문제이므로 수행(EX) 단계에서 계산된 결과를 바로 다음 instruction의 수행 단계로 전달한다. 

h/w의 추가가 필요하다. 

2. 지연 Nop 명령어 삽입 컴파일러에서 Nop명령어 삽입으로 지 연시킨다.

3 : 제어 해저드

컴퓨터 파이프라인 - keompyuteo paipeulain
(분기 다음의 명령어를 몰라 다음 명령어를 인출 못하는 상황)

해결법


1. 분기예측
분기를 예측하여 명령어 수행


2. 지연
손실되는 클럭 동안 프로그램에 영향이 없는 다른 명령을 수행 또는 분기 방향이 결정될 때까지 지연


3. 프로그래밍으로 개선
조건분기를 최소화하여 해저드 최소화