ํฐ์คํ ๋ฆฌ ๋ทฐ
CPU๊ฐ ๋ฐ์๋ฐ๋ ์ฑ์ด ๋๋ฆฐ ์ด์ : ์คํจ·๋ฒ๋ธ๋ก ์ดํดํ๋ Instruction Flow
Horang๐ฏ 2026. 1. 20. 16:33Day 3) CPU ์คํ ๊ธฐ์ด: ํ์ดํ๋ผ์ธ๊ณผ ์คํจ
- ํ์ดํ๋ผ์ธ: ๋ช ๋ น์ด๋ฅผ ๋จ๊ณ๋ก ๋๋ ๊ฒน์ณ ์ฒ๋ฆฌํด ์ฒ๋ฆฌ๋์ ๋์
- ์คํจ/๋ฒ๋ธ: ๋ฐ์ดํฐ ์์กด์ฑ/์์ ๋ถ์กฑ/๋ถ๊ธฐ ๋๋ฌธ์ ํ์ดํ๋ผ์ธ์ด ๋ฉ์ถ๋ ํ์
- IPC/CPI: ์ ํํ ๊ณ์ฐ๋ณด๋ค ์ ๋ฎ์์ง๋์ง ์ดํด
์ ๋ฆฌ ์ง๋ฌธ
- CPU๊ฐ “๋ฐ์๊ฒ” ๋๋๋ฐ๋ ์ค์ ์งํ์ด ๋๋ฆฐ ์ด์ ๋ ๋ฌด์์ธ๊ฐ?
Intro
์ฑ์ ๋ง๋ค๋ค ๋ณด๋ฉด “์ ์ด๋ ๊ฒ ๋๋ฆฌ์ง?”๋ผ๋ ์๊ฐ์ ํผํ๊ธฐ ์ด๋ ต๋ค.
๊ทธ๋ฐ๋ฐ ์ด ํ์์ ๋จ์ํ “CPU๊ฐ ๋๋ฆฌ๋ค”๋ผ๊ณ ๋ง ์ดํดํ๋ฉด, ์ค์ ๋ก ๋ฌด์์ ๋ฐ๊ฟ์ผ ํ๋์ง ํ๋จํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ด ๊ธ์ ๋ชฉํ๋ CPU ์ฑ๋ฅ์ ํด๋ญ์ด๋ ์ฝ์ด ๊ฐ์๊ฐ ์๋๋ผ,
๋ ์ค์ ์ ์ธ ๊ด์ ์ธ ‘๋ช ๋ น์ด๊ฐ CPU ์์์ ์ผ๋ง๋ ๋งํ์ง ์๊ณ ํ๋ฌ๊ฐ๋๋(Instruction flow)’๋ก ์ดํดํ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด ์๋ ์ง๋ฌธ์ ๋ตํ ์ ์๋๋ก ์ ๋ฆฌํ๋ค.
- ํ์ดํ๋ผ์ธ์ ๋ฌด์์ด๊ณ , ์ ์ฒ๋ฆฌ๋์ ์ฌ๋ฆด ์ ์๋๊ฐ?
- ๊ทธ๋ฐ๋ฐ๋ ์ ์คํจ(stall)๊ณผ ๋ฒ๋ธ(bubble)์ด ์๊ธฐ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ IPC/CPI๊ฐ ์ด๋ป๊ฒ ๋๋น ์ง๋๊ฐ?
- ํ๋ CPU์ ์บ์(cache), Out-of-Order(OOO), ์ถ์ธก ์คํ(speculation), ์ํผ์ค์นผ๋ผ(superscalar)๋ ๊ฐ๊ฐ ์ด๋ค ๋ณ๋ชฉ์ ์ค์ด๋ ค ํ๊ณ , ์ ์ฌ์ ํ ํ๊ณ๊ฐ ๋จ๋๊ฐ?
๋ง์ง๋ง์ผ๋ก๋ ์ด ๋ด์ฉ์ ์์ง๋์ด๊ฐ ์ค์ ๋ก ์ ์ฉํ ์ ์๋ ํํ๋ก ๋ด๋ ค์,
Apple์ด ๊ถ์ฅํ๋ “CPU ๋ณ๋ชฉ์ ํผํ๋ ์ค๊ณ ์์น(ํ๋ ์์ํฌ ํ์ฉ, QoS, ๋์ ์ค์ผ์ค๋ง, ์ฑ๋ฅ ํ ์คํธ)”๊ณผ ์ฐ๊ฒฐํด ์ ๋ฆฌํ๋ค.
1) Problem: ํ์ดํ๋ผ์ธ์ ๋น ๋ฅด์ง๋ง, ํ์ค์์๋ ์์ฃผ ๋ฉ์ถ๋ค
CPU๋ ๋ช ๋ น์ด(instruction)๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ณดํต ๋ค์์ฒ๋ผ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋๋ค.
- Fetch(๊ฐ์ ธ์ค๊ธฐ) → Decode(ํด์) → Execute(์คํ) → Write-back(๊ฒฐ๊ณผ ๋ฐ์)
์ฌ๊ธฐ์ ํ์ดํ๋ผ์ธ(pipelining)์ “ํ ๋ช
๋ น์ด๋ฅผ ๋ค ๋๋ด๊ณ ๋ค์ ๋ช
๋ น์ด๋ก ๋์ด๊ฐ๋ ๋ฐฉ์”์ด ์๋๋ผ,
์ฌ๋ฌ ๋ช
๋ น์ด๋ฅผ ์๋ก ๋ค๋ฅธ ๋จ๊ณ์์ ๊ฒน์ณ์ ์งํํด ์ฒ๋ฆฌ๋์ ์ฌ๋ฆฌ๋ ๋ฐฉ์์ด๋ค.
์๋ฅผ ๋ค์ด CPU๋ ํ ๋ช ๋ น์ด๋ฅผ ์คํ(execute)ํ๋ฉด์, ๋ค์ ๋ช ๋ น์ด๋ฅผ ๋์ฝ๋(decode)ํ ์ ์๋ค.
๋ฌธ์ ๋ ํ์ดํ๋ผ์ธ์ด ํญ์ ๋งค๋ํ๊ฒ ํ๋ฅด์ง ์๋๋ค๋ ์ ์ด๋ค.
- Stall(์คํจ): ์ด๋ค ์ด์ ๋ก ํ์ดํ๋ผ์ธ์ด ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฉ์ถ๋ ํ์
- Bubble(๋ฒ๋ธ): ๊ทธ ๋ฉ์ถค ๋์ ์๊ธฐ๋ “์ ํจ ์์ ์ด ์๋ ๋น ์ฌ์ดํด(ํ๋ฐํด)”
๊ทธ๋์ “CPU๊ฐ ๋ฐ์๊ฒ ๋๊ณ ์๋๋ฐ๋” ์ค์ ์งํ์ด ๋๋ฆด ์ ์๋ค.
CPU๊ฐ ๊ณ์ฐ์ ๋ชป ํด์๊ฐ ์๋๋ผ, ๊ธฐ๋ค๋ฆฌ๋๋ผ ์๊ฐ์ด ์๋ ๊ฒ์ด๋ค.
์ด๊ฑธ ์ฑ๋ฅ ์งํ๋ก ๋ฒ์ญํ๋ฉด ๊ฐ๊ฐ์ด ๋ ๋ช ํํด์ง๋ค.
- CPI(Cycles Per Instruction): ๋ช
๋ น์ด 1๊ฐ๋ฅผ ๋๋ด๋ ๋ฐ ๋๋ ํ๊ท ์ฌ์ดํด
→ ๋ฒ๋ธ์ด ๋๋ฉด CPI๋ ์ปค์ง๋ค. - IPC(Instructions Per Cycle): ์ฌ์ดํด 1๋ฒ์ ์๋ฃ๋๋ ๋ช
๋ น์ด ์
→ ๋ฒ๋ธ์ด ๋๋ฉด IPC๋ ๋จ์ด์ง๋ค.
์ฆ, “CPU ์ฌ์ฉ๋ฅ ์ด ๋๋ค”๋ ์ฌ์ค๋ง์ผ๋ก๋ ์ฑ๋ฅ์ ๋ณด์ฅํ์ง ๋ชปํ๋ค.
์ ํจํ ์งํ(์ค์ ์ปค๋ฐ๋๋ ๋ช
๋ น์ด)์ด ์ผ๋ง๋ ๋๋์ง๊ฐ ํต์ฌ์ด๋ค.

