CSAPP 5.7 Understanding Modern Processors

πŸ“ 상세 정리

  • μ§€κΈˆκΉŒμ§€λŠ” λŒ€μƒ λ¨Έμ‹ μ˜ κΈ°λŠ₯듀을 ν™œμš©ν•˜μ§€ μ•Šκ³ , ν”„λ‘œμ‹œμ Έμ˜ μ˜€λ²„ν—€λ“œ 쀄이기, μ΅œμ ν™” λ°©ν•΄μš”μ†Œ μ—†μ• κΈ° 등에 μ΄ˆμ μ„ λ‘μ—ˆλ‹€.
  • μ„±λŠ₯을 λ”μš± κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„Έμ„œμ˜ λͺ…λ Ήμ–΄ λ‹¨μ—μ„œμ˜ 기반 μ„€κ³„κΉŒμ§€ ν™œμš©ν•΄μ„œ μ΅œμ ν™”ν•΄λ³΄μž.
  • ν˜„λŒ€ ν”„λ‘œμ„Έμ„œλŠ” ν”„λ‘œκ·Έλž¨ μ„±λŠ₯을 κ·ΉλŒ€ν™” ν•˜κΈ° μœ„ν•΄ λ³΅μž‘ν•œ ν•˜λ“œμ›¨μ–΄λ₯Ό μ΄μš©ν•˜λŠ”λ°, μ΄λ•Œλ¬Έμ— 생각보닀 μ‹€μ œ μž‘λ™ 방식이 κΈ°κ³„μ–΄λž‘μ€ 쑰금 λ‹€λ₯Ό 수 μžˆλ‹€.
    • μ½”λ“œ μˆ˜μ€€μ—μ„œλŠ” λͺ…λ Ήμ–΄κ°€ ν•˜λ‚˜μ”© 순차적으둜 μˆ˜ν–‰ν•˜λŠ”κ±Έλ‘œ λ³΄μ΄μ§€λ§Œ
    • μ‹€μ œλ‘œλŠ” μ—¬λŸ¬ λͺ…λ Ήμ–΄κ°€ λ™μ‹œμ— ν‰κ°€λ˜κ³  μžˆμœΌλ‹ˆκΉŒ!
    • μ•žμ—μ„œ νŒŒμ΄ν”„λΌμ΄λ‹ ν•΄λ΄€μœΌλ‹ˆ 잘 μ•Œμ§€
  • ν˜„μž¬ ν”„λ‘œκ·Έλž¨μ˜ μ΅œλŒ€ μ„±λŠ₯을 νŠΉμ§•μ§“λŠ” 두가지 ν•˜ν•œμ„ μ΄ μžˆλŠ”λ°
    • μ§€μ—°μ‹œκ°„ ν•œκ³„
      • ν•œ μ—°μ‚°μ˜ κ²°κ³Όκ°€ λ‹€μŒ 연산이 μ‹œμž‘λ˜κΈ° 전에 ν•„μš”ν•  λ•Œ.
      • 연산이 μˆœμ„œλŒ€λ‘œ λ°œμƒν•΄μ•Ό ν•˜λŠ” 경우
    • μ²˜λ¦¬λŸ‰ ν•œκ³„
      • ν”„λ‘œμ„ΈμŠ€μ˜ κΈ°λŠ₯ μœ λ‹›μ΄ κ°€μ§„ μ›μ‹œμ μΈ μ»΄ν“¨νŒ… λŠ₯λ ₯

