Data Hazard

김나현·2024년 11월 4일
post-thumbnail

Pipeling Hazard

Pipelineing 과정에서 발생할 수 있는 위험 요소를 의미

  • 종류
  1. Structural Hazard : 같은 자원을 써야 할 때
  2. Data Hazard : 데이터를 read, write 해야 할 때, 앞의 명령어가 수행될 때까지 기다려야 할 때
  3. Control Hazard : 앞의 명령어에 의해 control이 좌우될 때

Data Hazard 1. 개념 , 기초설명

Describe the concept and foundation of the method

: 데이터를 read, write 해야 할 때, 앞의 명령어가 수행될 때까지 기다려야 할 때 발생 한다. = data dependency

예제는, RAW(read after write) data dependency가 발생.

Hazard occurring beacuse an instruction depends upon the result of a prior instruction .

Harzard occurring beacuse the HW cannot execute the instructions in parallel

--> 이 경우는 2개의 bubble이 발생한다.
add의 연산결과가 register에 update가 되어야 사용가능하다.

강의 : https://www.youtube.com/watch?v=V8YFDHft8XA

Soultion

- Forwarding


(이해용: 어떤 데이터의 값이 계산이 되면 그 결과를 바로 사용하는 것
레지스터에 값이 쓰여질 때까지 기다리지 않음)

ALU(EX 단계)에서 add를 계산하고 난 후에 곧바로 다음 명령어 sub에게 결과를 제공한다. 이를 통해서 register에 기록 될때까지 후속 명령어가 기다릴 필요가 없어진다.

단,
MEM에서 나온 값이 ID/EX 사이로 들어갈 수는 없습니다. 과거로 갈 수 없기 때문입니다.

HW change for Forwarding

(ADD Forwardiing unit)

장점) 성능 향상 - 기다리지 않아도 되기 때문에 버블의 발생을 줄일 수 있다.

단점) 하드웨어 복잡성 증가 - 포워딩을 구현하려면 추가적인 하드웨어가 필요.


Load-Use Data Hazard

MEM에서 나온 값이 ID/EX 사이로 들어갈 수는 없다고 했는데 MEM에서 나온 경우 발생

pipline stall (파이프라인 정지, bubble을 넣어서 실행을 지연 기다리게한다. ) 을 해줘야 한다. ( backward in time은 불가능 하기에 )


--> 1 bubble, clock clycle만 delay

Soultion

Code Scheduling

pipline stall을 막기 위해 명령어의 순서를 조절 .

LDUR 다음 R-type이 나오는 것을 막고자
LDUR을 다 올려버린다.

장점 ) forwarding으로 해결 불가능한 data hazard 해결. cycle을 줄인다.

단점) 명령어의 순서를 재배치하는 과정에서 코드가 복잡해 질 수 있다.

래퍼런스)

https://hi-guten-tag.tistory.com/266
https://www.youtube.com/watch?v=8yxrT1isnpE
https://gofo-coding.tistory.com/entry/Data-Hazard#title-5
https://m.blog.naver.com/tlsrka649/221992038550

profile
Let's study hard!

0개의 댓글