Out-of-Order ์คํ (Out-of-Order Execution)
๊ฐ์
Out-of-Order ์คํ(Out-of-Order Execution, OoO)์ ํ๋ก์ธ์ ์ํคํ ์ฒ์์ ๋ช ๋ น์ด๋ฅผ ํ๋ก๊ทธ๋จ ์์์ ๋ค๋ฅธ ์์๋ก ๋์ ์ผ๋ก ์คํํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ์ ์ด๋ค. ์ด ๊ธฐ์ ์ ๋ช ๋ น์ด ์์ค ๋ณ๋ ฌ์ฑ(Instruction-Level Parallelism, ILP)์ ๊ทน๋ํํ์ฌ ํ์ดํ๋ผ์ธ์ ์ ํด ์๊ฐ์ ์ต์ํํ๊ณ , ๋ฐ์ดํฐ ์์กด์ฑ์ด ์๋ ๋ช ๋ น์ด๋ค์ด ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ์คํ๋๋๋ก ํ๋ค. Out-of-Order ์คํ์ ํ๋ ๊ณ ์ฑ๋ฅ ํ๋ก์ธ์์ ํต์ฌ ๊ธฐ์ ๋ก, Intel, AMD, ARM, IBM ๋ฑ์ ํ๋ก์ธ์์ ๊ด๋ฒ์ํ๊ฒ ์ฑํ๋์ด ์๋ค.
In-Order ์คํ์์๋ ๋ช ๋ น์ด๊ฐ ์์๋๋ก ์คํ๋๋ฏ๋ก ์์ ๋ช ๋ น์ด๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ค์ ๋ช ๋ น์ด๊ฐ ๋๊ธฐํด์ผ ํ๋ค. ๋ฐ๋ฉด Out-of-Order ์คํ์ ๋ช ๋ น์ด ๊ฐ ๋ฐ์ดํฐ ์์กด์ฑ์ ๋ถ์ํ์ฌ ์ค๋น๋ ๋ช ๋ น์ด๋ฅผ ๋จผ์ ์คํํ๊ณ , ๋์ค์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ก๊ทธ๋จ ์์๋๋ก ์ฌ๋ฐฐ์นํ์ฌ ์ปค๋ฐํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๋ณด์ฅํ๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ง์ฐ ์๊ฐ์ด๋ ์คํ ์ ๋์ ๊ฐ์ฉ์ฑ์ ๋ฐ๋ฅธ ๋๊ธฐ ์๊ฐ์ ํจ๊ณผ์ ์ผ๋ก ์จ๊ธธ ์ ์๋ค.
ํต์ฌ ๊ฐ๋
๋ฆฌ๋ค์ด๋ฐ (Register Renaming)
๋ฆฌ๋ค์ด๋ฐ์ Out-of-Order ์คํ์ ํต์ฌ ๊ธฐ์ ๋ก, WAW(Write-After-Write)์ WAR(Write-After-Read) ์์กด์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ ํ์ผ(Physical Register File)์ ์ฌ์ฉํ์ฌ ์ํคํ ์ฒ ๋ ์ง์คํฐ(architectural registers)๋ฅผ ๋์ ์ผ๋ก ๋งคํํจ์ผ๋ก์จ ๊ฑฐ์ง ์์กด์ฑ(false dependency)์ ์ ๊ฑฐํ๋ค.
๋์ ์๋ฆฌ:
1. ๋ช
๋ น์ด๊ฐ ๋์ฝ๋ฉ๋ ๋ ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ๊ฐ ํ ๋น๋จ
2. ๋ช
๋ น์ด ๊ฐ ๊ฐ์ ์ํคํ
์ฒ ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋ค๋ฅธ ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ์ ๋งคํ
3. ๋ช
๋ น์ด๊ฐ ์๋ฃ๋ ๋๋ง ์ํคํ
์ฒ ๋ ์ง์คํฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ปค๋ฐ
์์:
; ๋ฆฌ๋ค์ด๋ฐ ์ (WAW hazard)
ADD R1, R2, R3 ; R1 = R2 + R3
SUB R1, R4, R5 ; R1 = R4 - R5 (WAW ์์กด์ฑ)
; ๋ฆฌ๋ค์ด๋ฐ ํ
ADD P1, P2, P3 ; P1 = P2 + P3 (๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ P1 ์ฌ์ฉ)
SUB P4, P5, P6 ; P4 = P5 - P6 (๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ P4 ์ฌ์ฉ)
; ๋์ค์ P1์ ๊ฐ์ด R1๋ก ์ปค๋ฐ๋จ
๋ฆฌ์ค๋ ๋ฒํผ (Reorder Buffer, ROB)
๋ฆฌ์ค๋ ๋ฒํผ๋ ๋ช ๋ น์ด๋ฅผ ์คํ ์์๊ฐ ์๋ ํ๋ก๊ทธ๋จ ์์๋๋ก ์ปค๋ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ FIFO ํ์ด๋ค. Out-of-Order ์คํ์์ ๋ฐ์ํ๋ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค:
- ์ ํํ ์์ธ ์ฒ๋ฆฌ (Precise Exceptions): ์์ธ ๋ฐ์ ์ ์ ํํ ํ์ดํ๋ผ์ธ ์ํ๋ฅผ ๋ณต์
- ๋ถ๊ธฐ ์์ธก ์คํจ ๋ณต๊ตฌ: ์๋ชป๋ ๋ถ๊ธฐ ์์ธก ํ ํ์ดํ๋ผ์ธ์ ์ ํํ ์ํ๋ก ๋ณต์
- ๊ฒฐ๊ณผ ์ปค๋ฐ: ๋ช ๋ น์ด ๊ฒฐ๊ณผ๋ฅผ ์ํคํ ์ฒ ์ํ์ ํ๋ก๊ทธ๋จ ์์๋๋ก ๋ฐ์
ROB ์ํธ๋ฆฌ ๊ตฌ์กฐ:
| ํ๋ | ์ค๋ช
|
|------|------|
| ๋ช
๋ น์ด ์ํ | ์๋ฃ ๋๊ธฐ, ์คํ ์ค, ์๋ฃ, ์ปค๋ฐ |
| ๊ฒฐ๊ณผ ๊ฐ | ์คํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ |
| ๋์ ๋ ์ง์คํฐ | ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋ ์ํคํ
์ฒ ๋ ์ง์คํฐ |
| ์์ธ ํ๋๊ทธ | ์์ธ ๋ฐ์ ์ฌ๋ถ |
| ๋ถ๊ธฐ ์ ๋ณด | ๋ถ๊ธฐ ๋ช
๋ น์ด์ธ์ง ์ฌ๋ถ |
๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ (Reservation Station)
๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ ์ ์คํ ๊ฐ๋ฅํ ๋ช ๋ น์ด๋ฅผ ๋๊ธฐ์ํค๋ ํ์ด๋ค. ๊ฐ ์คํ ์ ๋์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, ๋ช ๋ น์ด์ ํผ์ฐ์ฐ์๊ฐ ์ค๋น๋๋ฉด ์ฆ์ ์คํ์ ์์ํ๋ค.
๋์ ๋ฐฉ์:
1. ๋์คํจ์น๋ ๋ช
๋ น์ด๊ฐ ๋ฆฌ์ ๋ฒ๋ฒ ์ด์
์คํ
์ด์
์ ๋ฐฐ์น๋จ
2. ํผ์ฐ์ฐ์ ๋ฐ์ดํฐ๊ฐ ์ค๋น๋ ๋๊น์ง ๋๊ธฐ
3. ๋ชจ๋ ํผ์ฐ์ฐ์๊ฐ ์ค๋น๋๋ฉด ์คํ ์ ๋์ผ๋ก ๋ช
๋ น์ด๋ฅผ ์ ๋ฌ
4. ๋ค๋ฅธ ๋ช
๋ น์ด๊ฐ ๋จผ์ ์คํ๋๋๋ก ํ์ฉ (Out-of-Order Issue)
๋ก๋/์คํ ์ด ํ (Load/Store Queue)
๋ก๋/์คํ ์ด ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋ช ๋ น์ด๋ฅผ ๊ด๋ฆฌํ๋ ์ ์ฉ ํ์ด๋ค. ํนํ Out-of-Order ์ฝ์ด๋ ๋ ์ง์คํฐ ์์กด์ฑ๋ฟ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์์กด์ฑ๋ ๋์ ์ผ๋ก ์ถ์ ํด์ผ ํ๋ฏ๋ก, ๋ก๋/์คํ ์ด ํ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ ฌ์ฑ๊ณผ ์ ํ์ฑ ์ฌ์ด์ ๊ท ํ์ ์ก๋ ํต์ฌ ๋ธ๋ก์ด ๋๋ค.
๋ก๋ ํ (Load Queue):
- ๋ก๋ ๋ช
๋ น์ด์ ์ฃผ์ ๊ณ์ฐ ๋ฐ ๋ฐ์ดํฐ ๋ก๋ ๊ด๋ฆฌ
- ์์ ์คํ ์ด์ ์ถฉ๋ํ์ง ์๋ ๋ก๋์ ์ ํ ์คํ ํ์ฉ
- Store-Load ์์กด์ฑ ํ์ง
์คํ ์ด ํ (Store Queue):
- ์คํ ์ด ๋ช
๋ น์ด์ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ฐ๊ธฐ ์ ๊น์ง ๋ณด๊ด
- ์คํ ์ด ๋ฒํผ๋ง ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ผ๊ด์ฑ ๊ด๋ฆฌ
- ์คํ ์ด-์คํ ์ด ์์ ๋ณด์ฅ
๋ฉ๋ชจ๋ฆฌ ์์กด์ฑ ์์ธก์ด ๊ณต๊ฒฉ์ ์ผ๋ก ๋์ํ๋ฉด ๋ก๋๊ฐ ์์ง ์ฃผ์๊ฐ ํ์ ๋์ง ์์ ์คํ ์ด๋ณด๋ค ๋จผ์ ์คํ๋ ์ ์๋ค. ์ด๋ ์ค์ ์ฃผ์ ์ถฉ๋์ด ๋ฐ๊ฒฌ๋๋ฉด ํ์ดํ๋ผ์ธ ์ฌ์คํ(replay)์ด๋ ์ค์ฟผ์(squash)๊ฐ ํ์ํ๋ฏ๋ก, ๊ณ ์ฑ๋ฅ ์ฝ์ด๋ ์ฃผ์ ๋น๊ต๊ธฐ์ store-to-load forwarding ๊ฒฝ๋ก๋ฅผ ํจ๊ป ๋๋ค.
๋ฐํ ํญ๊ณผ ์๋์ฐ ํฌ๊ธฐ
Out-of-Order ์ฑ๋ฅ์ ๋จ์ํ ์คํ ์ ๋ ์๋ง์ผ๋ก ๊ฒฐ์ ๋์ง ์๋๋ค. ํ ์ฌ์ดํด์ ๋ช ๊ฐ์ ๋ช ๋ น์ด๋ฅผ rename, dispatch, issue, retire ํ ์ ์๋์ง์, ๋์์ ์ถ์ ๊ฐ๋ฅํ ์ธํ๋ผ์ดํธ(in-flight) ๋ช ๋ น์ด ์๊ฐ ํจ๊ป ์ค์ํ๋ค.
- Rename/Dispatch ํญ: ํ๋ฐํธ์๋๊ฐ ๋ฐฑ์๋์ ๊ณต๊ธํ ์ ์๋ ์ต๋ ๋ช ๋ น์ด ์
- Issue ํญ: ์ค๋น๋ ๋ช ๋ น์ด๋ฅผ ์คํ ์ ๋์ผ๋ก ๋ด๋ณด๋ผ ์ ์๋ ์
- Retire ํญ: ํ๋ก๊ทธ๋จ ์์๋๋ก ์ํ๋ฅผ ํ์ ํ ์ ์๋ ์
- ์๋์ฐ ํฌ๊ธฐ: ROB, issue queue, load/store queue๊ฐ ํฉ์ณ์ ์จ๊ธธ ์ ์๋ ์ง์ฐ ์๊ฐ์ ๋ฒ์
์ฆ, ROB๊ฐ ํฌ๋๋ผ๋ issue ํญ์ด๋ load queue๊ฐ ์ข์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ง์ฐ์ ์ถฉ๋ถํ ์จ๊ธฐ์ง ๋ชปํ๊ณ , ๋ฐ๋๋ก ์คํ ์ ๋์ด ๋ง๋๋ผ๋ rename ๋จ๊ณ๊ฐ ๋ณ๋ชฉ์ด๋ฉด ๋ฐฑ์๋๊ฐ ๋น๊ฒ ๋๋ค.
ํต์ฌ ๊ตฌ์ฑ ์์ ์์ธ
Out-of-Order ์คํ์ ํต์ฌ ๊ตฌ์ฑ ์์์ธ ๋ฆฌ์ค๋ ๋ฒํผ(ROB), ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ , ๋ก๋/์คํ ์ด ํ์ ์์ธ ๊ตฌ์กฐ์ ๋์ ๋ฐฉ์์ ์๊ฐํํ ๋ค์ด์ด๊ทธ๋จ์ ๋๋ค.
์คํ ์ ๋๊ณผ ๋น๊ต (Execution Units and Comparison)
Out-of-Order ํ๋ก์ธ์๋ ์ฌ๋ฌ ์คํ ์ ๋์ ๋์์ ์ด์ํ์ฌ ๋ช ๋ น์ด ์์ค ๋ณ๋ ฌ์ฑ์ ๊ทน๋ํํ๋ค:
| ์คํ ์ ๋ | ์ญํ | ์์ ๋ช ๋ น์ด |
|---|---|---|
| ALU (Arithmetic Logic Unit) | ์ ์ ์ฐ์ฐ | ADD, SUB, AND, OR |
| FPU (Floating Point Unit) | ๋ถ๋์์์ ์ฐ์ฐ | FMUL, FDIV, FADD |
| LSU (Load Store Unit) | ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ | LOAD, STORE |
| Branch Unit | ๋ถ๊ธฐ ์ฒ๋ฆฌ | BEQ, BNE, JMP |
| AGU (Address Generation Unit) | ์ฃผ์ ๊ณ์ฐ | LEA, indexed addressing |
๋น๊ต/๋ถ์
In-Order vs Out-of-Order ์คํ ๋น๊ต
In-Order ์คํ๊ณผ Out-of-Order ์คํ์ ๋ช ๋ น์ด ํ๋ฆ๊ณผ ์ฑ๋ฅ ํน์ฑ์ ๋น๊ตํ ๋ค์ด์ด๊ทธ๋จ์ ๋๋ค.
| ๋น๊ต ํญ๋ชฉ | In-Order ์คํ | Out-of-Order ์คํ |
|---|---|---|
| ์คํ ์์ | ํ๋ก๊ทธ๋จ ์์๋๋ก ์คํ | ๋ฐ์ดํฐ ์ค๋น ์์๋๋ก ์คํ |
| ํ์ดํ๋ผ์ธ ํ์ฉ๋ | ๋ฎ์ (๋๊ธฐ ์๊ฐ ๋ฐ์) | ๋์ (์ ํด ์๊ฐ ์ต์ํ) |
| ๋ณต์ก๋ | ๋ฎ์ | ๋์ |
| ์ ๋ ฅ ์๋ชจ | ๋ฎ์ | ๋์ |
| ๋ค์ด ๋ฉด์ | ์์ | ํผ |
| ๋ช ๋ น์ด ์์ค ๋ณ๋ ฌ์ฑ | ์ ํ์ | ๋์ |
| ์์ธ ์ฒ๋ฆฌ | ๋จ์ | ๋ณต์ก (Precise Exceptions ํ์) |
| ํ๋์จ์ด ์์ | ์ ์ | ๋ง์ |
ํ๋ ํ๋ก์ธ์์ Out-of-Order ๊ตฌํ ๋น๊ต
| ํ๋ก์ธ์ | ROB ํฌ๊ธฐ | ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ | ๋ก๋/์คํ ์ด ํ | ๋ฆฌ๋ค์ด๋ฐ ๋ฐฉ๋ฒ |
|---|---|---|---|---|
| Intel Raptor Cove (13th Gen) | 512 ์ํธ๋ฆฌ | ํตํฉ ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ | 128 ๋ก๋ / 72 ์คํ ์ด | ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ ํ์ผ |
| AMD Zen 4 | 320 ์ํธ๋ฆฌ | ๋ถ์ฐ๋ ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ | 88 ๋ก๋ / 64 ์คํ ์ด | ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ ํ์ผ |
| Apple M2 (Avalanche) | 630 ์ํธ๋ฆฌ | ํตํฉ ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ | 128 ๋ก๋ / 72 ์คํ ์ด | ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ ํ์ผ |
| ARM Cortex-X3 | 228 ์ํธ๋ฆฌ | ๋ถ์ฐ๋ ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ | 68 ๋ก๋ / 56 ์คํ ์ด | ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ ํ์ผ |
ํ์(Hazard) ์ฒ๋ฆฌ ๋น๊ต
| ํ์ ์ ํ | In-Order ์ฒ๋ฆฌ | Out-of-Order ์ฒ๋ฆฌ |
|---|---|---|
| RAW (Read-After-Write) | ๋๊ธฐ (Stall) | ๋ฐ์ดํฐ ์ ๋ฌ (Forwarding) ๋๋ ๋๊ธฐ |
| WAW (Write-After-Write) | ๋๊ธฐ (Stall) | ๋ฆฌ๋ค์ด๋ฐ์ผ๋ก ์ ๊ฑฐ |
| WAR (Write-After-Read) | ๋๊ธฐ (Stall) | ๋ฆฌ๋ค์ด๋ฐ์ผ๋ก ์ ๊ฑฐ |
| ๋ฉ๋ชจ๋ฆฌ ์์กด์ฑ | ์์ ๋ณด์ฅ | ๋ก๋/์คํ ์ด ํ๋ก ํ์ง |
ํ๋ ๊ตฌํ์์๋ ์ ํ์ ๊ฐ๋ ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ์ง ์๋๋ค. ์๋ฅผ ๋ค์ด RAW ์์กด์ฑ์ forwarding์ผ๋ก ์ค์ด๋, ๊ธด ์ง์ฐ์ LOAD๋ ROB์ issue queue์ ์ค๋ ๋จธ๋ฌผ๋ฉฐ ๋ค๋ฐ๋ฅด๋ ๋ ๋ฆฝ ๋ช ๋ น์ด๋ฅผ ๋จผ์ ์คํํ๊ฒ ๋ง๋ ๋ค. ๊ฒฐ๊ตญ ๋ฆฌ๋ค์ด๋ฐ, wakeup/select, forwarding, load/store ordering์ด ํจ๊ป ์๋ํด์ผ OoO์ ์ด์ ์ด ํ์ค์ ์ธ IPC ํฅ์์ผ๋ก ์ด์ด์ง๋ค.
๋์ ์๋ฆฌ
Out-of-Order ์คํ์ ํฌ๊ฒ 8๋จ๊ณ๋ก ๋์ํ๋ค:
1๋จ๊ณ: ํ์น (Fetch)
๋ช ๋ น์ด๋ฅผ ๋ช ๋ น์ด ์บ์(I-Cache)์์ ์ฝ์ด์ด. ๋ถ๊ธฐ ์์ธก๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์คํํ ๋ช ๋ น์ด ๋ธ๋ก์ ์์ธกํ๊ณ , ์์ธก๋ ์ฃผ์์์ ๋ช ๋ น์ด๋ฅผ ํ์นํจ.
2๋จ๊ณ: ๋์ฝ๋ฉ (Decode)
ํ์น๋ ๋ช ๋ น์ด๋ฅผ ํด์ํ์ฌ ๋ง์ดํฌ๋ก ์ฐ์ฐ(micro-operation, uop)์ผ๋ก ๋ณํํ๋ค. ๋ณต์กํ CISC ๋ช ๋ น์ด๋ ์ฌ๋ฌ ๊ฐ์ uop์ผ๋ก ๋ถํด๋์ด ์ดํ ๋จ๊ณ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ถ์ ๋๋ค.
3๋จ๊ณ: ๋ฆฌ๋ค์ด๋ฐ ๋ฐ ํ ๋น (Rename & Allocate)
- ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ ํ์ผ์์ ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ๋ฅผ ํ ๋น
- ์ํคํ ์ฒ ๋ ์ง์คํฐ๋ฅผ ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ๋ก ๋งคํ (Register Alias Table, RAT ์ฌ์ฉ)
- ROB ์ํธ๋ฆฌ ํ ๋น
- ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ ์ํธ๋ฆฌ ํ ๋น
4๋จ๊ณ: ๋์คํจ์น (Dispatch)
์ค๋น๋ ๋ช ๋ น์ด๋ฅผ ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ ์ผ๋ก ์ ๋ฌ. ๋ช ๋ น์ด์ ์์กด์ฑ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ , ์ค๋น๋๋ฉด ์คํ๋ ์ ์๋๋ก ์ค๋นํจ.
5๋จ๊ณ: ์คํ (Execute)
๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ ์์ ํผ์ฐ์ฐ์๊ฐ ์ค๋น๋ ๋ช ๋ น์ด๋ฅผ ์ ํํ์ฌ ์คํ ์ ๋์ผ๋ก ์ ๋ฌ. ์ฌ๋ฌ ๋ช ๋ น์ด๊ฐ ๋์์ ๋ค๋ฅธ ์คํ ์ ๋์์ ์คํ๋ ์ ์์.
6๋จ๊ณ: ๊ฒฐ๊ณผ ์ ๋ฌ (Result Bypassing/Forwarding)
์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ๋ช ๋ น์ด์ ํผ์ฐ์ฐ์๋ก ์ฆ์ ์ ๋ฌ. ๊ฒฐ๊ณผ๊ฐ ๋ ์ง์คํฐ ํ์ผ์ ๊ธฐ๋ก๋๊ธฐ ์ ์ ๋ค๋ฅธ ๋ช ๋ น์ด์์ ์ฌ์ฉํ ์ ์๊ฒ ํจ.
7๋จ๊ณ: ์๋ฃ (Complete)
์คํ ๊ฒฐ๊ณผ๋ฅผ ROB์ ๊ธฐ๋ก. ๋ช ๋ น์ด๊ฐ ์คํ๋์์์ ํ์ํ๊ณ , ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํจ.
8๋จ๊ณ: ์ปค๋ฐ/์กธ์ (Commit/Retire)
ROB์ ๋งจ ์์ ์๋ ๋ช ๋ น์ด๊ฐ ์คํ์ ์๋ฃํ์ ๋, ํ๋ก๊ทธ๋จ ์์๋๋ก ์ํคํ ์ฒ ๋ ์ง์คํฐ ํ์ผ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ก. ์์ธ๊ฐ ๋ฐ์ํ ๋ช ๋ น์ด๋ ์ ์ ํ ๋ณต๊ตฌ ์ฒ๋ฆฌ ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํจ.
๋์ ํ๋ฆ๋
Out-of-Order ์คํ์ 8๋จ๊ณ๋ก ๋์ํ๋ฉฐ, ํต์ฌ ๊ตฌ์ฑ ์์๋ค์ด ํจ๊ป ์๋ํด ๋ช ๋ น์ด๋ฅผ ๋น์์ฐจ์ ์ผ๋ก ์คํํ๊ณ ํ๋ก๊ทธ๋จ ์์๋๋ก ์ปค๋ฐํ๋ค.
์ฅ๋จ์
์ฅ์
- ์ฑ๋ฅ ํฅ์: ํ์ดํ๋ผ์ธ์ ์ ํด ์๊ฐ์ ์ต์ํํ์ฌ IPC(Instructions Per Cycle) ํฅ์
- ๋ฉ๋ชจ๋ฆฌ ์ง์ฐ ์๊ฐ ์จ๊น: ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋๊ธฐ ์๊ฐ ๋์ ๋ค๋ฅธ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ง์ฐ ํจ๊ณผ ๊ฐ์
- ํ์ดํ๋ผ์ธ ํ์ฉ๋ ์ฆ๊ฐ: ์คํ ์ ๋์ ๊ฐ์ฉ์ฑ์ ๋์ฌ ํ๋์จ์ด ์์ ํจ์จ์ ํ์ฉ
- ๋ถ๊ธฐ ์์ธก ์คํจ ๋น์ฉ ๊ฐ์: ์๋ชป๋ ๋ถ๊ธฐ ์์ธก ํ์๋ ์คํ๋ ๋ช ๋ น์ด๋ค์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ธฐ์กด ์ฝ๋ ํธํ: ์ํํธ์จ์ด ๋ณ๊ฒฝ ์์ด ํ๋์จ์ด ์์ค์์ ์ฑ๋ฅ ํฅ์
๋จ์
- ํ๋์จ์ด ๋ณต์ก๋ ์ฆ๊ฐ: ๋ฆฌ๋ค์ด๋ฐ, ROB, ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ ๋ฑ ์ถ๊ฐ ํ๋์จ์ด ํ์
- ์ ๋ ฅ ์๋ชจ ์ฆ๊ฐ: ๋ณต์กํ ์ ์ด ๋ก์ง๊ณผ ์ถ๊ฐ ๋ ์ง์คํฐ๋ก ์ธํ ์ ๋ ฅ ์๋ชจ
- ๋ค์ด ๋ฉด์ ์ฆ๊ฐ: ์ถ๊ฐ ํ๋์จ์ด๋ก ์ธํ ์นฉ ๋ฉด์ ํ๋
- ์ค๊ณ ๋ณต์ก๋: ํ์ด๋ฐ, ์ ๋ ฅ, ๋ฉด์ ๊ฐ์ ํธ๋ ์ด๋์คํ ๋ณต์ก
- ๋ณด์ ์ทจ์ฝ์ : Spectre, Meltdown๊ณผ ๊ฐ์ ์ฌ์ด๋ ์ฑ๋ ๊ณต๊ฒฉ์ ์ทจ์ฝ
๋ณด์ ๊ณ ๋ ค์ฌํญ
Out-of-Order ์คํ์ ์ฑ๋ฅ์ ํฅ์์ํค์ง๋ง, ์ฌ์ด๋ ์ฑ๋ ๊ณต๊ฒฉ์ ์ทจ์ฝํ ์ ์๋ค:
- Spectre: ๋ถ๊ธฐ ์์ธก๊ณผ ์คํํ๋ฌํฐ๋ธ ์คํ์ ์ ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ
- Meltdown: Out-of-Order ์คํ ์ค ๊ถํ ๊ฒ์ฌ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ด์ฉํ ๊ณต๊ฒฉ
- ๋์์ฑ : Retpoline, IBRS, STIBP, ์ปค๋ ํ์ด์ง ํ ์ด๋ธ ๊ฒฉ๋ฆฌ(KPTI), speculation barrier ์ ์ฉ ๋ฑ
๊ด๋ จ ๊ธฐ์
์ฐธ๊ณ ๋ฌธํ ๋ฐ ๋ ผ๋ฌธ
-
Tomasulo, R.M. (1967). "An Efficient Algorithm for Exploiting Multiple Arithmetic Units." IBM Journal of Research and Development, 11(1), 25-33.
- Tomasulo ์๊ณ ๋ฆฌ์ฆ: Out-of-Order ์คํ์ ๊ธฐ์ด๊ฐ ๋ ์ต์ด์ ์๊ณ ๋ฆฌ์ฆ -
Smith, J.E. & Pleszkun, A.R. (1985). "Implementation of Precise Interrupts in Pipelined Processors." 12th ISCA.
- ์ ํํ ์์ธ ์ฒ๋ฆฌ(Precise Exceptions) ๊ตฌํ์ ๋ํ ํต์ฌ ์ฐ๊ตฌ -
Hennessy, J.L. & Patterson, D.A. (2017). Computer Architecture: A Quantitative Approach (6th ed.). Morgan Kaufmann.
- ์ปดํจํฐ ์ํคํ ์ฒ ๊ต๊ณผ์์์ Out-of-Order ์คํ์ ๋ํ ์์ธ ์ค๋ช -
Mudge, T. (2004). "The Microarchitecture of Superscalar Processors." Proceedings of the IEEE.
- ์ํผ์ค์นผ๋ผ ํ๋ก์ธ์์ ๋ง์ดํฌ๋ก์ํคํ ์ฒ ๋ถ์
๊ด๋ จ ๊ธฐ์ ๋ฌธ์
- CPU ๋ง์ดํฌ๋ก์ํคํ ์ฒ ๊ธฐ์ด: ํ์ดํ๋ผ์ธ, ์คํ ์ด์ง, IPC ๋ฑ ๊ธฐ๋ณธ ๊ฐ๋
- ๋ถ๊ธฐ ์์ธก: Out-of-Order ์คํ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ๋ถ๊ธฐ ์์ธก ๊ธฐ์
- ์บ์ ์ผ๊ด์ฑ ํ๋กํ ์ฝ: ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์์ ์บ์ ์ผ๊ด์ฑ
- ๋ฉ๋ชจ๋ฆฌ ์ผ๊ด์ฑ ๋ชจ๋ธ: Out-of-Order ์คํ์์์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ณด์ฅ ๊ท์น์ ์ ์ํ๋ ์ฃผ์
๊ด๋ จ ๊ธฐ์ ๋ถ์ผ
- ์คํํ๋ฌํฐ๋ธ ์คํ (Speculative Execution): ๋ถ๊ธฐ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์คํํ๋ ๊ธฐ์
- ๋ ์ง์คํฐ ๋ฆฌ๋ค์ด๋ฐ (Register Renaming): ๋ฌผ๋ฆฌ์ ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ ๊ฑฐ์ง ์์กด์ฑ ์ ๊ฑฐ
- ๋ฐ์ดํฐ ์ ๋ฌ (Data Forwarding): ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๋ค์ ๋ช ๋ น์ด์ ์ ๋ฌํ๋ ๊ธฐ์
- ๋ฉ๋ชจ๋ฆฌ ํ์ถ ํ๋ก (Memory Disambiguation): ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์์กด์ฑ ๋ถ์ ๋ฐ ์ต์ ํ
- ์ํผ์ค์นผ๋ผ ์ํคํ ์ฒ (Superscalar Architecture): ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๋์์ ์คํํ๋ ์ํคํ ์ฒ
ํต์ฌ ์ ๋ฆฌ
-
Out-of-Order ์คํ์ ๋ช ๋ น์ด๋ฅผ ํ๋ก๊ทธ๋จ ์์๊ฐ ์๋ ๋ฐ์ดํฐ ์ค๋น ์์๋๋ก ์คํํ์ฌ ํ์ดํ๋ผ์ธ ํ์ฉ๋๋ฅผ ๊ทน๋ํํ๋ ๊ธฐ์ ์ด๋ค.
-
ํต์ฌ ๊ตฌ์ฑ ์์์ธ ๋ฆฌ๋ค์ด๋ฐ(Register Renaming), ๋ฆฌ์ค๋ ๋ฒํผ(ROB), ๋ฆฌ์ ๋ฒ๋ฒ ์ด์ ์คํ ์ด์ (Reservation Station)์ด ํจ๊ป ์๋ํ์ฌ ๊ฑฐ์ง ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ ์ ํํ ์ปค๋ฐ์ ๋ณด์ฅํ๋ค.
-
๋์ ์๋ฆฌ๋ ํ์น โ ๋์ฝ๋ฉ โ ๋ฆฌ๋ค์ด๋ฐ โ ๋์คํจ์น โ ์คํ โ ์๋ฃ โ ์ปค๋ฐ์ 8๋จ๊ณ๋ก ๋์ํ๋ฉฐ, ROB๋ฅผ ํตํด ํ๋ก๊ทธ๋จ ์์๋๋ก ๊ฒฐ๊ณผ๋ฅผ ์ํคํ ์ฒ ์ํ์ ๋ฐ์ํ๋ค.
-
์ฅ์ ์ผ๋ก๋ ์ฑ๋ฅ ํฅ์, ๋ฉ๋ชจ๋ฆฌ ์ง์ฐ ์๊ฐ ์จ๊น, ํ์ดํ๋ผ์ธ ํ์ฉ๋ ์ฆ๊ฐ๊ฐ ์์ผ๋, ํ๋์จ์ด ๋ณต์ก๋, ์ ๋ ฅ ์๋ชจ, ๋ค์ด ๋ฉด์ ์ฆ๊ฐ๋ผ๋ ๋จ์ ์ด ์๋ค.
-
๋ณด์ ๊ณ ๋ ค์ฌํญ์ผ๋ก Spectre, Meltdown๊ณผ ๊ฐ์ ์ฌ์ด๋ ์ฑ๋ ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ฉฐ, ์ด๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํ ๋ค์ํ ๊ธฐ์ ์ด ๊ฐ๋ฐ๋์๋ค.