5.7.1 Overall Operation

  • ν˜„λŒ€ 마이크둜 ν”„λ‘œμ„Έμ„œλ₯Ό λ‹¨μˆœν™”ν•΄μ„œ ν™•μΈν•΄λ³΄μž.
    • μ΄λŠ” 졜근 Intel ν”„λ‘œμ„Έμ„œ ꡬ쑰λ₯Ό λ”°λ₯΄κ³  있고, 이λ₯Ό 슈퍼슀칼라라고 λΆ€λ₯Έλ‹€.
      • λ§€ ν΄λ‘μ‚¬μ΄ν΄λ§ˆλ‹€ μ—¬λŸ¬ 연산을 μˆ˜ν–‰ν•  수 있으며 λΉ„μˆœμ°¨μ μœΌλ‘œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ‹€λŠ” λœ»μ΄λ‹€.
    • 전체 μ„€κ³„λŠ” fetch와 기본적인 연산을 μƒμ„±ν•˜λŠ” ICU와 μƒμ„±λœ 연산을 μ‹€μ œλ‘œ μ‹€ν–‰ν•˜λŠ” EU λ‘κ°œλ‘œ λ‚˜λˆ„μ–΄μ§„λ‹€.
  • ICUλŠ” κ°€μž₯ μ΅œκ·Όμ— μ ‘κ·Όν•œ λͺ…λ Ήμ–΄λ₯Ό λ‹΄κ³ μžˆλŠ” 특수 λ©”λͺ¨λ¦¬μΈ λͺ…λ Ήμ–΄ μΊμ‹œμ—μ„œ λͺ…λ Ήμ–΄λ₯Ό μ½μ–΄μ˜¨λ‹€.
    • ICUλŠ” ν˜„μž¬ 싀행쀑인 λͺ…령보닀 훨씬 μ•žμ„œ λͺ…λ Ήμ–΄λ₯Ό κ°€μ Έμ˜¨λ‹€.
      • λ””μ½”λ”©ν•˜κ³  EU둜 λ„˜κΈΈ μ‹œκ°„μ„λ²ŒκΈ° μœ„ν•΄
    • 그런데 ν”„λ‘œκ·Έλž¨μ΄ 뢄기에 λ„λ‹¬ν•œλ‹€λ©΄?
      • λΆ„κΈ°κ°€μ‹€ν–‰λ˜λ©΄ -> μ œμ–΄κΆŒμ΄ λΆ„κΈ° λŒ€μƒμœΌλ‘œ λ„˜μ–΄κ°„λ‹€.
      • μ‹€ν–‰ μ•ˆλ˜λ©΄ -> 뭐 λͺ…λ Ήμ–΄ κ·ΈλŒ€λ‘œ μ“°λ©΄ λ˜λŠ”κ±°κ³ 
    • ν˜„λŒ€ ν”„λ‘œμ„Έμ„œλŠ” λΆ„κΈ°κ°€ 싀행될지 μ—¬λΆ€λ₯Ό μΆ”μΈ‘ν•˜κ³  λŒ€μƒ μ£Όμ†ŒκΉŒμ§€ μ˜ˆμΈ‘ν•˜λŠ” λΆ„κΈ° μ˜ˆμΈ‘μ΄λΌλŠ” κΈ°μˆ μ„ μ‚¬μš©ν•œλ‹€.
      • λΆ„κΈ°κ°€ 이동할 κ²ƒμœΌλ‘œ μ˜ˆμΈ‘λ˜λŠ” μ§€μ μ—μ„œ Fetch와 DecodeλŠ” λ¬Όλ‘ , λ§žμ•˜λŠ”μ§€ κ²°μ •λ˜κΈ°λ„ 전에 연산도 싀행해버린닀.
        • 잘λͺ» μ˜ˆμΈ‘ν–ˆμœΌλ©΄ μƒνƒœλ₯Ό λΆ„κΈ°μ‹œμ μœΌλ‘œ 되돌리고 λ‹€μ‹œ Fetchν•˜μ—¬ μ‹€ν–‰ν•œλ‹€
      • 이걸 ν•˜λŠ”κ³³μ΄ Fetch Control λΈ”λŸ­
  • EUλŠ” νŠΉμ • 연산에 μ΅œμ ν™”λœ κΈ°μˆ μœ λ‹›λ“€μ΄ λͺ¨μ—¬μ„œ μ‘΄μž¬ν•œλ‹€
    • Intel Core i7 레퍼런슀 λ¨Έμ‹ μœΌλ‘œ 보자면 0. β€œμ •μˆ˜ μ‚°μˆ  μ—°μ‚°, λΆ€λ™μ†Œν‰μ  κ³±μ…ˆ, μ •μˆ˜ 및 λΆ€λ™μ†Œμ  λ‚˜λˆ—μ…ˆ, λΆ„κΈ°
      1. μ •μˆ˜ μ‚°μˆ  μ—°μ‚°, λΆ€λ™μ†Œμ  λ§μ…ˆ, μ •μˆ˜ κ³±μ…ˆ, λΆ€λ™μ†Œμ  κ³±μ…ˆ
      2. λ‘œλ“œ, μ£Όμ†Œ 계산
      3. λ‘œλ“œ, μ£Όμ†Œ 계산
      4. μŠ€ν† μ–΄
      5. μ •μˆ˜ μ‚°μˆ  μ—°μ‚°
      6. μ •μˆ˜ μ‚°μˆ  μ—°μ‚°, λΆ„κΈ°
      7. μ €μž₯ μ£Όμ†Œ 계산
    • μ΄λŸ¬ν•œ λ¦¬μ†ŒμŠ€κ°€ ν”„λ‘œκ·Έλž¨μ΄ 달성할 수 μžˆλŠ” μ΅œλŒ€ μ„±λŠ₯에 μ–΄λ–€ 영ν–₯을 λ―ΈμΉ˜λŠ”μ§€λŠ” λ‚˜μ€‘μ— 보자!
  • ν•œ λͺ…λ Ήμ–΄μ—μ„œ λ‹€λ₯Έ λͺ…λ Ήμ–΄λ‘œ κ²°κ³Όλ₯Ό μ „λ‹¬ν•˜λŠ” 속도λ₯Ό 높이기 μœ„ν•΄ μƒλ‹ΉλΆ€λΆ„μ˜ 정보듀은 μ‹€ν–‰μœ λ‹› μ‚¬μ΄μ—μ„œ 직접 κ΅ν™˜λœλ‹€
    • μš°λ¦¬κ°€ 4μž₯μ—μ„œ ν•œ 데이터 ν¬μ›Œλ”© κΈ°λ²•μ˜ 더 μ •κ΅ν•œ ν˜•νƒœ
      • μžμ„Ένžˆ 보자면, λ ˆμ§€μŠ€ν„° r 을 μ—…λ°μ΄νŠΈν•˜λŠ” λͺ…λ Ήμ–΄κ°€ λ””μ½”λ”©λ˜λ©΄ νƒœκ·Έ tκ°€ λΆ™μ–΄μ„œ (r, t) ν˜•νƒœμ˜ ν•­λͺ©μ΄ ν…Œμ΄λΈ”μ— 좔가됨
      • 이후 r 을 μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄κ°€ λ””μ½”λ”©λ˜λ©΄, μ‹€ν–‰ μœ λ‹›μ— r의 값을 μ½λŠ”κ²Œ μ•„λ‹ˆλΌ t의 값을 κΈ°λ‹€λ¦¬λΌλŠ” ν˜•νƒœλ‘œ μ‹€ν–‰ μœ λ‹›μ— 전달됨
      • μ•ž 연산이 λλ‚˜λ©΄, μ‹€ν–‰ μœ λ‹›μ€ (v, t)의 ν˜•νƒœλ‘œ, t의 κ²°κ³ΌλŠ” vλΌλŠ” 정보λ₯Ό 내보냄
      • 이후 tλ₯Ό κΈ°λ‹€λ¦¬κ³ μžˆλ˜ λ‹€λ₯Έ 연산듀은 이 κ°’ vλ₯Ό λ°›μ•„μ„œ μ‹€ν–‰
    • 이 방식을 register renaming 이라고 ν•œλ‹€!
      • μ‹€μ œ 데이터 μ˜μ‘΄μ„±μ΄ μ—†λŠ”λ°λ„ μˆœμ„œλ₯Ό μ§€μΌœμ•Όν•˜λŠ” 것 처럼 λ³΄μ΄λŠ” 상황을 tagλ₯Ό λΆ€μ—¬ν•΄μ„œ κ°€μ§œ μ˜μ‘΄μ„±μ„ 없앨 수 μžˆλ‹€.
        • out-of-order(λΉ„μˆœμ°¨μ  μ‹€ν–‰)의 핡심
          • λ¬Όλ‘  retirement (λͺ…λ Ήμ–΄ μ΅œμ’… κ²°κ³Ό 반영)은 in-order이어야 함!

β”μ§ˆλ¬Έ 사항

πŸ”— μ°Έκ³  자료