명령어들이 Control에 대한 종속성이 있어, Control의 순서가 바뀌어 실행이 제대로 되지 않는 현상
Program Counter
(이하 PC
)는 한 명령어가 끝난 후 PC + 4
로 다음 명령어를 실행하는데,
branch, jump
등 분기로 인해 원래 Pipeline에서 다음에 실행되어야 할 명령어들을 비워주고 분기로 인한 새로운 명령어들을 Pipeline에 채워주어야 함
전체 명령어의 약 20%정도에서 Control Flow가 발생함
forward(if-then-else)
에서 약 50%가 발생함backward(loop)
에서 약 90%가 발생함정상적으로 nextPC = PC + 4
가 되는 경우는 약 86%, 나머지 14%에 대해 Delay와 성능 저하를 최소화해서 Pipeline을 실행하도록 해야 함
nextPC
for MIPSnextPC = PC + 4
jump
: 무조건 Pipeline을 비워줘야 함branch
: true, false
에 따라 Pipeline을 비울지 말지 결정해야 함MEM
단계가 아닌 ALU에서 계산이 끝난 직후 결과를 다음 Pipeline에 넘겨주면 1cycle
을 줄일 수 있음nextPC = PC + 4
)주소만을 모아놓고, nextPC
를 예측하는 역할
PC
주소들은 다음에도 사용될 가능성이 있으므로 이를 저장최근에 사용된 것들은 아주 가까운 미래에 다시 사용될 가능성이 높다.
최근에 사용된 것들 주변의 것들이 계속 사용될 가능성이 높다.
주소를 BTB index, Tag로 나누고, Tag가 같으면 BTB index로 가서 미리 계산된 nextPC
를 가져옴