Hazard
-> 바로 다음 cycle에서 insturction을 이어서 실행 할 수 없는 상황
1) Structural hazards
=> 여러개의 instruction이 같은 장치를 같은 cycle에 사용하려고 할때 발생
2) Data hazards
=> 이전의 instruction에서 만들어줘야 할 data가 아직 준비되어 있지 않을 때
3) Control hazards
=> Data hazard와 비슷하지만 beq와 같이 PC 값에 영향을 주는 경우
Structural hazards
-> resource의 사용 conflict
-> 장치를 더 추가하여 해결함
ex) single ALU 사용 시 문제가 되는 사례
beq는 두개의 ALU 연산을 필요로 함
1) 두 Register의 value 비교
2) PC + 4 및 displacement(address) * 4 주소 연산
Data hazards
-> 이전 instruction에서 새로 바꾸는 값을 이어서 사용하는 경우
add $s0,$t0,$t1
sub $t2, $s0, $t3
add에서 WB 단계에서 $s0에 값이 쓰여지기 전에
sub에서 ID 단계에서 $s0의 값을 읽어버릴려고 하니까 문제가 생김
-> sub의 ID 단계를 add의 WB 단계 다음으로 지연시켜서 해결(Stall)
Pipeline Stall
-> 필요한 결과값이 나올때까지 명령어 수행을 지연(Stall) 시키는것
-> 간단한 방법이지만 성능이 저하된다
Stall 피하는 방법 => code 배치를 바꿔서 다음 instruction에서 load result의 바로 사용을 피한다.
Forwarding (Bypassing)
-> 필요한 결과값이 register에 저장되는 것을 기다리지 않는다
-> Datapath에 추가적인 연결을 통해서 중간에서 가져온다.
같은 Register에서 Read Write가 동시에 이루어짐
1) Single - cycle CPU : 읽는 값은 새로 쓰기 이전의 값
2) Pipelined CPU : 새로 쓰는 값을 바로 읽어 올 수 있음 , 그러나 하나의 instruction이 동시에 읽고 쓰진 않는다.
Register를 읽는 부분은 ID 단계에서, Register에 쓰는 부분은 WB 단계에서 이루어진다.
그래서 읽는 instruction은 더 나중에 들어온 instruction
쓰는 instruction은 더 이전에 들어온 instruction
=> Register file 안에 Bypass 회로가 내장되어 있다 가정하여 해결
Data hazard
1) Load-Use Data Hazard
발생 조건 : ID/EX.MemRead and ((ID/EX.RegisterRt = IF/ID.RegisterRS) or (ID/EX.RegisterRt = IF/ID.RegisterRt))
lw $s0 , 20($t1)
sub $t2, $s0, $t3
2) EX Hazard
발생 조건 : EX/MEM.RegisterRd = ID/EX.RegisterRs 혹은 EX/MEM.RegisterRd = ID/EX.RegisterRt
3) MEM Hazard
발생 조건 : MEM/WB.RegisterRd = ID/EX.RegisterRs 혹은 MEM/WB.RegisterRd = ID/EX.RegisterRt
Control hazard
- Branch 결정은 EX 단계에서 ALU 연산에 의해 이루어지며, Branch 주소도 별도의 adder를 통해 EX 단계에서 확정된다
- 그러나 PC값이 다음 instruction의 IF 단계 이전에 결정이 되어 있어야 한다.
=> ID 단계에서 추가적인 h/w resource를 추가하여, 비교할 register 값을 읽자마자 ID 단계에서 바로 Branch 결정 및 Branch 주소를 계산해 버리는 해결책 (하지만 이 역시 1 cycle stall이 필요함)
'CS(Computer Science) > 컴퓨터구조' 카테고리의 다른 글
11. 메모리 구조(1) (0) | 2023.06.04 |
---|---|
10. 파이프라인 (3) (0) | 2023.06.04 |
10. 파이프라인 (1) (0) | 2023.06.04 |
9. 프로세서 (3) (0) | 2023.06.04 |
9. 프로세서 (2) (0) | 2023.06.04 |