분기예측 키워드

정적 분기예측, 동적 분기 예측

1비트 예측기, 2비트 예측기 BHT, BTB, 글로벌/로컬 히스토리 기반 예측

분기예측 동작과정

분기 예측 한계와 부작용

분기 예측 최적화 팁

구체적인 예시, 코드, CPU별 동작원리

분기 미스패널티 → 1~20클럭 정도의 성능손실 발생 가능성

간단하게 알아보는 분기 예측

OutOfordering과 함께 항상 언급되는것이 분기예측이다. 분기예측은 CPU가 if, for, while 등과 같은 분기문(조건문)을 만났을 때다 음에 어떤 명령어를 실행할지를 미리 예측하는 기술이다.

현대 CPU는 파이프라인 구조로 여러 명령어를 동시에 처리하는데, 어떤 경로(if문이 참/거짓 등)로 갈지 결정되기까지 파이프라인이 멈추면 성능이 크게 저하된다. 이를 예측해서 파이프라인이 멈추지 않도록하는 기법.

예시 코드 → 분기 예측이 잘 되는 코드

int sum = 0;
for (int i = 0; i < 1000000; ++i) {
    if (i < 999999)   // 대부분 참
        sum += 1;
    else
        sum += 2;
}

예시 코드 → 분기예측이 어려운 경우

int sum = 0;
for (int i = 0; i < 1000000; ++i) {
    if (rand() % 2 == 0)   // 무작위 분기
        sum += 1;
    else
        sum += 2;
}