๐Ÿ—๏ธ Arch

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 ์‹คํ–‰ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

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 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 ์‹คํ–‰ ํ๋ฆ„

Out-of-Order ์‹คํ–‰์€ 8๋‹จ๊ณ„๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ํ•จ๊ป˜ ์ž‘๋™ํ•ด ๋ช…๋ น์–ด๋ฅผ ๋น„์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ๋Œ€๋กœ ์ปค๋ฐ‹ํ•œ๋‹ค.

์žฅ๋‹จ์ 

์žฅ์ 

  1. ์„ฑ๋Šฅ ํ–ฅ์ƒ: ํŒŒ์ดํ”„๋ผ์ธ์˜ ์œ ํœด ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜์—ฌ IPC(Instructions Per Cycle) ํ–ฅ์ƒ
  2. ๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„ ์ˆจ๊น€: ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋™์•ˆ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ง€์—ฐ ํšจ๊ณผ ๊ฐ์†Œ
  3. ํŒŒ์ดํ”„๋ผ์ธ ํ™œ์šฉ๋„ ์ฆ๊ฐ€: ์‹คํ–‰ ์œ ๋‹›์˜ ๊ฐ€์šฉ์„ฑ์„ ๋†’์—ฌ ํ•˜๋“œ์›จ์–ด ์ž์› ํšจ์œจ์  ํ™œ์šฉ
  4. ๋ถ„๊ธฐ ์˜ˆ์ธก ์‹คํŒจ ๋น„์šฉ ๊ฐ์†Œ: ์ž˜๋ชป๋œ ๋ถ„๊ธฐ ์˜ˆ์ธก ํ›„์—๋„ ์‹คํ–‰๋œ ๋ช…๋ น์–ด๋“ค์˜ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  5. ๊ธฐ์กด ์ฝ”๋“œ ํ˜ธํ™˜: ์†Œํ”„ํŠธ์›จ์–ด ๋ณ€๊ฒฝ ์—†์ด ํ•˜๋“œ์›จ์–ด ์ˆ˜์ค€์—์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ

๋‹จ์ 

  1. ํ•˜๋“œ์›จ์–ด ๋ณต์žก๋„ ์ฆ๊ฐ€: ๋ฆฌ๋„ค์ด๋ฐ, ROB, ๋ฆฌ์ €๋ฒ„๋ฒ ์ด์…˜ ์Šคํ…Œ์ด์…˜ ๋“ฑ ์ถ”๊ฐ€ ํ•˜๋“œ์›จ์–ด ํ•„์š”
  2. ์ „๋ ฅ ์†Œ๋ชจ ์ฆ๊ฐ€: ๋ณต์žกํ•œ ์ œ์–ด ๋กœ์ง๊ณผ ์ถ”๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ธํ•œ ์ „๋ ฅ ์†Œ๋ชจ
  3. ๋‹ค์ด ๋ฉด์  ์ฆ๊ฐ€: ์ถ”๊ฐ€ ํ•˜๋“œ์›จ์–ด๋กœ ์ธํ•œ ์นฉ ๋ฉด์  ํ™•๋Œ€
  4. ์„ค๊ณ„ ๋ณต์žก๋„: ํƒ€์ด๋ฐ, ์ „๋ ฅ, ๋ฉด์  ๊ฐ„์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ๋ณต์žก
  5. ๋ณด์•ˆ ์ทจ์•ฝ์ : Spectre, Meltdown๊ณผ ๊ฐ™์€ ์‚ฌ์ด๋“œ ์ฑ„๋„ ๊ณต๊ฒฉ์— ์ทจ์•ฝ

๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

Out-of-Order ์‹คํ–‰์€ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, ์‚ฌ์ด๋“œ ์ฑ„๋„ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค:

  • Spectre: ๋ถ„๊ธฐ ์˜ˆ์ธก๊ณผ ์ŠคํŽ™ํ˜๋Ÿฌํ‹ฐ๋ธŒ ์‹คํ–‰์„ ์•…์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ
  • Meltdown: Out-of-Order ์‹คํ–‰ ์ค‘ ๊ถŒํ•œ ๊ฒ€์‚ฌ ์ „์— ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ด์šฉํ•œ ๊ณต๊ฒฉ
  • ๋Œ€์‘์ฑ…: Retpoline, IBRS, STIBP, ์ปค๋„ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ฒฉ๋ฆฌ(KPTI), speculation barrier ์ ์šฉ ๋“ฑ

๊ด€๋ จ ๊ธฐ์ˆ 

