Hazards
pipeline에서는 매 사이클마다 instruction 하나가 수행되는 것이 중요하다.
즉 다음 사이클에서는 다음 instruction이 시작되는 것이 중요하다.
이를 방해하는 요인(상황)들을 hazard라고 한다.
Hazard들은 먼저 실행된 instruction들이 끝날 때 까지 현재 instruction을 wait하게 한다.
따라서 CPU 성능에 큰 감소를 주기 때문에 해결해야 한다.
크게 3가지의 hazard가 존재한다.
- Structural hazards
- 필요한 resource가 다른 instruction에서 사용 중인 경우
- Data hazards
- 이전 instruction의 수행 결과가 필요해서 wait 해야하는 경우
- 특히 lw/sw한 data를 사용하는 경우는 Load-use data hazard라고 한다.
- Control hazards (= branch hazards)
- 이전 instruction의 결과에 따라 jump 할지말지 결정해야 하는 경우
Pipelined Datapath와 Hazard
MIPS datapath에서 전체적인 신호의 흐름은 left-to-right이다.
그러나 MEM stage와 WB stage에 right-to-left 신호가 있다.
이는 cycle을 형성하기 때문에 문제를 일으킨다.
MEM stage에서의 cycle은 branch hazard를 일으키고,
WB stage에서의 cycle은 data hazard를 일으킨다.
해결방법
Bubble(Stall, nop)
앞의 instruction이 먼저 수행되어야 뒤의 instruction이 수행될 수 있다.
따라서 hazard가 발생하는 경우 뒤의 instruction들은 한 cycle을 기다려야 한다.
Instruction이 wait하기 위해서 중간에 아무런 기능을 하지 않는 instruction을 넣어서 처리한다.
아무런 기능을 하지 않는 것은, PC의 값을 4 증가 시키는 것 외에 아무런 변화를 일으키지 않는 것을 의미한다.
이렇게 아무런 기능을 하지 않는 instruction을 nop(no operation) instruction이라 한다.
nop instruction은 psedo-instruction으로, 실제로는 존재하지 않는다.
대신 <pre>sll $0, $0, 0</pre>와 같은 instruction을 이용한다.
이는 0의 값의 bit를 0번 이동하는 것이기 때문에 아무 행동도 하지 않는 instruction이다.
nop를 추가하는 것을 "bubble이 들어간다.", 또는 "stall이 생긴다"라고 한다.
Forwarding(Bypassing)
앞의 instruction의 수행이 끝나기 전에 pipeline register에서 값을 미리 얻어올 수 있다.
이를 forwarding이라 한다.
이를 위해서는 추가적인 datapath와 control이 필요하다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
4. Data Hazard (0) | 2021.05.30 |
---|---|
4. Structural Hazard (0) | 2021.05.30 |
4. Pipelining (0) | 2021.05.23 |
4. Single Cycle, Multi Cycle, Pipeline (1) | 2021.05.23 |
4. Single Cycle Design (0) | 2021.05.16 |
댓글