2) ์์ธ: ์คํจ์ ๋ง๋๋ 3๋ ๋ณ๋ชฉ(๋ฐ์ดํฐ / ๋ถ๊ธฐ / ์์)
ํ์ดํ๋ผ์ธ์ด ๋ฉ์ถ๋ ์์ธ์ ํฌ๊ฒ ์ธ ๊ฐ์ง๋ก ๋ฌถ์ด๋ค.
(1) ๋ฐ์ดํฐ ๋ณ๋ชฉ: Load(๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ) ์ง์ฐ (Data Hazard)
CPU ์ฐ์ฐ์ ๋น ๋ฅด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ(RAM) ์ ๊ทผ์ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
ํ์ํ ๊ฐ์ด ์์ง ๋์ฐฉํ์ง ์์๋๋ฐ ๊ทธ ๊ฐ์ผ๋ก ์ฐ์ฐ์ ํด์ผ ํ๋ฉด, ํ์ดํ๋ผ์ธ์ ๋ฉ์ถ ์๋ฐ์ ์๋ค.
- ํนํ Load → ๋ฐ๋ก ์ฌ์ฉ(load-use) ํจํด์ ์คํจ์ ๋ง๋ค๊ธฐ ์ฌ์ด ๋ํ ์ผ์ด์ค์ด๋ค.
- ์บ์ ๋ฏธ์ค๊ฐ ๋์ DRAM๊น์ง ๊ฐ๋ค ์ค๋ฉด ์ง์ฐ์ด ํฌ๊ฒ ํ๊ณ , ๊ทธ๋งํผ ๋ฒ๋ธ์ด ์ปค์ง๋ค.
(2) ๋ถ๊ธฐ ๋ณ๋ชฉ: if ๊ฐ์ ์กฐ๊ฑด ๋ถ๊ธฐ (Control Hazard)
๋ถ๊ธฐ(if)๊ฐ ๋์ค๋ฉด “๋ค์์ ์ด๋ ์ชฝ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ง(๋ค์ PC)”๊ฐ ํ์ ๋ ๋๊น์ง ํ๋ฆ์ด ํ๋ค๋ฆฐ๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉ์๊ฐ ๋๋ผ๊ธฐ ์ฌ์ด ํฌ์ธํธ๊ฐ ํ๋ ์๋ค.
- ๋ถ๊ธฐ ์กฐ๊ฑด์ ํ๋จํ ๋ฐ์ดํฐ๊ฐ ์์ง ์์ด์ ๊ธฐ๋ค๋ฆฐ๋ค → ๋ณธ์ง์ ์ผ๋ก “๋ฐ์ดํฐ ๋๊ธฐ” ์ฑ๊ฒฉ์ด ๊ฐํจ.
- ์กฐ๊ฑด์ ์๊ฒ ๋๋ฐ, ์ด๋ ์ชฝ์ผ๋ก ๊ฐ์ง ์์ธกํ๋ค๊ฐ ํ๋ฆฐ๋ค → ์ด๊ฒ ์ปจํธ๋กค ํด์ ๋์ ๊ณ ์ ์์ค(ํ๋ฌ์๋ก ์ธํด ์ด๋ฏธ ํ ์ผ์ ๋ฒ๋ฆผ).
(3) ์์ ๋ณ๋ชฉ: ์ ๋/ํฌํธ/ํญ ํ๊ณ (Structure Hazard)
๋์์ ์ฒ๋ฆฌํ๊ณ ์ถ์ด๋ ์คํ ์ ๋์ด๋ ํฌํธ๊ฐ ๋ถ์กฑํ๋ฉด ์ค์ ์์ผ ํ๋ค.
์ด๊ฑด “๊ตฌ์กฐ์ ์์ ๊ฒฝํฉ”์ผ๋ก ์๊ธฐ๋ ๋ณ๋ชฉ์ด๋ค.

