1. RAW (Read After Write)
쓰고 나서 읽어야 해서 생기는 stall cycle들을 말한다.
ADD r1, r2, r3
SUB r4, r1, r3
r1 레지스터의 값을 ADD에서 write한 후 SUB에서 사용하는 Dependence 상황에서 발생한다.
true dependent라고도 한다.
이러한 상황은 in-order processor처럼 inst의 순서를 바꾸지 않는 프로세서에서도 발생하는 hazard이다.
2. WAR (Write After Read)
읽는 inst과 쓰는 inst이 independent하기 때문에 순서를 바꿔도 되겠구나 했는데,
막상 순서를 바꾸고 나면 문제가 생긴다. 예시를 통해 이해하는 게 좋다.
SUB r4, r1, r3
ADD r1, r2, r3
SUB 의 결과인 r4와 ADD의 operand인 r2, r3만 보면 이 두 inst은 independent하다고 판단될 수 있다.
그래서 out of order processor(== Tomasulo algorithm)가 stall cycle을 없애기 위해 순서를 바꾸곤 하는데 그때 문제가 발생하는 것이다.
이러한 상황을 anti-dependent하다고 한다.
SUB의 r1과 ADD의 r1은 서로 아무런 관계가 없는데도 레지스터 개수의 한계로 인해 이러한 상황이 발생하게 된다.
MIPS 5 stage pipeline은 2번째 단계인 ID에서 레지스터의 값을 읽고, 5번째 단계인 WB에서 결과를 쓰기 때문에
이와 같은 상황은 발생하지 않는다.
3. WAW (Write After Write)
SUB r1, r4, r3
ADD r1, r2, r3
마찬가지로 레지스터 개수의 부족으로 r1 레지스터가 두 inst에서 사용되고 있다.
ADD 이후의 inst에서 r1 이 사용되는 상황을 고려할 때, 정상적으로는 ADD의 결과가 저장되어 있어야 하는데,
inst의 순서를 바꾸게 되면 SUB의 결과가 저장되어 있을 수 있기 때문에 hazard에 속한다.
이것을 output dependence라고도 한다.
MIPS 5 stage pipeline에서는 두 inst 모두 5번째 단계인 WB에서 결과를 레지스터에 기록하므로,
WAW hazard 역시 발생하지 않는다.
정리하면, MIPS 5 stage pipeline과 같이
in-order processor일 경우 RAW hazard만 발생하고,
out-of-order processor에서는 3가지 hazard 모두 발생하게 된다.
'컴퓨터 구조' 카테고리의 다른 글
Speculative Tomasulo's Algorithm (0) | 2024.03.16 |
---|---|
Dynamic Branch Prediction Overview (0) | 2024.03.16 |
[컴퓨터 구조] Pipelined Processors 종류 (0) | 2024.03.11 |
자주 나오는 공식 리뷰 (0) | 2024.03.11 |
[Cache] Cache의 종류와 Memory System (2) | 2023.11.06 |