Hazards
Data Hazards
: Register file에서 서로 다른 instruction에 대한 WB과 ID가 동시에 일어나기 때문에 발생하는 hazard.
In the Pipeline
- EX hazard
- MEM hazard
Cf) 세 번째 WB, ID는 같은 time에 일어나도 괜찮다!
: ID에서 wirte 먼저, read 나중에 일어나기 때문이다.
Solution: Forwarding
- EX hazard, MEM hazard --> forwarding!
- 세 번째는 forwarding 할 필요 없다.
Data Hazard Detection
EX hazard (ver.1)
: EX/MEM pipeline register에 저장된 destination register = ID/EX pipeline에 저장된 source register
--> EX hazard!
MEM hazard (ver.1)
: MEM/WB pipeline register에 저장된 destination register = ID/EX pipeline에 저장된 source register
--> MEM hazard!
Further Conditions
- WB을 하는 instruction인지 확인한다.
- EX/MEM.RegisterRD =/= 0
: $zero는 항상 0이다.
EX hazard (ver.2)
MEM hazard (ver.2)
Without Forwarding
: ID 단계에서 ID/EX pipeline register에 저장된 값만 ALU로 전달된다.
--> 만약 Data hazard (WB, ID 동시에)가 있다면, WB이 될 때까지 기다려야 한다. (STALL)
With Forwarding
- EX hazard, MEM hazard 중 어떤 hazard가 발생했는지 여부를 판단하여, MUX에서 값을 선택한다.
- Forwarding unit: Source 1, Source 2 중 어떤 것이 destination과 같은지 판단한다.
Control Values for Forwarding
Double Data Hazard
: Forwarding은 가장 최근에 업데이트된 값으로 해야 한다.
▶ Hazard의 우선순위:
- EX hazard
- MEM hazard
--> EX hazard가 발생하지 않으면, MEM hazard.
Datapath with Forwarding
- Forwarding unit: Source 1, Source 2 중 어느 것이 Destination과 같아서, EX hazard 또는 MEM hazard가 발생하는지 판단한다.
--> Forwarding unit의 input으로 Rs1, Rs2가 추가된다.
A Close-Up of the Datapath
▶ ALU inputs:
- R-format, beq: Register 값들(Read data 1, Read data 2)
- lw, sw: Register 값 하나(Read data 1), offset
--> 하나의 MUX를 추가하여, ALU input으로 Read data 2를 넣을 것인지, offset을 넣을 것인지 결정한다.
Load-Use Data Hazard
: lw의 경우, 1 STALL은 불가피하다.
Load-Use Hazard Detection
: lw의 경우, 무조건 1 STALL한다.
NOP: No Operation
: 모든 control signal == 0이면, nop 가능! (아무것도 하지 않겠다.)
Load-Use Data Hazard
Datapath with Hazard Detection
- ID/EX.MemRead (control signal): lw임을 알려준다.
- Hazard detection unit: Input으로 source 1, source 2, destination을 받아서, IF/IDWrite, PCWrite control signal을 생성한다.
- IF/IDWrite (control signal): IF 발생하지 않도록 한다.
- PCWrite (control signal): PC값이 (PC+4)로 증가하지 않도록 한다.
Stalls and Performance
: STALL은 성능을 떨어뜨린다.
--> Change the order of instructions!
출처: 이화여자대학교 윤명국교수님 컴퓨터구조
'Computer Architecture > 컴퓨터구조[05]' 카테고리의 다른 글
파이프라이닝(Pipelining)과 비순차적 명령어 처리(Out-of-order execution) (3) | 2023.11.20 |
---|---|
[CA] Lecture #22 (1) | 2023.11.17 |
[CA] Lecture #20 (1) | 2023.11.14 |
[CA] Lecture #19 (0) | 2023.11.09 |
[CA] Lecture #18 (0) | 2023.11.08 |