보다 현실적인 branch 예측을 하는 방법

branch 는 무조건 

일어날거야 or 안일어날거야
뒤로뛸거야 or 앞으로뛸거야

등으로 예측을 세분화 하는것...

1bit Prediction

<aside> 💡 이녀석은 꽤나 막연한 녀석이다


<aside> 💡 이전에 분기했는지 안했는지 예측하는 모델


한마디로 샤워실의 바보 같은 놈!

뜨거운물 나오면 차가운물로 바꾸고

차가운물 나오면 뜨거운물로 바꾸고

예측이 맞으면 $Q(1)$

예측이 틀리면 $(1)$

Untitled

</aside>

→ for문을 예측하는 방법

<aside> 💡 for문은 조건이 맞으면 for문 안으로 들어가고

for문 마지막에서는 for문 처음으로 무조건 분기한다

조건이 안맞으면 for문 밖으로 branch 하지?


Untitled

for문이 100번 돈다고 가정하자!

해당 분기는 일단 분기를 안한다고 가정하고 코드가 돌고,

만약 그 가정이 틀렸다?

그럼 바로 태세전환해서 분기를 한다고 가정하고 코드가 돈다.

그러면 한번은 틀리고 나머지 100번은 정답

만약 분기를 안한다고 가정했는데

진짜 분기를 안했다?

그럼 stall은 없다

고로 다음 방법은 n-1 의 히스토리를 가짐

</aside>

→ [1Bit Prediction](https://cybecho.notion.site/1Bit-Prediction-0f9807edbd804ebf8abdddd2e5087871) 는 Pingpong 문제에 대해 방안이 없음

<aside> 💡 만약 분기 : 1 비분기 : 0 라고 할떄, 0 1 0 1 0 1 0 1 . . . 이 반복되면 어캄?

for loop 문에서 해당 문제가 발생할 수 있다


기존 [1Bit Prediction](https://cybecho.notion.site/1Bit-Prediction-0f9807edbd804ebf8abdddd2e5087871) 방식으로 문제를 진행하면 틀려서 바꾸면 바꾼값이 또 틀리고 틀려서 또바꾸면 바꾼값이 틀려서

정확도는 0% 가 되는 치명적인 문제가 발생한다

이를 해결하기 위해 [2Bit Predictor](https://cybecho.notion.site/2Bit-Predictor-01839bf5324c43cd9ec7b8f556921207) 방법을 고안하게 된다

</aside>