스킬캠퍼스

오늘 끝나면

분기 예측

  • 분기 예측의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 분기이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

1·2비트 예측기·BTB — 빗나가면 치르는 대가 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

반도체 설계 · 36

분기
예측

분기는 결과가 나와야 다음에 뭘 할지 안다.
그동안 파이프라인이 멈춘다.
그래서 미리 추측한다. 맞으면 공짜, 틀리면 비싸다.

P.01반도체 설계 · 36

분기가 파이프라인을 멈춘다

파이프라인은 매 cycle 다음 명령을 IF로 끌어온다. 그런데 분기는 어디로 갈지를 한참 뒤에야 안다.

if (x) goto L 같은 분기는 조건을 EX에서 계산한다. taken이면 저쪽으로 점프하고, not-taken이면 바로 다음 줄로 간다.
그 답이 나오기 전엔 다음 IF 주소가 정해지지 않는다.

그냥 기다리면 분기마다 파이프라인에 거품(bubble)이 생긴다. EX까지 비워두면 2 cycle을 통째로 날린다.
코드의 5~6명령에 하나꼴로 분기가 나온다. 매번 멈추면 파이프라인의 이득이 거의 사라진다.
그래서 답이 나오기 전에 일단 한쪽을 찍어 명령을 계속 채워 넣는다.

다음 명령 주소를 EX 전엔 모른다
분기. 답은 EX에서 나오는데 다음 IF는 지금 필요하다
IF
ID
EX
MEM
WB
주소 필요분기 결정
그냥 기다리면 EX 답 나올 때까지 거품 2칸
분기 (EX)거품거품= 2 cycle 손해 (분기마다)cycle →
명령 5~6개에 하나가 분기. 매번 멈추면 파이프라인 이득이 사라진다
P.02반도체 설계 · 36

예측, 답 나오기 전에 먼저 찍는다

분기 예측기는 “이 분기는 taken일까 not-taken일까”를 미리 찍는 작은 장치다.

찍은 쪽 명령을 곧바로 파이프라인에 채워 넣는다. EX에서 진짜 방향이 밝혀진다.
맞았으면 멈춤 없이 그대로 흐른다. 예측이 공짜로 떨어진 셈이다.

틀렸으면 잘못 끌어온 명령들을 전부 버린다. 이걸 flush라 한다.
버린 칸만큼 다시 채워야 하니 그게 misprediction penalty다. 여기선 EX 뒤 2칸, 곧 2 cycle이다.
그래서 예측기의 목표는 단순하다. 최대한 자주 맞히는 것이다. 적중률 1%가 곧 버린 cycle이다.

맞으면 공짜 · 틀리면 flush
먼저 찍기, 두 갈래의 결말
예측 적중멈춤 0 · 공짜
분기찍은 명령계속멈춤 없음
예측 빗나감flush + penalty
분기2칸 버림

버린 칸 = misprediction penalty

예측기의 목표는 단 하나, 최대한 자주 맞히기
P.03반도체 설계 · 36

1비트 · 2비트 예측기 · BTB

예측기는 점점 똑똑해진다. 가장 단순한 1비트부터 보자.

1비트는 직전 결과를 그대로 다음 예측으로 쓴다. 지난번 taken이었으면 이번도 taken으로 찍는다.
싸고 단순하지만 약점이 크다. 반복문 끝에서 딱 한 번 not-taken이 끼면, 그 한 번에 예측이 홱 뒤집혀 다음 반복 첫 분기까지 또 틀린다. 한 예외에 두 번 틀리는 셈이다.

2비트는 포화 카운터(0~3)를 둔다. 2 이상이면 taken, 아니면 not-taken으로 예측하고, 결과에 따라 한 칸씩만 오르내린다.
한 번 빗나가도 카운터가 한 칸만 움직여 예측 방향을 바로 안 뒤집는다. 그래서 가끔 끼는 예외에 흔들리지 않는다.

예측은 taken과 not-taken만이 아니다. taken이면 “어디로”도 필요하다.
BTB(Branch Target Buffer)는 분기 주소와 점프 목적지를 적어둔 작은 표다. IF 단계에서 바로 목적지를 꺼내 끊김 없이 그쪽 명령을 끌어온다.
방향은 카운터로, 목적지는 BTB로 잡는다. 둘이 짝을 이뤄야 진짜 예측이 된다.

마지막 결과에서 포화 카운터, 점프 주소까지
1비트에서 2비트 포화 카운터로, 그리고 BTB까지
1비트 · 마지막 결과 그대로예외 한 번 = 2번 틀림
예측 T예측 NTNT 한 번T 한 번
2비트 · 포화 카운터 0~3한 칸씩만 이동
0 강NT
1 약NT
2 약T
3 강T

2~3은 taken 예측, 0~1은 not-taken 예측. taken이면 오른쪽, not-taken이면 왼쪽으로 한 칸

BTB · 점프 목적지 표어디로 갈지
분기 주소목적지
0x1A0x40
0x2C0x08

IF에서 바로 꺼내 끊김 없이 그쪽을 끌어온다

방향은 카운터, 목적지는 BTB. 둘이 짝이다
P.04반도체 설계 · 36

