오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 9. Pipeline 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 9. Pipeline

쫑알bot 2023. 7. 5. 17:06
728x90

Pipeline 

목적 : CPU의 기능을 향상시키기
여러 개의 명령어를 한 번에 함으로써 기능을 향상시킴. 

 

예시) 세탁실에 세탁기와 건조기가 1개씩 있다고 생각해 보자.

세탁기와 건조기 1개당 돌리는데 각각 1시간이 걸린다.

 

Case 1) 이 상황에서 부대에 SIP가 걸렸다. 동선이 절대 겹치면 안 됨.

그럼 한 사람이 세탁기와 건조기를 다 돌려서 2시간이 지난 뒤에야 다른 사람이 들어와서 새로 세탁을 시작할 수 있다.

이랬을 때 4명이 세탁과 건조를 다 끝냈을 땐 8시간이 지나있음.

 

Case 2)  SIP가 풀렸다.

한 사람이 세탁을 끝나고 건조기에 넣을 때, 그다음 사람이 세탁기에 세탁물을 넣을 수 있다.

이렇게 되었을 때 4 사람이 세탁 건조를 다 끝냈을 때는 아래 그림과 같이 5시간이 지나있다.

 

Case 2가 PipeLine의 상황이라고 할 수 있다.

 

 

 

PipeLine을 사용했을 때, 각 task의 cost는 줄어들지 않는다. [ Latency 가 줄지 X ] 

하지만 전체적으로 보았을 때 cost를 줄여주기 때문에 성능이 향상된다고 할 수 있음. [ Throughput이 줄어든다 ]

→ 단위 시간당 처리할 수 있는 일이 줄어든다.
→ 다른 resource의 일들을 " 동시에 " 처리할 수 있다.

 

ex) 전체 시간은 5시간으로 줄었지만, 세탁시간이나 건조시간이 빨라지는 게 아님.

 

Potential Speedup = Number Pipe stages
→ stage를 많이 나눌수록 Pipeline 효율이 ↑ 
왜냐 ? 동시에 굴릴 수 있는 일들이 더 많으니까
+ 가장 느린 Pipeline 을 기준으로 돌아감. ( 얘가 다 작업을 해야 다음 애들이 처리하니까 )

 

 

2개의 time을 고려해야 한다.

  1) 처음 혼자 pipeline을 채우면서 일을 처리하며 걸리는 시간
       = Time to fill pipeline (첫 사람이 세탁기 다 쓰는 데 걸리는 시간)
  2) 이제 동시에 여러 개의 작업을 처리하면서      걸리는 시간   
       = Time to drain    (두 번째 사람부터 세탁기 쓰고 다음 사람 쓸 때까지 걸리는 시간 ) 


 

식으로 만들어서 생각해 보자

 

n개의 jobs to execute , 각 job은 T 초를 소요함. Pipeline이 있는 경우, k개로 stage를 나눔

 

파이프라인이 없을 때, 총 실행하는 데 걸리는 시간 Ts = n*T

파이프라인이 있을 때, 총 실행하는데 걸리는 시간 Tp = (n+k-1) * T / k     (k-1은 pipeline을 채우는 데 걸리는 시간)


Speedup = Ts / Tp    ← n이 무한대로 가면 Speedup = k

 

ex) n = 100 , T = 10 , K=5 일 때,

Ts = 1000

TP = (100+5-1) * 10/5 = 104 *2 = 208

만약 K = 10이면?
TP = (100+10-1) * 1 = 109


출처 : 한동대 SW중심대학