์ฐธ๊ณ  ๋ฌธํ—Œ ๋ฐ ๋…ผ๋ฌธ

  1. 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 ์‹คํ–‰์˜ ๊ธฐ์ดˆ๊ฐ€ ๋œ ์ตœ์ดˆ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  2. Smith, J.E. & Pleszkun, A.R. (1985). "Implementation of Precise Interrupts in Pipelined Processors." 12th ISCA.
    - ์ •ํ™•ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(Precise Exceptions) ๊ตฌํ˜„์— ๋Œ€ํ•œ ํ•ต์‹ฌ ์—ฐ๊ตฌ

  3. Hennessy, J.L. & Patterson, D.A. (2017). Computer Architecture: A Quantitative Approach (6th ed.). Morgan Kaufmann.
    - ์ปดํ“จํ„ฐ ์•„ํ‚คํ…์ฒ˜ ๊ต๊ณผ์„œ์—์„œ Out-of-Order ์‹คํ–‰์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…

  4. Mudge, T. (2004). "The Microarchitecture of Superscalar Processors." Proceedings of the IEEE.
    - ์Šˆํผ์Šค์นผ๋ผ ํ”„๋กœ์„ธ์„œ์˜ ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„

๊ด€๋ จ ๊ธฐ์ˆ  ๋ฌธ์„œ

๊ด€๋ จ ๊ธฐ์ˆ  ๋ถ„์•ผ

  1. ์ŠคํŽ™ํ˜๋Ÿฌํ‹ฐ๋ธŒ ์‹คํ–‰ (Speculative Execution): ๋ถ„๊ธฐ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ์ˆ 
  2. ๋ ˆ์ง€์Šคํ„ฐ ๋ฆฌ๋„ค์ด๋ฐ (Register Renaming): ๋ฌผ๋ฆฌ์  ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฑฐ์ง“ ์˜์กด์„ฑ ์ œ๊ฑฐ
  3. ๋ฐ์ดํ„ฐ ์ „๋‹ฌ (Data Forwarding): ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ๋‹ค์Œ ๋ช…๋ น์–ด์— ์ „๋‹ฌํ•˜๋Š” ๊ธฐ์ˆ 
  4. ๋ฉ”๋ชจ๋ฆฌ ํƒˆ์ถœ ํšŒ๋กœ (Memory Disambiguation): ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์˜์กด์„ฑ ๋ถ„์„ ๋ฐ ์ตœ์ ํ™”
  5. ์Šˆํผ์Šค์นผ๋ผ ์•„ํ‚คํ…์ฒ˜ (Superscalar Architecture): ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜

ํ•ต์‹ฌ ์ •๋ฆฌ

  1. Out-of-Order ์‹คํ–‰์€ ๋ช…๋ น์–ด๋ฅผ ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ ์ค€๋น„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ ํ™œ์šฉ๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

  2. ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ธ ๋ฆฌ๋„ค์ด๋ฐ(Register Renaming), ๋ฆฌ์˜ค๋” ๋ฒ„ํผ(ROB), ๋ฆฌ์ €๋ฒ„๋ฒ ์ด์…˜ ์Šคํ…Œ์ด์…˜(Reservation Station)์ด ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ๊ฑฐ์ง“ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ •ํ™•ํ•œ ์ปค๋ฐ‹์„ ๋ณด์žฅํ•œ๋‹ค.

  3. ๋™์ž‘ ์›๋ฆฌ๋Š” ํŽ˜์น˜ โ†’ ๋””์ฝ”๋”ฉ โ†’ ๋ฆฌ๋„ค์ด๋ฐ โ†’ ๋””์ŠคํŒจ์น˜ โ†’ ์‹คํ–‰ โ†’ ์™„๋ฃŒ โ†’ ์ปค๋ฐ‹์˜ 8๋‹จ๊ณ„๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ROB๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ์•„ํ‚คํ…์ฒ˜ ์ƒํƒœ์— ๋ฐ˜์˜ํ•œ๋‹ค.

  4. ์žฅ์ ์œผ๋กœ๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ, ๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„ ์ˆจ๊น€, ํŒŒ์ดํ”„๋ผ์ธ ํ™œ์šฉ๋„ ์ฆ๊ฐ€๊ฐ€ ์žˆ์œผ๋‚˜, ํ•˜๋“œ์›จ์–ด ๋ณต์žก๋„, ์ „๋ ฅ ์†Œ๋ชจ, ๋‹ค์ด ๋ฉด์  ์ฆ๊ฐ€๋ผ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

  5. ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ์œผ๋กœ Spectre, Meltdown๊ณผ ๊ฐ™์€ ์‚ฌ์ด๋“œ ์ฑ„๋„ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋ฉฐ, ์ด๋ฅผ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.