직접 패턴을 먹여 적중률을 잰다

오른쪽에서 분기 패턴을 골라 1비트와 2비트에 동시에 먹여본다. 반복문, 엇갈림, 뭉치 패턴이 있다.

예측을 먼저 고른 뒤 STEP을 누르면 분기가 하나씩 진행된다. 적중과 miss(flush), 두 예측기의 카운터 변화가 함께 보인다.

“반복문 끝(TTT…NT)” 패턴을 보자. 1비트는 끼어든 NT 한 번에 다음 분기까지 두 번 틀리지만, 2비트는 카운터가 강T에서 한 칸만 내려가 곧장 회복한다.
엇갈림(TNTN)처럼 규칙 없는 분기는 둘 다 무력하다. 예측기가 못 따라잡는 한계도 같이 보인다.
여기서 고른 예측기가 그대로 최종 MyChip의 분기 예측기로 들어간다.

패턴 고르고, 예측 먼저, STEP으로 적중과 flush
분기 예측 · 1비트 vs 2비트, 16비트 CPU · 5-stage
분기 패턴, T(taken)·NT(not-taken) 시퀀스

거의 taken, 마지막 한 번만 not-taken

T
T
T
T
T
N
T
T
T
T
T
N
예측 먼저, 이 패턴, 어느 예측기가 더 적중?
예측기 상태, 지금 분기에서 어떻게 움직였나
1비트0~1
STEP을 눌러 시작한다
2비트0~3
STEP을 눌러 시작한다

1비트는 결과 그대로 기억 · 2비트는 포화 카운터(0~3, 2 이상이면 T 예측)

파이프라인, 빗나가면 EX 뒤 2개를 버림(flush)
IF
ID
EX
분기 결정
MEM
WB

STEP을 누르면 이 분기에서 멈췄는지(빨강) 흘렀는지(파랑)가 여기 뜬다.

분기는 EX에서 결정된다. 틀리면 IF·ID에 들어온 2개를 버리고 다시 채운다 = 2 cycle penalty

근거 패널, 분기별 예측/실제/적중0 / 12
실제
1비트
2비트

파랑 = 적중 · 빨강 = miss(flush), 같은 칸을 두 예측기가 어떻게 맞췄나

적중률, 지금까지 0개 처리
1비트0% (0/0)
2비트0% (0/0)
misprediction penalty, 버린 cycle
1비트 miss
0
penalty 0 cyc
2비트 miss
0
penalty 0 cyc

miss 1번이면 2 cycle를 통째로 버린다. 적중률 몇 %p 차이가 곧 버린 cycle 차이고, 그래서 분기 예측이 성능의 큰 변수가 된다.

깊은 파이프라인일수록 penalty가 커져 예측기 한 칸이 전체 속도를 좌우한다. 2비트 포화 카운터는 한 번의 예외에 흔들리지 않아 반복문 같은 규칙적 분기에서 강하다. 여기서 고른 예측기가 그대로 최종 MyChip의 분기 예측기로 들어간다.

P.05반도체 설계 · 36

적중률과 penalty, 성능의 큰 변수

분기 예측은 성능에 직결된다. 한 번 틀릴 때마다 파이프라인을 통째로 비우기 때문이다.

miss 한 번은 penalty cycle을 버린다는 뜻이다. 파이프라인이 깊을수록(stage가 많을수록) 분기 결정이 뒤로 밀려 한 번의 miss가 더 비싸진다.
현대 CPU는 파이프라인이 15~20단을 넘기도 한다. miss 하나에 십수 cycle이 날아간다.

그래서 적중률이 95%냐 97%냐가 체감 성능을 가른다. 예측기 한 칸의 정확도가 코어 전체 속도를 좌우한다.
실제 칩의 예측기는 2비트를 넘어 과거 분기 이력(history)과 여러 예측기 조합까지 써서 99%에 육박하는 적중률을 낸다. 출발점은 여기서 본 1비트와 2비트다.

Q. 2비트 예측기가 1비트보다 나은 점은?한 번 틀려도 예측 방향을 바로 안 뒤집어 안정적이다.
1비트는 직전 결과를 그대로 써서, 반복문 끝의 not-taken 한 번에 예측이 홱 뒤집혀 다음 반복까지 또 틀린다(한 예외에 두 번 miss).
2비트는 포화 카운터가 한 칸만 움직여, 강하게 굳은 방향은 예외 한 번에 흔들리지 않고 곧장 회복한다.
적중률 1%p가 곧 버린 cycle
100분기, miss당 2 cycle. 적중률이 곧 cycle이다
적중률 90%20 cyc 버림
miss 10
적중률 95%10 cyc 버림
miss 5
적중률 98%4 cyc 버림
miss 2
파이프라인 깊을수록 penalty가 커진다. 적중률 1%p가 큰 차이를 만든다

3줄 요약

  1. 11·2비트 예측기·BTB — 빗나가면 치르는 대가
  2. 2분기 예측은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

분기

1·2비트 예측기·BTB — 빗나가면 치르는 대가

ALU

산술·논리 연산을 하는 회로

ISA

CPU가 이해하는 명령어 집합과 인코딩