본문 바로가기

학교공부/컴퓨터구조

컴퓨터구조 13 - Branch Prediction

오늘도 즐거운 branch 개선시간~

 

저번시간에 Global branch history 와 BTB를 이용하여 branch의 성능을 향상 시키는 법을 배웠음.

근데 여기도 문제가 있는데...

 

만약 Branch P에서와 Q에서의 패턴이 동일하다고 하자 근데 P는 taken이고 Q는 not taken이면

동일한 PHT를 계속 update하니까 예측 성공률 떨어짐

 

또 보면 패턴이 골고로 퍼져있는게아니라 특정 패턴에 좀 몰려있는 성향이 있음. 그러면 특정 패턴에 대한 기억을 하나밖에못하니까 global hitory 특징을 못살린다. 

 

해결방법


 

  1. 기억하는 패턴의 bit를 늘리면 되지 않을까? -> 1bit만 늘려줘도 table크기는 두배가 됨. cpu 용량이나 가격한계? 암튼 불가능.
  2. branch filtering을 하자. biased된 branch들을 간단한 predictor로 구분해보기(e.g., last time, static 등등)
  3. Gshare

Gshare

 

PC랑 gbh랑 xor 해버려서 겹치는거 막는다. 

마치 특정 하게몰린 값을 편평하게 펴는 작업.

이러면 다른 패턴에서 xor한거랑 같아질수도 있지만 전체적으로보면 펴는게 이득임.

 

교수님 여담 : 메모리 성능 개선해봐야  cpu가 어차피 빠르기때문에 cpu개선하는게 벤치마크에 도움된다 이말이야~

  4. Gskew : 이건 이해가안가서 패스

 

 

Local Branch Prediction


이전에 앞뒤 branch들의 연관성을 이용해 Global branch를 적용했다면 이번에는 같은 branch의 연관성으로 Local branch를 적용해보자

 

 

문제 : for(n = 1 n <= 4 n ++) 요런건 그냥 딱봐도 100% 4번 돌게 보이는데 이런 애들도 predict해야됨

해결방법 : Local Branch Correlation

 

 

요렇게 특정 명령어의 branch를 위한 register을 따로 만들어준다. 즉 per-branch history register임  

하나의 branch에 대해서 만드는거니까 예측률 매우 높다.

앞의 3bit를 보면 반드시 다음 결과를 알 수 있다. 1110 -> taken 0111-> not taken

 

 

 

한계 :  for문은 맞추기 쉽다. if while은 어려움. branch마다 각각 만들어주다보면 hw를 너무 많이 써야한다.

 

 

Hybrid Branch Predictors 


 

branch에 제일 best인 prediction을 골라준다

 

장점 : 정확성 올라감 

 

단점 : selector 구현해주고 hw도 추가해줘야됨

 

부팅되면 보면서 처음부터 1bit, 2bit, global, local, ai 순으로 계속 바꿔가면서 성능 올려본다.

 

요즘엔 그냥 스까서 쓰는듯