3) CPU์ ๋์: ๊ทธ๋์ ํ๋ CPU๋ “ํ๋ฆ์ ์ด๋ฆฌ๋ ์ฅ์น”๋ฅผ ์์์๋ค
ํ๋ CPU๋ ์ด ๋ณ๋ชฉ์ ์์ ๊ธฐ๋ณด๋ค๋ ๋ณ๋ชฉ์ด ์๊ฒผ์ ๋ ์์ค์ ์ค์ด๊ธฐ ์ํ ์ฅ์น๋ฅผ ๊ฒน๊ฒน์ด ์์์๋ค.
Apple๋ ํ๋ ํ๋ก์ธ์๊ฐ ๋ช ๋ น์ด ํ๋ฆ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ค์ ๊ฐ์ ์ฅ์น๋ค์ ๊ฐ์ถ๋ค๊ณ ์ค๋ช ํ๋ค.
- Pipelining
- Out-of-order execution
- Speculative execution
- Superscalar architecture
- Memory caches
์ด์ ์ด๊ฑธ “๊ฐ ๋ฐ์ ์ด ๋ฌด์์ ํด๊ฒฐํ๋ ค๊ณ ํ๋๊ฐ?”๋ก ๋งคํํด๋ณด๋ฉด ์ดํด๊ฐ ์ ๋ฆฌ๋๋ค.
Article: Addressing CPU bottlenecks
4) ๊ฐ ๋ฐ์ ์ “๋ฌด์จ ๋ณ๋ชฉ”์ ํด๊ฒฐํ๋ ค๊ณ ํ๋?
(1) Cache = “๋ฉ๋ชจ๋ฆฌ ์ง์ฐ์ ์ค์ฌ ๋ฐ์ดํฐ ์คํจ์ ์ค์ด๊ธฐ”
ํ๊น: Load ์ง์ฐ์ผ๋ก ์๊ธฐ๋ ๋ฐ์ดํฐ ์คํจ
์บ์(cache)๋ CPU ๊ฐ๊น์ด ๊ณณ์ ๋ช
๋ น์ด/๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํด ๋๊ณ ๋ฐ๋ณต ์ ๊ทผ์ ๋น ๋ฅด๊ฒ ํ๋ค.
ํต์ฌ์ “ํด์ ๋๋ฅผ ์ ๊ฑฐ”๊ฐ ์๋๋ผ, ๋ฐ์ดํฐ๊ฐ ๋ ๋นจ๋ฆฌ ๋์ฐฉํ๊ฒ ๋ง๋ค์ด ์คํจ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด๋ค.
- ํํธ(hit)๋ฉด ๋น ๋ฅด๊ณ
- ๋ฏธ์ค(miss)๋ฉด ๋๋ฆฌ๋ค(๊ทธ๋ฆฌ๊ณ ์ด ์ฐจ์ด๊ฐ ์คํจ์ ๋ง๋ ๋ค)
(2) Out-of-Order(OoO) = “๋ฐ์ดํฐ ๊ธฐ๋ค๋ฆผ ์คํจ์ ์จ๊ธฐ๊ธฐ”
ํ๊น: ๋ฐ์ดํฐ(ํนํ Load) ๋๊ธฐ๋ก ์๊ธฐ๋ ์คํจ
OoO๋ ์คํจ์ “์์ ๋” ๊ธฐ์ ์ด ์๋๋ค.
์ ๋ช
๋ น์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ์ฌ ๋๊น์ง ๋ฉ์ถฐ ์์ผ๋ฉด, ๊ทธ ์ฌ์ด์ ์์กด์ฑ ์๋(๋
๋ฆฝ์ ์ธ) ๋ค ๋ช
๋ น์ด๋ฅผ ๋จผ์ ์คํํด์ CPU๊ฐ ๋์ง ์๊ฒ ๋ง๋ ๋ค.
์ฆ, OoO๋ ์คํจ์ ์ ๊ฑฐํ๊ธฐ๋ณด๋ค ์คํจ ์๊ฐ์ ๊ฐ๋ ค๋ฒ๋ฆฌ๋(hide) ์ ๊ทผ์ด๋ค.
(3) Speculative execution(์ถ์ธก ์คํ) = “๋ถ๊ธฐ(์ปจํธ๋กค) ์คํจ/๋ฒ๋ธ์ ์ค์ด๊ธฐ”
ํ๊น: ๋ถ๊ธฐ(if)๋ก ์๊ธฐ๋ ์ปจํธ๋กค ํด์ ๋
๋ถ๊ธฐ์์๋ ๋ค์ PC(Program Counter)๊ฐ ํ์ ๋ ๋๊น์ง ํ์ดํ๋ผ์ธ์ด ํ๋ค๋ฆฐ๋ค.
๊ทธ๋์ CPU๋ ์์ธก์ ํ๊ณ , ๊ทธ ๊ฒฝ๋ก์ ๋ช
๋ น์ด๋ฅผ ๋ฏธ๋ฆฌ ์คํํด ๋๋ค.
์ฌ๊ธฐ์ ํฌ์ธํธ๋ ์ด๊ฒ์ด๋ค.
- ์ถ์ธก ์คํ์ “ํ ์ผ์ด ์์ด์”๊ฐ ์๋๋ผ
- ์๋๋ผ๋ฉด ๋ถ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ผ ๋ฉ์ถ ์ํฉ์ ํผํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ๊ฐ๋ ๊ฒ
๋๊ฐ(์คํจ ๋น์ฉ)
์์ธก์ด ํ๋ฆฌ๋ฉด ๋ฏธ๋ฆฌ ์คํํ ๊ฑธ ๋ฒ๋ฆฌ๊ณ (ํ๋ฌ์) ๋ค์ ํด์ผ ํ๋ค.
๊ทธ๋์ ๋ถ๊ธฐ ์์ธก ์คํจ๊ฐ ์ฆ์ผ๋ฉด IPC(Instructions Per Cycle)๊ฐ ํฌ๊ฒ ๋จ์ด์ง ์ ์๋ค.
(4) Superscalar = “ํ ์ฌ์ดํด ์ฒ๋ฆฌ ํญ(width)์ ํค์ ์ฒ๋ฆฌ๋/๊ฒฝํฉ์ ์ํ”
ํ๊น: ์ฒ๋ฆฌ๋ ํ๊ณ + ์ผ๋ถ ๊ตฌ์กฐ์ ๊ฒฝํฉ
์ํผ์ค์นผ๋ผ๋ CPU ๋ด๋ถ์ ๋ณ๋ ฌ ๊ตฌ์ฑ์์๋ฅผ ๋ฌ์ ํ ์ฌ์ดํด์ ์ฌ๋ฌ ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌํ ๊ธฐํ๋ฅผ ๋๋ฆฐ๋ค.
(์: ์ฌ๋ฌ ๋ช
๋ น์ด๋ฅผ ๋์์ fetch ํ๊ฑฐ๋, ์ฌ๋ฌ ์คํ ์ ๋์ ๋ฌ์ ๋ณ๋ ฌ ์คํ)
์ฌ๊ธฐ์ ํํ์ ์ ํํ ํ๋ฉด:
- ๊ตฌ์กฐ ํด์ ๋๋ฅผ “์์ค๋ค”๊ฐ ์๋๋ผ
- ์์ ๊ฒฝํฉ์ ์ํํ๊ณ ์ฒ๋ฆฌ๋ ํ๊ณ๋ฅผ ๋์ด๋ ๊ธฐํ๋ฅผ ์ ๊ณตํ๋ค.
๋จ, ๋ฐ์ดํฐ ์์กด์ฑ์ด ๊ฐํ๊ฑฐ๋ ํน์ ์ ๋/ํฌํธ/๋ฉ๋ชจ๋ฆฌ ๊ฒฝ๋ก๊ฐ ๋ณ๋ชฉ์ด๋ฉด, ํญ์ด ๋์ด๋ ์ค์ ํ์ฉ์ ์ ํ๋๋ค.

