오늘도 즐거운 branch 개선시간~
저번시간에 Global branch history 와 BTB를 이용하여 branch의 성능을 향상 시키는 법을 배웠음.
근데 여기도 문제가 있는데...
만약 Branch P에서와 Q에서의 패턴이 동일하다고 하자 근데 P는 taken이고 Q는 not taken이면
동일한 PHT를 계속 update하니까 예측 성공률 떨어짐
또 보면 패턴이 골고로 퍼져있는게아니라 특정 패턴에 좀 몰려있는 성향이 있음. 그러면 특정 패턴에 대한 기억을 하나밖에못하니까 global hitory 특징을 못살린다.
해결방법
- 기억하는 패턴의 bit를 늘리면 되지 않을까? -> 1bit만 늘려줘도 table크기는 두배가 됨. cpu 용량이나 가격한계? 암튼 불가능.
- branch filtering을 하자. biased된 branch들을 간단한 predictor로 구분해보기(e.g., last time, static 등등)
- 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 순으로 계속 바꿔가면서 성능 올려본다.
요즘엔 그냥 스까서 쓰는듯
'학교공부 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터구조 15 - SuperScalar (0) | 2020.06.17 |
---|---|
컴퓨터구조 - 14(Predicated execution, Loop Unroll) (0) | 2020.06.17 |
컴퓨터구조 12 - Branch Prediction (0) | 2020.06.15 |
컴퓨터구조 10,11 - Pipeline Hazards (2) | 2020.06.15 |
컴퓨터구조 9 - Pipeline (0) | 2020.06.15 |