λΆ„κΈ° 예츑 (Branch Prediction)

λΆ„κΈ° 예츑 (Branch Prediction)

κ°œμš”

λΆ„κΈ° μ˜ˆμΈ‘μ€ 쑰건 λΆ„κΈ° λͺ…λ Ήμ–΄μ˜ κ²°κ³Όλ₯Ό 미리 μ˜ˆμΈ‘ν•˜μ—¬ νŒŒμ΄ν”„λΌμΈ μ„±λŠ₯을 λ†’μ΄λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. ν˜„λŒ€ ν”„λ‘œμ„Έμ„œλŠ” 90% μ΄μƒμ˜ 예츑 정확도λ₯Ό λ‹¬μ„±ν•©λ‹ˆλ‹€.


λͺ©μ°¨

  1. μ œμ–΄ ν•΄μ €λ“œμ™€ λΆ„κΈ° 문제
  2. 정적 λΆ„κΈ° 예츑
  3. 동적 λΆ„κΈ° 예츑
  4. λΆ„κΈ° νƒ€κ²Ÿ 버퍼
  5. 투기적 μ‹€ν–‰
  6. μ—°μŠ΅ 문제

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. μ—°μŠ΅ 문제

기초 문제

  1. 정적 λΆ„κΈ° 예츑 3κ°€μ§€ 방식은?

  2. 2λΉ„νŠΈ 예츑기의 4κ°€μ§€ μƒνƒœλŠ”?

  3. λ‹€μŒ μ‹œν€€μŠ€μ—μ„œ 1λΉ„νŠΈ 예츑기(초기 T)의 예츑 κ²°κ³Ό: T T N T T N T T

뢄석 문제

  1. μ•„λž˜ λ£¨ν”„μ—μ„œ 2λΉ„νŠΈ 예츑기(초기 ST)의 λ™μž‘:
for (int i = 0; i < 4; i++) {
    // 루프 λ³Έλ¬Έ
}
  1. λΆ„κΈ° λΉ„μœ¨ 25%, νŽ˜λ„ν‹° 10 사이클, 예츑 정확도 95%일 λ•Œ CPIλŠ”?

심화 문제

  1. ν† λ„ˆλ¨ΌνŠΈ μ˜ˆμΈ‘κΈ°κ°€ 단일 μ˜ˆμΈ‘κΈ°λ³΄λ‹€ 쒋은 이유λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€.

  2. 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%)
4.
반볡: T T T N (4회 반볡)
μƒνƒœ: ST ST ST WT WT
예츑: T  T  T  T  T
μ •λ‹΅: βœ“  βœ“  βœ“  βœ—
4회 쀑 1회 μ‹€νŒ¨ = 75% 정확도 5. CPI = 1 + 0.25 Γ— 0.05 Γ— 10 = 1.125 6. ν† λ„ˆλ¨ΌνŠΈ μ˜ˆμΈ‘κΈ°λŠ” Localκ³Ό Global 예츑기λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜κ³ , 각 뢄기에 λŒ€ν•΄ 더 μ •ν™•ν•œ 예츑기λ₯Ό μ„ νƒμ μœΌλ‘œ μ‚¬μš©. μ–΄λ–€ λΆ„κΈ°λŠ” 지역적 νŒ¨ν„΄μ΄ μ€‘μš”ν•˜κ³ , μ–΄λ–€ λΆ„κΈ°λŠ” 전역적 상관관계가 μ€‘μš”ν•˜κΈ° λ•Œλ¬Έ. 7. - BTB μ—†μŒ: ID λ˜λŠ” EX λ‹¨κ³„μ—μ„œμ•Ό λΆ„κΈ° 여뢀와 νƒ€κ²Ÿ νŒŒμ•…, νŽ˜λ„ν‹° λ°œμƒ - BTB 있음: IF λ‹¨κ³„μ—μ„œ BTB hit μ‹œ μ¦‰μ‹œ νƒ€κ²ŸμœΌλ‘œ 점프 κ°€λŠ₯, νŽ˜λ„ν‹° μ΅œμ†Œν™”

λ‹€μŒ 단계


참고 자료

to navigate between lessons