코드네임 :

🖥️ 컴퓨터구조 - pipelined processor - 구조적 해결ㅊ책 이거 맞음? 본문

⚙️Computer System/컴퓨터구조

🖥️ 컴퓨터구조 - pipelined processor - 구조적 해결ㅊ책 이거 맞음?

비엔 Vien 2024. 5. 11. 23:03

 

Pipelining

: instruction의 수행 갯수를 늘림으로써 성능을 향상시킴

- 여러 instruction을 병렬처리로 실행 (겹치는 실행)

'각' instruction의 실행시간 latency는 그대로

- 만일 4개의 세탁소를 pipeline 한다 하더라도 4배 빨라지지는 않음..

- instruction set 설계는 pipeline 구현의 복잡도에 영향


 

[ Pipeline Hazards ]

1. 구조적 해저드

- 세탁기가 한번에 두곳에서 쓰이려고 한다면 불가능

- 하드웨어가 필요한 명령어 조합을 지원하지 못해서

 



2. 데이터 해저드

-  명령어를 실행하는데 필요한 데이터가 아직 준비되지 않은 경우 

- 이거 앞에서 WB로 연산으로 업데이트 된 데이터를 받아야만 다음 연산에서         

  쓰일 수 있는 경우 

- 아직 필요한 데이터가 준비되지 않은 경우

3 . 제어 해저드

- 주로 브랜치에서 나타남 

- rs1 = rs2 같이 요 결과가 나올때까지 어디로 jump할지 

  알 수 없어 연산 나올때까지 계속 기다려야 하는 경우


 

[구조적 해저드 해결책]

뒤로 밂 = 지연 ( stall )

- 또는 메모리 따로 두는 방법도 있음 


 

[데이터 해저드 해결책]

1. Forwarding(Bypassing)

: 연산해서 나온 결과를 미리 다음 명령어에 보내주는 방법

 

⬇️

 

But!!  Load 명령 다음에 R-format 명령이 나온다면 Forwarding으로 해결이 불가!! (강제 1 stall 지연)

 

⬇️

 

2. Code Scheduling to Avoid Stalls

 


 

[제어 해저드 해결책]

1. Stall on Branch

Branch 조건 계산 결과를 볼 때까지 stall

- ALU가 beq 조건을 검사하는 설계의 경우 2 stalls

- ID단계에 beq 조건(x1== x0)를 검사하는 하드웨서 추가시 1 stall

 

2. Branch 예측

: 예측이 잘못되었을 때만 stall

  (잘못된 경우에만 stall 되니깐 옳은 경우에는 편하게 ㄱㄱ할수 있음)

  (stall 되면 프로그램 시간 지연되니까 안 좋은 겁니다)

- branch 조건이 만족되지 않는다고 가정

- 맞으면 대박(stall 안하고 실행 가능하니깐), 안 맞으면 stall

 

 

3. More-Realistic 예측

 정적 branch 예측

 - 확률이 더 높은 일반적인 branch 경향을 선택

 

동적 branch 예측

- 미래에도 같은 경향성을 유지할 것이라 판단


 

Pipeline registers

: Stage 간 register 필요

 

(ex1)

Load ( lw rd, imm(rs1) )

 

 

 

 

 

Store의 경우 WB에 표시 X

 


 

Pipelined Control

- Control 신호가 나오면 일단 갖고 있는 신호를 다 보내고, 쓰는 신호는 사용, 안 쓰는 신호는 다시 레지스터에 실어보냄