Structure Hazards
하나의 functional unit을 두고 서로 다른 stage(instruction)에서 사용하려고 하는 경우에 발생한다.
서로 다른 stage가 같은 functional unit을 사용하는지는 datapath의 strucutre만 보면 판단할 수 있다.
이 때문에 "structural" hazard라고 한다.
다음과 같은 structure hazards가 존재한다.
그러나 5-stage MIPS에서는 하드웨어적으로 해결하기 때문에 structure hazard가 없다.
- Memory
- instruction과 data가 single memory에 들어있는 경우
- IF와 MEM stage에서 동시에 memory에 접근하는 경우
- instruction memory와 data memory를 분리시킴으로써 해결한다.
- Register
- ID와 WB에서 동시에 register를 접근하는 경우
- ID와 WB의 latency를 다른 stage의 절반으로 함으로써 해결한다.
Memory Unit
Instruction memory와 data memory가 합쳐져서 하나의 메모리를 구성한다면 IF stage와 MEM stage에서 모두 메모리를 사용하기 때문에 한 instruction은 wait 해야 한다.
앞선 instruction이 data에 접근하는 경우, 즉 lw나 sw인 경우일 때만 hazard가 발생한다.
예시
아래 4번째 cycle에서 첫번째 instruction은 data memory를 read 하고 있고, 4번째 instruction은 instruction fetch를 하고 있다.
Instruction memory와 data memory가 하나로 이루어져 있다면 첫번째 insturction이 종료된 후에 네번째 instruction을 수행할 수 있다.
즉, structure hazard가 발생한다.
따라서 4번재 instruction을 수행하기 전에 bubble이 들어가야 한다.
성능
lw/sw가 나오는 경우는 20%이므로, CPI는 0.2가 증가한다.(∵ CPI = 1 + 0.2 * 1)
따라서 성능은 20% 감소한다.
해결
이를 해결하기 위해 iyffnstruction과 data가 single memory에 있지 않도록 instruction memory와 data memory를 분리한다.
Register Unit
ID stage와 WB stage에서 동시에 register unit을 사용할 때 발생한다.
앞선 instruction이 결과를 reigster에 write하는 경우, 즉 lw나 ALU인 경우 발생한다.
ID stage에서는 instruction decode를 하면서 동시에 register read를 수행한다.
WB stage에서는 register unit에 write를 한다.
해결
이를 해결하기 위해서 하나의 clock을 2개로 쪼갠다.
앞의 구간은 WB에서 register unit을 사용하도록 하고, 뒤의 구간은 ID에서 register read를 하도록 한다.
Register에 접근하는 stage의 latency가 다른 stage에 비해 절반인 것은 structure hazard를 회피하기 위한 것이다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
4. Control Hazard (Branch Hazard) (1) | 2021.05.30 |
---|---|
4. Data Hazard (0) | 2021.05.30 |
4. Pipeline Hazards (0) | 2021.05.30 |
4. Pipelining (0) | 2021.05.23 |
4. Single Cycle, Multi Cycle, Pipeline (1) | 2021.05.23 |
댓글