(+) CPU ๋ด๋ถ ๊ตฌ์กฐ(Deep Dive): register / queue / ROB๋ ์ ํ์ํ ๊น?
์์ ์ฅ์น๋ค(OoO/์ถ์ธก ์คํ/์ํผ์ค์นผ๋ผ)์ ๊ณตํต์ ์ผ๋ก “๋์์ ์ฌ๋ฌ ๋ช
๋ น์ด๋ฅผ ์งํ”์ํค๋ ค ํ๋ค.
๊ทธ๋ฌ๋ ค๋ฉด CPU๋ ์งํ ์ค์ธ ๋ช
๋ น์ด์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ณด๊ดํ๊ณ ์ ๋ฆฌํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ค์ ๊ตฌ์กฐ๋ค์ด ๋ฑ์ฅํ๋ค.
(1) Register(๋ ์ง์คํฐ): “CPU ์์ ์ด๊ณ ์ ๋ฉ๋ชจ์ฅ”
๋ ์ง์คํฐ๋ ์ฐ์ฐ ์ ๋ ฅ/์ถ๋ ฅ, ์ฃผ์ ๊ณ์ฐ, ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ ์ด๊ณ ์ ์ ์ฅ์์ด๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์๋ฏธ๋ ์ด๊ฒ์ด๋ค.
- ์ํคํ ์ฒ ๋ ์ง์คํฐ: ISA(Instruction Set Architecture)๊ฐ “์๋ค๊ณ ์ฝ์ํ” ๋ ์ง์คํฐ(์ปดํ์ผ๋ฌ/์ฝ๋๊ฐ ๊ธฐ์ค์ผ๋ก ์ผ๋ ์งํฉ)
- ๋ฌผ๋ฆฌ ๋ ์ง์คํฐ: CPU ๊ตฌํ์ด ์ค์ ๋ก ๊ฐ์ง ๋ ๋ง์ ๋ ์ง์คํฐ(๋์์ ์ฌ๋ฌ ๋ช ๋ น์ ์งํํ๋ ค๋ฉด ์ ์ฅ ๊ณต๊ฐ์ด ๋ ํ์)
์ฆ, ์ฝ๋๊ฐ ๋ณด๋ ๋ ์ง์คํฐ ์๋ณด๋ค CPU ๋ด๋ถ๋ ๋ ๋ง์ ์ ์ฅ ๊ณต๊ฐ์ ๋๊ณ “๋์ ์งํ”์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
(2) Queue(ํ): “๋จ๊ณ ์ฌ์ด ์์ถฉ์ง๋(์ค)”
ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ ์๋๊ฐ ํญ์ ๊ฐ์ง ์๋ค. ํนํ ๋ฉ๋ชจ๋ฆฌ ์ชฝ์ ๋ณ๋์ด ํฌ๋ค.
๊ทธ๋์ CPU๋ ๋จ๊ณ ์ฌ์ด์ “์ค(ํ)”์ ๋๊ณ ์์ถฉํ๋ค.
- ๋์ฝ๋ ๋๊ธฐ์ด
- ์คํ ๋๊ธฐ์ด
- ๋ก๋/์คํ ์ด ๋๊ธฐ ๊ตฌ์กฐ ๋ฑ
ํ๊ฐ ๊ธธ์ด์ง๋ค๋ ๊ฑด ๊ทธ ์ง์ ์ด ๋ณ๋ชฉ์ด๋ผ๋ ์ ํธ๊ฐ ๋ ์๋ ์๋ค.
(3) ROB(Reorder Buffer): “OoO/์ถ์ธก ์คํ์ ์ ๋ฆฌ ๋ด๋น”
OoO์ ์ถ์ธก ์คํ์ ํ๋ฉด ์คํ ์์๋ ๋ค์ฃฝ๋ฐ์ฃฝ์ด ๋ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ก๊ทธ๋จ์ ๊ฒ๋ณด๊ธฐ๋ก “์์๋๋ก ์คํ๋ ๊ฒ์ฒ๋ผ” ์ผ๊ด๋ ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ์์ ํ๋ค.
ROB์ ํต์ฌ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์๋ฃ(์ปค๋ฐ/retire)๋ฅผ ํ๋ก๊ทธ๋จ ์์๋๋ก ์ ๋ฆฌ
- ๋ถ๊ธฐ ์์ธก ์คํจ ์, ์๋ชป๋ ๊ฒฝ๋ก์์ ๋ง๋ ๊ฒฐ๊ณผ๋ฅผ ํ ๋ฒ์ ํ๊ธฐ(๋กค๋ฐฑ)
- ์์ธ/์ค๋ฅ๊ฐ ๋ฐ์ํด๋ “์ ํํ ์ง์ ์์ ๋ฉ์ถ ๊ฒ์ฒ๋ผ” ๋ณด์ด๊ฒ ์ ๋ฆฌ
6) ๊ทธ๋ฐ๋ฐ ์ ์์ง๋ ๋๋ฆฌ๋? (ํด๊ฒฐ์ฑ ์ด ์์ด๋ ๋ณ๋ชฉ์ด ๋จ๋ ์ด์ )
์ฌ๊ธฐ์ ๊ฒฐ๋ก ์ด ํ ๋จ๊ณ ๋ ์ ๊ตํด์ง๋ค.
ํ๋ CPU๋ ๋ณ๋ชฉ์ ์ค์ด๊ธฐ ์ํ ์ฅ์น๋ฅผ ๊ฐ๊ณ ์์ง๋ง,
๊ทธ ์ฅ์น๋ค์ด ํญ์ ์ฅ์ ๋ง ์๋ ๊ฑด ์๋๋ค. (Trade-Off)
๊ฐ ์ฅ์น์๋ ์ ์ ์กฐ๊ฑด๊ณผ ์คํจ ๋น์ฉ์ด ์์ต๋๋ค.
- Cache: ์ ๊ทผ ํจํด์ด ๋์๋ฉด ์บ์ ๋ฏธ์ค๊ฐ ๋น๋ฒํด์ง๊ณ , RAM ์ง์ฐ์ ์ฌ์ ํ ํฌ๋ค.
- OoO: ๋ ๋ฆฝ ์์ (ILP)์ด ๋ถ์กฑํ๋ฉด ์จ๊ธธ ์คํจ์ด ๊ทธ๋๋ก ๋๋ฌ๋๋ค.
- Speculation: ๋ถ๊ธฐ ์์ธก ์คํจ๊ฐ ์ฆ์ผ๋ฉด ํ๋ฌ์ ๋น์ฉ์ผ๋ก IPC๊ฐ ํฌ๊ฒ ๋จ์ด์ง๋ค.
- Superscalar: ํญ์ ๋๋ ค๋ ์์กด์ฑ/ํน์ ํฌํธ ๋ณ๋ชฉ ๋๋ฌธ์ ์ค์ ํ์ฉ์ด ์ ํ๋๋ค.
๊ทธ๋์ “CPU๊ฐ ๋ฐ์ ํ๋๋ฐ๋ ๋๋ฆฌ๋ค”๋ ๋ง์ ๋ชจ์์ด ์๋๋ค.
CPU๋ ์์ค์ ์ค์ด๊ธฐ ์ํด ์ต์ ์ ๋คํ์ง๋ง, ์
๋ ฅ ํจํด(๋ฉ๋ชจ๋ฆฌ/๋ถ๊ธฐ/์์กด์ฑ)์ด ๋์๋ฉด ๋ฒ๋ธ์ ๋ค์ ์ปค์ง๋ค.
7) ์์ง๋์ด๋ ๋ฌด์์ ํด์ผ ํ๋?
CPU ๋ด๋ถ ๊ตฌํ์ ์ฑ์์ ์ง์ ๋ฐ๊ฟ ์๋ ์๋ค.
ํ์ง๋ง “CPU ๋ณ๋ชฉ์ ํผํ๋๋ก ์ฑ์ ์ค๊ณ”ํ๋ ๊ฒ์ ์์ง๋์ด๊ฐ ํ ์ ์๊ณ , Apple๋ ์ด๋ฅผ ๋ช
ํํ ๊ถ์ฅํ๋ค.
Design your app to avoid CPU bottlenecks
(1) ์์คํ ํ๋ ์์ํฌ๋ฅผ ์ฐ์ ์ฌ์ฉํ๋ผ
์์คํ
ํ๋ ์์ํฌ๋ ๋๋ฐ์ด์ค ์์์ ํจ์จ์ ์ผ๋ก ์ฐ๋๋ก ์ต์ ํ๋ผ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๊ฐ์ ์ผ์ ์ง์ ๊ตฌํํ๊ธฐ๋ณด๋ค ํ๋ ์์ํฌ ๊ฒฝ๋ก๋ฅผ ํ๋ ๊ฒ CPU ๋ณ๋ชฉ์ ์ค์ด๋ ๋น ๋ฅธ ๊ธธ์ด ๋๋ค.
(2) ์ ์ ์ค๋ ๋ ํ๋ณด๋ค ๋์ ํ ๋น์ ์ ํธํ๋ผ
๊ธฐ๊ธฐ๋ ์ฝ์ด ๊ตฌ์ฑ๊ณผ ํ์ฌ ๋ถํ์ ๋ฐ๋ผ ์์
์ฒ๋ฆฌ์จ์ด ๋ฌ๋ผ์ง๋ค.
๊ณ ์ ํ์ ์ด๋ค ์ค๋ ๋๋ ๋๊ณ ์ด๋ค ์ค๋ ๋๋ ๋ฐ๋ฆฌ๋ ์์ ๋นํจ์จ์ ๋ง๋ค ์ ์๋ค.
(3) QoS(Quality-of-Service)๋ฅผ ์ ํํ ํ์ํ๋ผ
๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ค์๋๋ฅผ QoS๋ก ์๋ ค์ฃผ๋ฉด ์์คํ ์ด ํจ์จ์ ์ผ๋ก ์ค์ผ์ค๋งํ ์ ์๋ค.
ํนํ Apple silicon์ฒ๋ผ ์ฑ๋ฅ ์ฝ์ด(P-core, Performance core)์ ํจ์จ ์ฝ์ด(E-core, Efficiency core)๊ฐ ํจ๊ป ์๋ ํ๊ฒฝ์์๋,
QoS๊ฐ ์์ ์ด ์ด๋ ์ฝ์ด์์ ์คํ๋ ์ง์๋ ์ํฅ์ ์ค ์ ์๋ค.
๊ทธ๋์ QoS๋ฅผ ๋น์๋๊ฑฐ๋ ์๋ชป ์ง์ ํ๋ฉด ์ฒด๊ฐ ์ฑ๋ฅ(์๋ต์ฑ)๊ณผ ์ ๋ ฅ ํจ์จ์ด ๋์์ ๋๋น ์ง ์ ์๋ค.
Tuning your code’s performance for Apple silicon
(4) ๊ฐ๋ฅํ๋ฉด BGTasks๋ก ์์คํ ์ด ์ค์ผ์คํ๊ฒ ํ๋ผ
๋ฐฑ๊ทธ๋ผ์ด๋์์ “์ธ์ ๊ฐ ํด๋ ๋๋ ์์ ”์ ์์คํ ์ด ์์ ์ฌ์ ์ ๋ง์ถฐ ์คํํ๋๋ก ๋งก๊ธฐ๋ ์ ๋ต์ด ์ ๋ฆฌํ ์ ์๋ค.
(5) ๋ชฉํ๋ฅผ ์ธ์ฐ๊ณ , ์ฑ๋ฅ ํ ์คํธ๋ก ํ๊ท๋ฅผ ๋ง์๋ผ
Apple์ ์ฑ๋ฅ ๋ชฉํ ์๋ฆฝ๊ณผ ์ฑ๋ฅ ํ ์คํธ ์์ฑ์ ๊ถ์ฅํ๋ฉฐ, CPU ํ๋๊ณผ ๊ฒฝ๊ณผ ์๊ฐ์ ์ธก์ ํ ๋ฉํธ๋ฆญ๋ ์ ๊ณตํ๋ค.
WWDC25: Optimize CPU performance with Instruments
Analyzing CPU usage with the Processor Trace instrument
๋ง๋ฌด๋ฆฌ
์ฌ๊ธฐ๊น์ง CPU๊ฐ ๋ช ๋ น์ด๋ฅผ ์ด๋ป๊ฒ ํ๋ ค๋ณด๋ด๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ๋ฆ์ด ์คํจ/๋ฒ๋ธ ๋๋ฌธ์ ์ด๋ป๊ฒ ๋ฌด๋์ง ์ ์๋์ง๋ฅผ ์ดํด๋ดค๋ค.
์บ์, Out-of-Order, ์ถ์ธก ์คํ, ์ํผ์ค์นผ๋ผ ๊ฐ์ ์ฅ์น๋ค๋ ๊ฒฐ๊ตญ์ ํ ๊ฐ์ง ๋ชฉ์ ์ ํฅํ๋ค.
CPU๊ฐ ๋์ง ์๊ฒ ํ๊ณ , ๋งํ๋ ์๊ฐ์ ์ต๋ํ ์ค์ด๋ ค๋ ๊ฒ.
์ง๊ธ๊น์ง “์ด๋ป๊ฒ ํ๋ฉด CPU๋ฅผ ๋ ์ ์ธ๊น?”๋ฅผ ์ค์ฌ์ผ๋ก ์ ๋ฆฌํ์ง๋ง, ์ฌ๊ธฐ์ ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ด ์๋ค.
Apple์ด ๋งํ๋ฏ ํ๋ CPU๋ ์ด๋ฏธ ๋ช
๋ น์ด ํ๋ฆ์ ๊ทน๋ํํ๊ธฐ ์ํด ๋ง์ ์ต์ ํ๋ฅผ ๋ด๋ถ์์ ์ํํ๋ค.
๊ทธ๋ผ์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ CPU๊ฐ ์ด๋ป๊ฒ ๋์๊ฐ๊ณ ์ด๋์์ ๋ณ๋ชฉ์ด ๋ฐ์ํ ์ ์๋์ง ๋ฏธ๋ฆฌ ์๊ณ ํ์ตํ๋ ๊ฒ์ด๋ค.

