본문 바로가기
Computer Science/Computer Architecture

[Computer Architecture] Pipelining and Hazards (파이프라이닝과 해저드)

by __K.Jun__ 2024. 8. 1.

Pipelining

여러 명령어가 중첩되어 실행되는 구현 기술 

 

Five Stages of Instruction

- IF : 메모리에서 인스트럭션 패치 
- ID : 인스트럭션 해독 및 레지스터 읽기
- EX : 연산 수행 및 주소 계산
- MEM : 메모리 읽기/쓰기
- WB : 레지스터에 쓰기
 

Hazards

다음 사이클에 실행되어야 할 인스트럭션이 실행될 수 없는 상황을 Hazard라고 한다.
- Structure Hazards : 같은 클럭 사이클에 실행하기를 원하는 명령어의 조합을 하드웨어가 지원할 수 없기 때문에 발생 ex) IF와 MEM
- Data Hazards : 어떤 단계가 다른 단계가 끝나기를 기다려야 하기 때문에 파이프라인이 지연되어야 하는 경우 발생
- Control Hazards : 다른 명령어들이 실행되는 동안 어떤 명령어의 결과에 기반을 둔 결정을 할 필요가 있을 때 발생 ex) branch
 

Structure Hazards

  load/store는 메모리에서 데이터에 접근하고, 메모리에서 instruction을 패치하기도 한다. 파이프라인에 메모리가 하나라면 같은 메모리에서 데이터 접근과 IF가 동시에 발생하여 충돌이 일어나거나 해당 사이클을 stall시키는 bubble이 발생할 수 있다. 따라서 파이프라이닝 된 데이터패스는 분리된 인스트럭션/데이터 메모리를 필요로한다.
 

Data Hazards

- Forwarding

  이와 같이 앞에서 계산된 결과를 뒤에서 바로 사용해야할 때 데이터 해저드가 파이프라인을 심각하게 지연시킬 수 있다. 이를 해결하기 위해 별도의 하드웨어를 추가하여 정상적으로 얻을 수 없는 값을 내부 자원으로 부터 일찍 받아 오는 것을 Forwarding 또는 Bypassing이라고 한다.

먼저 실행된 명령어가 끝나지 않더라도 필요한 값이 계산되는 대로 일찍 가져와서 다음 인스트럭션에서 사용한다.
 
- Load-Use Data Hazard

load된 것을 다음 인스트럭션에서 바로 급하게 사용하려면 위와같이 stall이 발생하지 않을 수 없다. 이러한 상황에는 load된 것을 나중에 사용해서 굳이 stall이 일어나지 않게 하는 방식으로 인스트럭션의 순서를 조정한다.

 

Control Hazards

- Stall on Branch (분기 시 지연)

  분기 명령어가 나올 때 마다 분기 결과를 확인하고 다음 인스트럭션을 패치하느라 다음 인스트럭션 수행이 지연이 된다면 큰 속도 저하를 초래할 것이다. 좀 더 효율적으로 분기 명령어를 다루기 위해서 컴퓨터는 예측을 사용한다. 가장 간단한 방법으로는 분기는 항상 실패한다고 예측하는 것이다.
 
- Branch Prediction

  분기가 실패한다고 예측했을 때 그 예측이 적중한다면 일반적인 명령어 수행 속도와 같이 다음 인스트럭션이 수행 되고, 그 예측이 빗나갈 때만 다음 인스트럭션 패치를 위한 지연이 발생한다.

728x90