2-2/컴퓨터 구조

[컴퓨터 구조] Control Hazard

윤진노 2022. 11. 30. 23:29

Pipeline Hazard에는 3가지 종류가 있다고 했다.

Structural Hazard, Data Hazard, 그리고, Cotrol Hazard

오늘은 Control Hazard에 대해서 알아보자.

 

 

💻 Control Hazard

Control Hazard는 branch instruction 다음 instruction이 무엇이 올지 EX stage때까지 모를때 발생한다.

 

beq가 branch 될수도 안 될수도 있다. 만약에, Branch가 된다면 우리가 Fetch 해온 Instruction 들이 모두 쓸모 없게 되버리는 것이다. 이것은 성능 측면에서 매우 손해이다.

 

이것에 대한 여러가지 해결방법이 있는데, 가장 쉬운 것은 branch의 조건을 만족시키는 지 안시키는지 알아낼 때까지 즉,ALU로 연산을 하는 EX pipeline이 실행될 떄까지 stall 하는것이다. stall 하는것은 bubble을 집어넣는 것이다.

 

위 그림에서의 상황을 보자. beq의 두 register 의 데이터 값이 같다면 or로 branch 하는 과정을 담고 있다.

그래서 or의 IF는 beq의 EX과정 이후에 되어야만 한다. 그런데 위 과정에서는 beq의 EX과정과 or의 IF가 같은 pipeline에서 일어나고 있다. 이것이 어떻게 되냐면, ID 단계에서 추가적인 하드웨어를 넣어 비교하는 작업이 일어나게 한거다. 그렇다면 그 결과를 바탕으로, ALU에서 바로 IF를 할수 있게 된다.

 

이것으로 보아도, control hazard는 최소 1개의 버블이 생길 수 밖에 없다.

이 문제를 또 조금이라도 보완하기 위해서 Branch Prediction 이라는 것이 생겨난다.

 

 

💻Branch Prediction

Branch Prediction이란 브랜치를 예측하는 것이다. 

기본적으로, Branch가 될 것이다, 안 될 것이다 중에서 하나를 골라 예측하는 것인데. 만약 예상이 맞다면 Stall 없이 쭉 실행할 수 있게 되고 틀리면 손해를 살짝 보는 것이다.

 

 

RISC-V에서는 항상 Branch가 안 된다고 가정을 하고 진행한다.  

그러다가, Branch가 된다면, IF를 했던것들을 버려야 하지만, 조건을 만족시키지 못 했을때는 기다려야 하는 stall이 제거되는 성능적인 장점이 생긴다.

 

 


Prediction은 Static branch prediction, Dynamic branch prediction 2가지 방법이 있다.

 

Static branch prediction은 실행 전에 모인 정보들을 사용하여 예측을 한다.

예를 들면, loop 문 마지막에, branch가 빈번히 발생한다. 이런 정보를 갖고 있다면, branch가 된다고 예측하게 된다.

한마디로, 이전 데이터베이스들을 분석해 확률이 더 높은 것을 선택하게 된다.

branch가 된다, 안된다 이렇게 정해두기 때문에 Static(정적인) 이라고 불린다.

 

Dynamic branch Prediction은 그와 반대로 runtime에 모인 정보들을 사용하여 예측을 한다.

그리고, 결과를 딱 하나를 두고 하는 것이 아니라, 여러 결과를 가지고 한다. 최근의 branch된 결과들을 계속해서 작성해놓아 예측을 진행한다. 이 부분은 하드웨어가 추가적으로 필요하다는 단점을 가지고 있다.

이 방식은 초반보다, 점점 데이터가 쌓이면 쌓일수록 정확도가 높아진다. 현대 CPU는 이 방식으로 90%의 정확도를 자랑한다.