๋ค๋ง ์ค์ ์์ ๋ ์์ฃผ, ๋ ํฌ๊ฒ ๋ฐ๋ชฉ์ ์ก๋ ๊ฑด CPU “๋ด๋ถ”๊ฐ ์๋๋ผ ์ฐ๋ฆฌ ์ฝ๋๊ฐ ๋ง๋ ์ค๋ฒํค๋์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ, ์ค๋ณต ์ฐ์ฐ, ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๋ณต์ฌ ๊ฐ์ ๊ฒ๋ค์ CPU๊ฐ ์๋ฌด๋ฆฌ ๋๋ํด๋ ๋์ ํด๊ฒฐํด์ฃผ์ง ๋ชปํ๋ค.
๊ทธ๋์ CPU ๋ณ๋ชฉ์ ๊น๊ฒ ํ๊ณ ๋๋ ๊ฑด, ์ด๋ฐ ๋ญ๋น๋ฅผ ๋จผ์ ์ ๊ฑฐํ ๋ค์ ํด๋ ๋ฆ์ง ์๋ค.
๊ฒฐ๊ตญ ๊ฐ์ฅ ํ์คํ ์ต์ ํ๋ ์ด ํ ์ค๋ก ์ ๋ฆฌ๋๋ค.
“๋ด ์ฝ๋๊ฐ CPU์๊ฒ ์ธ๋ฐ์๋ ์ผ์ ์ํค๊ณ ์์ง ์์์ง”๋ถํฐ ์ ๋ฆฌํ์.

