분기예측은 기존 분기이슈인 명령어 파이프라인의 block(중단) 상태 및 성능저하를 개선하고자, 분기점이 실행될 시점을 추론하여 미리 분기명령을 실행하는 방식입니다.
예측 성공시 그대로 분기명령 실행, 실패시 분기 명령을 철회하고 기존 명령을 그대로 지속합니다. 즉 별도의 중단없이 파이프라인은 명령어 처리를 계속할 수 있게 됩니다.
※Cahce memory의 data 저장원리인 locality 개념과 같습니다. 시스템은 경험적인 추론 알고리즘을 통해 분기가 일어날 가능성이 높은 지점을 예측하고, 분기명령을 미리 실행합니다.
분기예측을 통해 처리중단을 방지 가능
먼저 아래와 같이 분기예측을 통한 명령처리 과정을 가정해보겠습니다.
A. 분기예측으로 인해 분기가 일어나는 시점은 FI segment에서 명령어가 처리 될 때입니다.
즉 분기가 일어나도 기존 명령어 처리 시 DA, FO, EX 세그먼트에서의 처리가 무시될 여지는 없습니다.
B. 분기예측 이후 예측의 hit/miss 여부 상관없이 분기명령의 FI, DA, FO, EX는 모두 실행됩니다.
C. 분기예측의 hit/miss 여부를 판단하는 시점은 EX 시점입니다. 해당 시점에서 분기예측 실패를 인지할 경우에 기존 분기 명령을 철회하고, 새로운 명령어를 처리하게 됩니다.
D. 새로운 명령어가 실행되는 시점은, EX후 바로 다음 시점입니다. 여기서 시점이란, 분기명령의 EX세그먼트가 실행된 다음의 Step(Clock Pulse)입니다.
→ 위 가정에 따라 분기명령을 EX까지 실행 후 분기예측이 실패했다는 것을 인지하게 됩니다.
→ Instruction 3에서 예측실패 후, Instruction 4에서 명령어(분기 명령이 아닌, 기존 수행하고 있는 작업에 대한 처리)가 FI부터 순차 실행됩니다.
→ 마찬가지로 Instruction 5,6에서 분기예측을 위한 FI fetch가 폐기될 시점까지 분기명령은 지속되며, 폐기 후엔 명령어 처리가 계속 진행됩니다.
→ 분기예측을 실행한다면 분기점으로 인한 처리중단을 방지할 수 있습니다.
분기예측이 없다면 처리중단으로 인한 컴퓨터 성능저하 초래
→ 분기예측이 없다면 Instruction4에서 Step 4에 실행된 FI Segment는 무시(폐기)되고, 분기 명령이 끝날 때까지 stall(대기)상태입니다. 분기명령의 EX까지 모두 완료된 이후에 FI가 실행됩니다. 이로 인해 3Step만큼의 Stall(중단)이 발생합니다.