λΆκΈ° μμΈ‘ (Branch Prediction)
λΆκΈ° μμΈ‘ (Branch Prediction)¶
κ°μ¶
λΆκΈ° μμΈ‘μ 쑰건 λΆκΈ° λͺ λ Ήμ΄μ κ²°κ³Όλ₯Ό 미리 μμΈ‘νμ¬ νμ΄νλΌμΈ μ±λ₯μ λμ΄λ κΈ°μ μ λλ€. νλ νλ‘μΈμλ 90% μ΄μμ μμΈ‘ μ νλλ₯Ό λ¬μ±ν©λλ€.
λͺ©μ°¨¶
- μ μ΄ ν΄μ λμ λΆκΈ° λ¬Έμ
- μ μ λΆκΈ° μμΈ‘
- λμ λΆκΈ° μμΈ‘
- λΆκΈ° νκ² λ²νΌ
- ν¬κΈ°μ μ€ν
- μ°μ΅ λ¬Έμ
1. μ μ΄ ν΄μ λμ λΆκΈ° λ¬Έμ ¶
λΆκΈ°λ‘ μΈν νμ΄νλΌμΈ λ²λΈ¶
beq $t0, $t1, target
add $s0, $s1, $s2 # μ€νν΄μΌ νλ?
sub $s3, $s4, $s5 # μ€νν΄μΌ νλ?
...
target:
or $s6, $s7, $s8
μκ°: 1 2 3 4 5 6 7
beq: IF ID [EX] MEM WB
β
λΆκΈ° κ²°μ
add: IF ID β flush νμν μλ
sub: IF β flush νμν μλ
λΆκΈ° νλν°¶
λΆκΈ° κ²°μ μμ μ λ°λ₯Έ νλν°:
ββββββββββββββββββββ¬βββββββββββββββββ¬ββββββββββββ
β κ²°μ μμ β νλν° β μ€λͺ
β
ββββββββββββββββββββΌβββββββββββββββββΌββββββββββββ€
β ID λ¨κ³ β 1 μ¬μ΄ν΄ β μ΄κΈ° MIPS β
β EX λ¨κ³ β 2 μ¬μ΄ν΄ β μΌλ°μ β
β MEM λ¨κ³ β 3 μ¬μ΄ν΄ β 볡μ‘ν 쑰건 β
ββββββββββββββββββββ΄βββββββββββββββββ΄ββββββββββββ
νλ νλ‘μΈμ: 10-20 μ¬μ΄ν΄ νμ΄νλΌμΈ
β λΆκΈ° μμΈ‘ νμ!
λΆκΈ° μμΈ‘μ νμμ±¶
λΆκΈ° λΉλ: μ½ 20% (5κ° λͺ
λ Ήμ΄λΉ 1κ°)
μμΈ‘ μμ΄ νμ μ€ν¨:
CPI = 1 + 0.2 Γ 3 = 1.6 (3 μ¬μ΄ν΄ νλν° κ°μ )
90% μ νλ μμΈ‘:
CPI = 1 + 0.2 Γ 0.1 Γ 3 = 1.06
μ±λ₯ ν₯μ: 1.6/1.06 = 1.5λ°°
2. μ μ λΆκΈ° μμΈ‘¶
2.1 νμ Not Taken¶
μ λ΅: λͺ¨λ λΆκΈ°κ° μΌμ΄λμ§ μλλ€κ³ μμΈ‘
μ₯μ : ꡬν κ°λ¨
λ¨μ : 루νμμ μ±λ₯ μ ν
for (i = 0; i < 100; i++) // 99λ² taken, 1λ² not taken
// μμΈ‘ μ νλ: 1%
2.2 νμ Taken¶
μ λ΅: λͺ¨λ λΆκΈ°κ° μΌμ΄λλ€κ³ μμΈ‘
μ₯μ : 루νμ μ 리
λ¨μ : λΆκΈ° νκ² μ£Όμ κ³μ° νμ
for (i = 0; i < 100; i++) // μμΈ‘ μ νλ: 99%
2.3 BTFN (Backward Taken, Forward Not Taken)¶
μ λ΅:
- λ€λ‘ κ°λ λΆκΈ° (루ν): Taken μμΈ‘
- μμΌλ‘ κ°λ λΆκΈ° (ifλ¬Έ): Not Taken μμΈ‘
βββββββββββββββββββββββββββββββββββββββββββ
β λΆκΈ° λ°©ν₯μ λ°λ₯Έ μμΈ‘ β
β β
β PC=100: beq label (label=80) β
β β β
β λ€λ‘ λΆκΈ° β Taken μμΈ‘ β
β β
β PC=100: beq label (label=120) β
β β β
β μμΌλ‘ λΆκΈ° β Not Taken μμΈ‘ β
βββββββββββββββββββββββββββββββββββββββββββ
루νμ λμμ μ²μμΌλ‘ λμκ°λ κ²: λ€λ‘ λΆκΈ°
ifλ¬Έμμ elseλ‘ κ±΄λλ°λ κ²: μμΌλ‘ λΆκΈ°
3. λμ λΆκΈ° μμΈ‘¶
3.1 1λΉνΈ μμΈ‘κΈ°¶
βββββββββββββββββββββββββββββββββββββββββββ
β 1-bit Predictor β
βββββββββββββββββββββββββββββββββββββββββββ€
β μν: Taken(1) λλ Not Taken(0) β
β β
β λμ: β
β - νμ¬ μνλ‘ μμΈ‘ β
β - ν리면 μν λ°μ β
βββββββββββββββββββββββββββββββββββββββββββ
μν μ μ΄:
νλ¦Ό νλ¦Ό
ββββββββββ ββββββββββ
β β β β
βΌ β βΌ β
ββββββ β ββββββ β
β NT βββββββ΄ββ T βββββββ
ββββββ λ§μ ββββββ λ§μ
λ¬Έμ : 루ν μμκ³Ό λμμ νμ 2λ² νλ¦Ό
1λΉνΈ μμΈ‘κΈ°μ νκ³¶
루ν 100ν λ°λ³΅:
T T T ... T T N (99λ² T, 1λ² N)
β 루ν μ’
λ£
μμΈ‘: T T T ... T T T N
μ€μ : T T T ... T T N β
β νλ¦Ό (μμΈ‘ T, μ€μ N)
λ€μ 루ν μμ:
μμΈ‘: N β νλ¦Ό (μμΈ‘ N, μ€μ T)
100ν λ°λ³΅λ§λ€ 2λ² νλ¦Ό β 98% μ νλ
3.2 2λΉνΈ μμΈ‘κΈ°¶
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β 2-bit Saturating Counter β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 4κ°μ§ μν: β
β - 00: Strongly Not Taken β
β - 01: Weakly Not Taken β
β - 10: Weakly Taken β
β - 11: Strongly Taken β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
μν μ μ΄λ:
N N N
ββββββββββ ββββββββββ ββββββββββ
β βΌ β βΌ β βΌ
ββββ΄βββ ββββ΄βββ ββββ΄βββ ββββ΄βββ
β SNT β β WNT β β WT β β ST β
β 00 β β 01 β β 10 β β 11 β
ββββ¬βββ ββββ¬βββ ββββ¬βββ ββββ¬βββ
β β² β β² β β²
ββββββββββ ββββββββββ ββββββββββ
T T T
μμΈ‘: μμ λΉνΈκ° 1μ΄λ©΄ Taken, 0μ΄λ©΄ Not Taken
2λΉνΈ μμΈ‘κΈ° λμ μμ¶
루ν 100ν:
μ€μ : T T T ... T T N T T T ... (λ€μ 루ν)
μν: ST ST ST ... ST WT ST ST ST ...
μμΈ‘: T T T ... T T T T T ...
μ λ΅: β β β ... β β β β β ...
1λ²λ§ νλ¦Ό! 루νλΉ 1λ² μ€ν¨
99% μ΄μ μ νλ
3.3 λΆκΈ° νμ€ν 리 ν μ΄λΈ (BHT)¶
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Branch History Table (BHT) β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β PC[9:2] ββββΆ βββββββββββ β
β β Index β β
β β 256 β β
β β entries β β
β ββββββ¬βββββ β
β β β
β βΌ β
β 2-bit counter β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
PCμ μΌλΆ λΉνΈλ₯Ό μΈλ±μ€λ‘ μ¬μ©
- κ° μνΈλ¦¬μ 2λΉνΈ μΉ΄μ΄ν° μ μ₯
- κ°μ μΈλ±μ€μ μ¬λ¬ λΆκΈ°κ° λ§€νλ μ μμ (aliasing)
3.4 μκ΄ μμΈ‘κΈ° (Correlating Predictor)¶
μμ΄λμ΄: λ€λ₯Έ λΆκΈ°μ κ²°κ³Όκ° νμ¬ λΆκΈ°μ μν₯
μμ μ½λ:
if (a == 2) // B1
a = 0;
if (b == 2) // B2
b = 0;
if (a != b) // B3: B1, B2 κ²°κ³Όμ μκ΄κ΄κ³!
...
(m, n) μμΈ‘κΈ°:
- m: μ΅κ·Ό mκ° λΆκΈ°μ κ²°κ³Όλ₯Ό κΈ°λ‘ (Global History)
- n: nλΉνΈ μΉ΄μ΄ν°
ββββββββββββββββββββββββββββββββββββββββββββ
β (2, 2) Correlating Predictor β
β β
β Global History: 2λΉνΈ (00, 01, 10, 11) β
β κ° νμ€ν 리λΉ: 2λΉνΈ μΉ΄μ΄ν° β
β β
β μ΄ 4κ°μ 2λΉνΈ μΉ΄μ΄ν° β
ββββββββββββββββββββββββββββββββββββββββββββ
3.5 ν λλ¨ΌνΈ μμΈ‘κΈ°¶
ββββββββββββββββββββββββββββββββββββββββββββββββββ
β Tournament Predictor β
β β
β βββββββββββββββ β
β PC ββββΆβ Selector β (2λΉνΈ μΉ΄μ΄ν°) β
β ββββββββ¬βββββββ β
β β β
β ββββββββ΄βββββββ β
β βΌ βΌ β
β ββββββββββββββ ββββββββββββββ β
β β Local β β Global β β
β β Predictor β β Predictor β β
β ββββββββ¬ββββββ βββββββ¬βββββββ β
β β β β
β ββββββββ¬βββββββ β
β βΌ β
β MUX (μ ν) β
β β β
β βΌ β
β μμΈ‘ κ²°κ³Ό β
ββββββββββββββββββββββββββββββββββββββββββββββββββ
- Local: κ°λ³ λΆκΈ°μ νμ€ν 리 μ¬μ©
- Global: μ 체 λΆκΈ° νμ€ν 리 μ¬μ©
- Selector: μ΄λ μμΈ‘κΈ°κ° λ μ ννμ§ νμ΅
4. λΆκΈ° νκ² λ²νΌ¶
BTB (Branch Target Buffer)¶
λΆκΈ° λͺ
λ Ήμ΄μΈμ§ + νκ² μ£Όμλ₯Ό 미리 μ μ₯
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Branch Target Buffer β
βββββββββββββ¬βββββββββββ¬ββββββββββββββββββββββββββ€
β Tag β Target β Prediction (optional) β
βββββββββββββΌβββββββββββΌββββββββββββββββββββββββββ€
β 0x1000... β 0x2000 β ST β
β 0x1100... β 0x1500 β WT β
β 0x2000... β 0x1800 β SNT β
β ... β ... β ... β
βββββββββββββ΄βββββββββββ΄ββββββββββββββββββββββββββ
IF λ¨κ³μμ BTB μ‘°ν:
- Hit + Taken μμΈ‘: νκ² μ£Όμλ‘ μ¦μ μ ν
- Miss: μΌλ° μ€ν, λμ€μ BTB μ
λ°μ΄νΈ
BTB λμ ν릶
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β IF λ¨κ³ β
β β
β PC ββββΆ BTB μ‘°ν β
β β β
β βΌ β
β ββββββββββ β
β β Hit? β β
β ββββββ¬ββββ β
β β β
β No β Yes β
β βΌ β βΌ β
β PC + 4 β Taken μμΈ‘? β
β β β β
β β Yes β No β
β β βΌ β βΌ β
β β Target PC + 4 β
β β μ£Όμ β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
5. ν¬κΈ°μ μ€ν¶
κ°λ ¶
λΆκΈ° κ²°κ³Ό νμ μ μ μμΈ‘λ κ²½λ‘μ λͺ
λ Ήμ΄ μ€ν
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Speculative Execution β
β β
β beq μμΈ‘: Taken β
β β β
β βΌ β
β νκ² λͺ
λ Ήμ΄λ€μ 미리 μ€ν (ν¬κΈ°μ ) β
β β β
β βΌ β
β λΆκΈ° κ²°κ³Ό νμ β
β β β
β ββββ΄βββ β
β β β β
β μμΈ‘ μμΈ‘ β
β μ±κ³΅ μ€ν¨ β
β β β β
β βΌ βΌ β
β κ²°κ³Ό κ²°κ³Ό νκΈ° β
β μ»€λ° (flush) β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
μμΈ‘ μ€ν¨ 볡ꡬ¶
μμΈ‘ μ€ν¨ μ:
1. νμ΄νλΌμΈ νλ¬μ (ν¬κΈ°μ λͺ
λ Ήμ΄ μ κ±°)
2. λ μ§μ€ν° μν 볡ꡬ
3. μ¬λ°λ₯Έ κ²½λ‘λ‘ μ¬μ€ν
볡ꡬ λΉμ©:
- νμ΄νλΌμΈ κΉμ΄μ λΉλ‘
- νλ νλ‘μΈμ: 10-20 μ¬μ΄ν΄ νλν°
Misprediction Rateμ μν₯¶
CPI = CPI_base + (λΆκΈ° λΉμ¨) Γ (μμΈ‘ μ€ν¨μ¨) Γ (νλν°)
μμ:
- CPI_base = 1
- λΆκΈ° λΉμ¨ = 20%
- νλν° = 15 μ¬μ΄ν΄
ββββββββββββββββββ¬βββββββββββββββββββ
β μμΈ‘ μ€ν¨μ¨ β CPI β
ββββββββββββββββββΌβββββββββββββββββββ€
β 10% β 1 + 0.2Γ0.1Γ15 β
β β = 1.30 β
ββββββββββββββββββΌβββββββββββββββββββ€
β 5% β 1 + 0.2Γ0.05Γ15 β
β β = 1.15 β
ββββββββββββββββββΌβββββββββββββββββββ€
β 2% β 1 + 0.2Γ0.02Γ15 β
β β = 1.06 β
ββββββββββββββββββΌβββββββββββββββββββ€
β 1% β 1 + 0.2Γ0.01Γ15 β
β β = 1.03 β
ββββββββββββββββββ΄βββββββββββββββββββ
6. μ°μ΅ λ¬Έμ ¶
κΈ°μ΄ λ¬Έμ ¶
-
μ μ λΆκΈ° μμΈ‘ 3κ°μ§ λ°©μμ?
-
2λΉνΈ μμΈ‘κΈ°μ 4κ°μ§ μνλ?
-
λ€μ μνμ€μμ 1λΉνΈ μμΈ‘κΈ°(μ΄κΈ° T)μ μμΈ‘ κ²°κ³Ό:
T T N T T N T T
λΆμ λ¬Έμ ¶
- μλ 루νμμ 2λΉνΈ μμΈ‘κΈ°(μ΄κΈ° ST)μ λμ:
for (int i = 0; i < 4; i++) {
// 루ν λ³Έλ¬Έ
}
- λΆκΈ° λΉμ¨ 25%, νλν° 10 μ¬μ΄ν΄, μμΈ‘ μ νλ 95%μΌ λ CPIλ?
μ¬ν λ¬Έμ ¶
-
ν λλ¨ΌνΈ μμΈ‘κΈ°κ° λ¨μΌ μμΈ‘κΈ°λ³΄λ€ μ’μ μ΄μ λ₯Ό μ€λͺ νμμ€.
-
BTBκ° μμ λμ μμ λμ λΆκΈ° μ²λ¦¬ μ°¨μ΄λ₯Ό λΉκ΅νμμ€.
μ λ΅
1. Always Not Taken, Always Taken, BTFN (Backward Taken, Forward Not Taken) 2. Strongly Not Taken (00), Weakly Not Taken (01), Weakly Taken (10), Strongly Taken (11) 3.μ€μ : T T N T T N T T
μμΈ‘: T T T N T T N T
μν: T T N T T N T T
μ λ΅: β β β β β β β β (4/8 = 50%)
λ°λ³΅: T T T N (4ν λ°λ³΅)
μν: ST ST ST WT WT
μμΈ‘: T T T T T
μ λ΅: β β β β
λ€μ λ¨κ³¶
- 13_Superscalar_Out_of_Order.md - ILPμ λΉμμ°¨ μ€ν
μ°Έκ³ μλ£¶
- Computer Architecture: A Quantitative Approach, Chapter 3 (Hennessy & Patterson)
- Branch Prediction Competition
- Agner Fog's Microarchitecture Guide