์๋๋ ๋ด๊ฐ ํด๋น ๋ด์ฉ์ ํ์ตํ๊ธฐ ์ํด GPT์ ์ด์ฌํ ์จ๋ฆํ ๋ด์ฉ์ด๋ค.
'๐ค Computer Science > Computer Architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฉ๋ชจ๋ฆฌ๋ ๋จ์ ์๋๋ฐ, ์ ์ฑ์ ๋ฉ์นซํ ๊น (0) | 2026.03.26 |
|---|---|
| ์บ์ ๋ผ์ธ๊ณผ ์ง์ญ์ฑ: CPU๊ฐ ์ข์ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด (0) | 2026.03.18 |
| if๋ ์ฃ๊ฐ ์๋ค: ๋ถ๊ธฐ ์์ธก์ด ์คํจํ ๋ CPU์์ ๋ฒ์ด์ง๋ ์ผ (0) | 2026.01.23 |
| RunLoop: ์ ๋ค๊ณ ๊นจ๋ ๋ฉ์ธ ์ค๋ ๋ (1) | 2026.01.18 |
| ๋ชจ๋ฐ์ผ ๋์: CPU โ Memory โ OS โ UI Frame (1) | 2026.01.17 |
- TLB
- xcode26.3
- speculative
- spatial locality
- BOJ
- ์์ง๋์ด
- Xcode
- cs
- ํ
- tipkit
- Jetsam
- C++
- 24๋ ํ๊ณ
- ์๋ฃ ๊ตฌ์กฐ
- Memory
- 2026๋ ๊ณํ
- temporal locality
- branchless
- page fault
- IOS
- Meet agentic coding in Xcode
- Swift
- ํ๊ณ
- ์คํฐ๋
- cpu
- ๊ฐ๋ฐ์
- 2025๋ ํ๊ณ
- ์คํ
- misprediction
- ๋ชจ๋ฐ์ผ์์ง๋์ด
- Total
- Today
- Yesterday