본문 바로가기

학교/컴퓨터 구조

6. 파이프라인 (1/4) 개요

명령어의 데이터 경로를 세분화해,

각기 다른 세부 단계를 동시 수행해, 여러 명령어 중첩 실행

 

파이프라인의 깊이(depth) : 단계의 개수

(Ex 세탁-탈수-건조 3개의 작업이면, 파이프라인 깊이는 3)

단계를 더 쪼개면, 깊이는 증가하지만,

지연 시간을 더 줄일 수 있다.

 

 

래치 지연시간이 없다고 가정 하에 작업

 

사진에서 위의 작업은 한 사람이 다 끝내야 다른 사람이 쓸 수 있는 순차 방식이고,

밑의 작업은, 한 사람이 세탁기를 돌리는 동안,

다른 사람이 놀고있는 탈수기, 건조기를 쓰는 파이프라인 방식이다.

 

시간으로 비교해 보자면 위의 순차 방식은 90분 * 4 = 360분이 나오지만,

밑의 방식은 초기 90분 + 가장 느린 작업 40분 * 3 = 210분이 나온다.

이는 순차 방식에 비해 약 1.7배가 빠르고,

작업량이 많아질수록 효율이 더 높아진다.

 

위의 건조 단계에서는 시간을 40분이나 소모해,

다른 사람들은 이전 작업을 빠르게 끝낸다 해도, 건조기 차례를 기다려야 하기 때문에,

초기 사용자를 제외한 모든 사용자는 무조건 40분을 기다리게 된다.

 

만약 세탁기와 건조기를 2대로 분리해 (각각 15분 ,20분) 작업을 한다면,

2명이 동시에 건조기를 쓸 수 있게 돼, 지연 시간이 40분에서 20분으로 줄어든다.

 

 

파이프라인 성능

T : 클록 주기

M : 깊이

L : 레치 지연시간 (명령어마다 갭)

N : 처리할 데이터

 

순차 처리 = T * N

파이프라인 = 첫번째 데이터 처리 T + ML

그 뒤, n-1개 데이터 처리 : (N-1) * (T/M + L)

 

순차 처리에 비한 파이프라인 속도 향상률

만약 데이터 N이 충분히 있다면,

N이 충분히 있을 때 속도 향상률

 

 

사실, 위에 작업 표에서는 명령어들이 바로바로 시작되지만,

실제 파이프라인에선 명령어 사이사이에 조그만 갭이 있는데,

이것이 바로 레치 지연시간(L)이다.

 

파이프라인 성능 극대화 방법

- 처리할 데이터가 충분할 때

- 파이프라인 단계를 균등하게 분할

- 명령어 사이의 의존성이 없어야 함(S/W 구현)

- 파이프라인 이동시 데이터를 동기화시켜야 한다. (H/W 구현 필요)

 

하지만, 단계를 분할하다, 파이프라인 깊이가 커지면, 레치 지연시간(L)이,

파이프 지연시간 (T/M)에 비해 상대적으로 커진다.

또한, 클록 주기가 작아지면 물리적 전기신호로 발생하는 편차인

Clock skew 문제가 발생하기 때문에, 구현에 신중해야 한다.

 

 

구현 방식에 따른 picoMIPS의 성능

래치 지연시간을 무시하는 가정 하에, 각 단계의 지연시간이다.

 

F : 명령어 인출 단계 (2ns)

D : 명령어 해독, 읽기 단계 (1ns)

X : ALU 연산 단계 (2ns)

M : 메모리 접근 단계 (2ns)

W : 레지스터 쓰기 단계 (1ns)

 

구현 방식 클록 시간 CPI
단일 사이클 8 = (F + D + X + M + W) 1
다중 사이클 2 = MAX(F + D + X + M + W) 3~5
파이프라이닝 2 = MAX(F + D + X + M + W) 1