๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Layer7

CPU, Pipeline (OOOE, Branch prediction)

๐ŸŸฃ CPU์˜ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ๊ตฌ์กฐ

instrucion cycle (๋ช…๋ น ์ฃผ๊ธฐ) : Fetch → Decode → Execute

ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ธ์ถœํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ๋ จ์˜ ํ™œ๋™.

 

 

 

 

 

์‚ฌ์ดํด์„ ์„ธ๋ถ€ํ™” ํ•˜๋ฉด 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ. ํ•ญ์ƒ ์‹คํ–‰ ํ•„์š”ํ•  ๋•Œ๋งŒ ์‹คํ–‰

  • ์ธ์ถœ ์‚ฌ์ดํด
  • ์‹คํ–‰ ์‚ฌ์ดํด
  • ๊ฐ„์ ‘ ์‚ฌ์ดํด (์ฃผ์†Œ ์ง€์ • ๋ฐฉ์‹์ด ํ•„์š”ํ•  ๋•Œ)
  • ์ธํ„ฐ๋ŸฝํŠธ ์‚ฌ์ดํด (์ธํ„ฐ๋ŸฝํŠธ ์š”๊ตฌ๊ฐ€ ์žˆ์„ ๋•Œ)

 

 

 

์ œ์–ด์žฅ์น˜ (Control Unit, CU)

  • -๋ช…๋ น์–ด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๋ช…๋ น์–ด ํ•ด๋…
  • - ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” ์ œ์–ด์‹ ํ˜ธ ์ƒ์„ฑ

 

์—ฐ์‚ฐ๊ธฐ/์‚ฐ์ˆ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์žฅ์น˜(ALU)

  • - ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ ๋‹ด๋‹น
  • - ๋ ˆ์ง€์Šคํ„ฐ ํ˜น์€ ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ํ˜น์€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ ์ˆ˜ํ–‰
  • - ์กฐํ•ฉ ๋…ผ๋ฆฌํšŒ๋กœ๋กœ ๊ตฌ์„ฑ(์กฐํ•ฉ ๋…ผ๋ฆฌํšŒ๋กœ ๋นŒ๋”ฉ ๋ธ”๋ก)
๋”๋ณด๊ธฐ

์กฐํ•ฉ ๋…ผ๋ฆฌ ํšŒ๋กœ : ํ˜„์žฌ์˜ ์ž…๋ ฅ ์‹ ํ˜ธ์— ์˜ํ•˜์—ฌ ์ถœ๋ ฅ(๊ฒฐ๊ณผ)๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋…ผ๋ฆฌ ํšŒ๋กœ

 

 

 

 

< Fetch Cycle > : ์ œ์–ด์žฅ์น˜์—์„œ ์‹คํ–‰ (Control Unit, CU)

 

โ–ถ Fetch

  • โ‘ -1 ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ์— ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ MAR๋กœ ์ „๋‹ฌ [ T0 :  MAR <- PC ]
๋”๋ณด๊ธฐ

MBR : ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ ๋ ˆ์ง€์Šคํ„ฐ. ๋ฉ”๋ชจ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์ฝ์€ ์ž๋ฃŒ๋ฅผ ๋„ฃ์–ด๋‘๊ธฐ ์œ„ํ•œ ์ผ์‹œ ๊ธฐ์–ต ํšŒ๋กœ.

ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(PC) : ๋‹ค์Œ์— ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ.

ํ˜„์žฌ์˜ ๋ช…๋ น์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๊ทธ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋‚ด์šฉ์— 1์ด ์ž๋™์ ์œผ๋กœ ๋ง์…ˆ๋จ.

  • โ‘ก MBR์— ์ €์žฅ๋œ ๋‚ด์šฉ์„ IR์— ์ „๋‹ฌํ•จ. [T2 : IR <- MBR ]
๋”๋ณด๊ธฐ

IR : ๋ช…๋ น์–ด ๋ ˆ์ง€์Šคํ„ฐ. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น์–ด๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋Š” ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜ ๋‚ด์˜ ๋ ˆ์ง€์Šคํ„ฐ.

์ค‘์•™ ์ฒ˜๋ฆฌ ์žฅ์น˜์˜ ์ธ์ถœ ์‚ฌ์ดํด์—์„œ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ์ง€์ •ํ•˜๋Š” ์ฃผ๊ธฐ์–ต์žฅ์น˜์˜ ์ฃผ์†Œ์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ๋ช…๋ น์–ด ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์˜ฎ๊ธฐ๋ฉด, ์‹คํ–‰ ์‚ฌ์ดํด์—์„œ ๋ช…๋ น์–ด ํ•ด๋…๊ธฐ๊ฐ€ ๋ช…๋ น์–ด ๋ ˆ์ง€์Šคํ„ฐ์— ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ•ด๋…ํ•œ๋‹ค.

 

< Excute Cycle >

โ–ถ Decode

โ‘ข-1 ๋ช…๋ น์–ด ํ•ด๋…๊ธฐ์—์„œ Opcode(์—ฐ์‚ฐ ์ฝ”๋“œ)๋ฅผ ํ•ด์„ํ•ด ๋ฌด์Šจ ์—ฐ์‚ฐ์„ ํ• ์ง€ ๊ฒฐ์ •

โ‘ฃ Operand(์˜คํผ๋žœ๋“œ)๋Š” MBR์„ ๋„˜์–ด ์ฃผ๊ธฐ์–ต์žฅ์น˜๋กœ ๋„˜์–ด๊ฐ

 

โ‘ค ํ•ด๋…๋œ ์—ฐ์‚ฐ ์ฝ”๋“œ๊ฐ€ ALU(=์—ฐ์‚ฐ์žฅ์น˜)๋กœ ๋„˜์–ด๊ฐ.

๋”๋ณด๊ธฐ

 Operand(์˜คํผ๋žœ๋“œ) : ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฐ์ดํ„ฐ ์ฃผ์†Œ

 

โ–ถ Execute : ํ•ด์„๋œ ๋ช…๋ น์–ด์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์—ฐ์‚ฐ ์‹คํ–‰. (์ฃผ๊ธฐ์–ต์žฅ์น˜๋กœ ๋„˜์–ด๊ฐ„ ์˜คํผ๋žœ๋“œ๋ฅผ ์—ฐ์‚ฐ์žฅ์น˜๋กœ ๊ฐ€์ ธ์˜ด.)

 

  • ๋ฐ์ดํ„ฐ์˜ ์ด๋™ : CPU์™€ ๊ธฐ์–ต์žฅ์น˜, I/O์žฅ์น˜ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ : ์‚ฐ์ˆ , ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ
  • ๋ฐ์ดํ„ฐ ์ €์žฅ : ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋‚˜ ์ž…๋ ฅ ์žฅ์น˜๋กœ๋ถ€ํ„ฐ ์ฝ์–ด ๋“ค์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์–ต์žฅ์น˜์— ์ €์žฅ
  • ํ”„๋กœ๊ทธ๋žจ ์ œ์–ด : ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ˆœ์„œ ๊ฒฐ์ •

๐ŸŸฃ Pipelining

: ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋ฅผ ์ค‘์ฒฉ์‹œ์ผœ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ์ˆ 

ํ”„๋กœ์„ธ์„œ์—์„œ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ๋‹จ๊ณ„๋ณ„๋กœ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ์ˆ .

  • Pipelining์ด ์—†์ด ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ

ํด๋ก ์‚ฌ์ดํด ๋‹น ํ•œ ๋‹จ๊ณ„์—์„œ ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ

 

๋ช…๋ น์€ 5๋‹จ๊ณ„๋ฅผ ๋ชจ๋‘ ๊ฑฐ์ณ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ํ›„์— ๋‹ค์Œ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•จ.
๊ฐ ๋‹จ๊ณ„์— 1์ฃผ๊ธฐ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, 3๊ฐœ์˜ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ 15์ฃผ๊ธฐ๊ฐ€ ๊ฑธ๋ฆผ → ๋น„ํšจ์œจ์ 


 

  • Pipelining ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ


๊ฐ ๋‹จ๊ณ„๋Š” ํ•˜๋“œ์›จ์–ด์˜ ๋‹ค๋ฅธ ์„น์…˜์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ น์„ Pipeliningํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ ์‹œํ‚ด.
๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด ์„น์…˜์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.

3๊ฐœ์˜ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ 7์ฃผ๊ธฐ๊ฐ€ ๊ฑธ๋ฆผ → ํšจ์œจ์ 

 


pipeline์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋ ค๋ฉด ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค

  •   ๊ฐ ๋‹จ๊ณ„๋ณ„ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ผ์ •ํ•ด์•ผ ํ•œ๋‹ค. 
  •   ๊ฐ ๋ช…๋ น์–ด์˜ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋Š” ๊ท ์ผํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ผ ์ผ์ •ํ•˜์ง€๋„ ์•Š๊ณ  ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๊ฐ€ ๊ท ๋“ฑํ•˜์ง€ ์•Š์•„์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ผ์ •ํ•˜์ง€ ์•Š๊ณ , ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๊ฐ€ ๊ท ๋“ฑํ•˜์ง€ ์•Š์•„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. โ‰ชHazardโ‰ซ

 


๐ŸŸฃ Out-of-order-Execution (๋น„์ˆœ์ฐจ์  ์‹คํ–‰)

(๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)

๋ช…๋ น์–ด ์ˆ˜์ค€์—์„œ ๋ณ‘๋ ฌ์„ฑ(Instruction Level Parallelism)์„ ์ฐพ์•„์„œ ์ด๋ฅผ ๋น„์ˆœ์ฐจ์ , ์ฆ‰ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ธฐ์ˆ .

-Pipeline ๋‚ด์˜ ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ ๋ฐฉ์ง€, CPU๊ฐ€ ์ตœ๊ณ  ์„ฑ๋Šฅ์„ ๋‚ด๋„๋ก ํ•จ.

 

๋ช…๋ น์„ ๋น„์ˆœ์ฐจ์ ์œผ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ๊ธฐ์ˆ ๋“ค์ด ํ•„์š”ํ•˜๋‹ค

๋”๋ณด๊ธฐ

๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ(parallel processing) : ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์„œ๋“ค์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ ํ˜น์€ ํ•œ ํ”„๋กœ๊ทธ๋žจ์— ๋ถ„ํ• ๋œ ๋ถ€๋ถ„๋“ค์„ ๋ถ„๋‹ดํ•˜์—ฌ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ .

  • Instruction Window (๋ช…๋ น์–ด ์œˆ๋„์šฐ)
  • Register Renaming (๊ฐ€์งœ ์˜์กด์„ฑ ์ œ๊ฑฐ)
  • Reservation Station (๋™์  ๋ช…๋ น์–ด ์Šค์ผ€์ค„๋ง)
  • Reorder Buffer (์ˆœ์ฐจ์  ์™„๋ฃŒ)

 

๐Ÿ”ตInstruction Window (๋ช…๋ น์–ด ์œˆ๋„์šฐ)

prossecer Pipeline์—์„œ๋Š” ๋ช…๋ น์–ด๋“ค์ด ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ.

๋ช…๋ น์–ด์˜ ์ŠคํŠธ๋ฆผ์—์„œ ๊ฐ ๋ช…๋ น์–ด๋“ค์˜ ์˜์กด ๊ด€๊ณ„ ๋ถ„์„์ด ํ•„์š”ํ•œ๋ฐ, ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ถ„์„ํ•˜๋ฉด ๋น„ํšจ์œจ์ 

โ–ถ ๋ช…๋ น์–ด ์œˆ๋„์šฐ(Instruction Window)๊ฐ€ ํ•„์š”ํ•จ

๋ช…๋ น์–ด ์ŠคํŠธ๋ฆผ ์†์—์„œ ์ผ์ •ํ•œ ์ˆซ์ž์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ ILP(๋ณ‘๋ ฌ์„ฑ)๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ๋น„์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

 

๋”๋ณด๊ธฐ

๋ช…๋ น์–ด ์ŠคํŠธ๋ฆผ(Instruction stream) : ํ”„๋กœ์„ธ์„œ์— ์˜ํ•ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ด๋œ ๋ฐ์ดํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ

 

 

โ‘  ๋ช…๋ น์–ด ํ•˜๋‚˜๊ฐ€ ๋ช…๋ น์–ด ์œˆ๋„์šฐ ์†์œผ๋กœ ๋“ค์–ด์˜ด๊ณผ ๋™์‹œ์— ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ช…๋ น์–ด ํ•˜๋‚˜๋Š” ๋น ์ ธ๋‚˜๊ฐ.

โ‘ก ์œˆ๋„์šฐ ๋‚ด์—์„œ ๋ช…๋ น์–ด๋“ค์„ ์ฒ˜๋ฆฌํ•จ (์˜์กด์„ฑ ์ฒดํฌ, ์Šค์ผ€์ค„๋ง ํ›„ ๋ณ‘๋ ฌ์‹คํ–‰, ์ด์ „ ๋ช…๋ น์–ด ์™„๋ฃŒ ๊ธฐ๋‹ค๋ฆผ... ๋“ฑ)

โ‘ข ๋ช…๋ น์–ด ์œˆ๋„์šฐ ๋‚ด์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ช…๋ น์–ด๊ฐ€ ๋น ์ ธ๋‚˜๊ฐ€๊ณ , ๋™์‹œ์— ๋‹ค๋ฅธ ๋ช…๋ น์–ด๊ฐ€ ๋“ค์–ด์˜ด.

 

 

๐Ÿ”ต Refister Renaming (๊ฐ€์งœ ์˜์กด์„ฑ ์ œ๊ฑฐ)

 

๊ฐ€์งœ ์˜์กด์„ฑ์ด๋ผ๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์— ์‚ฌ์šฉ๋œ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋ณด๋ฉด ์ƒํ•˜ ์ฝ”๋“œ๊ฐ€ ์˜์กด์ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์˜๋ฏธ์ ์œผ๋กœ ๋”ฐ์ ธ ๋ณด๋ฉด ์‹ค์ œ๋กœ๋Š” ์˜์กด์„ฑ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•จ

์˜์กด์„ฑ ์ฒดํฌ ๊ณผ์ •์—์„œ ๊ฐ€์งœ ์˜์กด์„ฑ์ด ๋ฐœ๊ฒฌ๋˜์–ด ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ด๋ฆ„์„ ์‚ด์ง ๋ฐ”๊พธ์–ด์ฃผ๋Š” ๊ณผ์ •์„ Rester Renaming์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

 

๐Ÿ”ต Reservation Station(๋™์  ๋ช…๋ น์–ด ์Šค์ผ€์ค„๋ง)

operand๊ฐ€ ์ค€๋น„๋˜๋ฉด ๋ช…๋ น์–ด๋Š” ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ.
operand๊ฐ€ ์ค€๋น„๋˜์ง€ ์•Š์€ ๋ช…๋ น์–ด๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ๊ณณ์ด Reservation Station์ด๋ผ๋Š” Queue์ž„.

๋”๋ณด๊ธฐ

 

Queue : ์ปดํ“จํ„ฐ์˜ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ํ•œ ๊ฐ€์ง€๋กœ, ๋จผ์ € ์ง‘์–ด๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” FIFO(First In First Out)๋กœ ์ง€์ •ํ•˜๋Š” ํ˜•์‹

Reservation Station์—์„œ ๋Œ€๊ธฐํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ์ž‘์—…์„ ํ•จ.

 

โ— Wake-up : Reservation Station ์—์„œ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ์–ด๋–ค ๋ช…๋ น์–ด๊ฐ€  ์–ด๋–ค operand ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ๋‚˜ ์ฐพ๋Š” ๊ฒƒ์„ ๋งํ•จ. ๋งค๋ฒˆ Reservation Station Queue์— ์žˆ๋Š” ๋ช…๋ น์–ด๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” Operand ๋“ค์„ ๋ชจ๋‘ ์ฒดํฌํ•œ๋‹ค. (Bottle neck point)

 

โ— Select : operand ๊ฐ€ ์ค€๋น„๋˜์–ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์˜ ๋ช…๋ น์–ด๋ณด๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹คํ–‰ ์žฅ์น˜์˜ ์ˆซ์ž๊ฐ€ ์ ์€ ์ƒํ™ฉ์ด ์žˆ์„ ๋•Œ, ์‹คํ–‰ ์žฅ์น˜์˜ ํ• ๋‹น์„ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šค์ผ€์ค„๋งํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ (Bottle neck point)

 

๋”๋ณด๊ธฐ

Bottle neck(๋ณ‘๋ชฉ ํ˜„์ƒ) : ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์„ฑ๋Šฅ์ด๋‚˜ ์šฉ๋Ÿ‰์ด ํ•˜๋‚˜ ํ˜น์€ ์ ์€ ๊ฐœ์ˆ˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋‚˜ ์ž์›์— ์˜ํ•ด ์ œํ•œ์„ ๋ฐ›๋Š” ํ˜„์ƒ

โ–ถ ๋ณ‘๋ชฉ ํ˜„์ƒ๊ณผ ๋ณต์žก์„ฑ ๋•Œ๋ฌธ์— Reservation Station Queue์˜ ํฌ๊ธฐ๋ฅผ ๋ฌด์ž‘์ • ๋Š˜๋ ค์„œ ๋ณ‘๋ ฌ์„ฑ์„ ๋†’์ด๋Š” ์ž‘์—…์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ

Reservation Station์ด ์กด์žฌํ•จ์œผ๋กœ ํ•ด์„œ ๋ช…๋ น์–ด๋“ค์˜ ์‹คํ–‰์ด ๋ฐ˜๋“œ์‹œ ์ˆœ์ฐจ์ ์ด์ง€ ์•Š๊ณ , operand ๊ฐ€ ์ค€๋น„๋œ ๋Œ€๋กœ ๋น„์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์ผ€์ค„๋ง๋˜์–ด ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ.

 

Reservation Station์— ๋ช…๋ น์–ด๊ฐ€ ํˆฌ์ž…๋˜๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์‹คํ–‰๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ๋•Œ๊นŒ์ง€๋Š” ๋น„์ˆœ์ฐจ์ ์ผ ์ˆ˜ ์žˆ์Œ

→ operand์˜ ์ค€๋น„์ƒํƒœ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์Šค์ผ€์ค„๋งํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฐ”๋กœ ํ† ๋งˆ์А๋กœ(Tomasulo) ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

 

๐Ÿ”ต Reorder Buffer(์ˆœ์ฐจ์ ์™„๋ฃŒ)

๋ช…๋ น์–ด ์ˆœ์„œ๊ฐ€ ๋’ค์„ž์—ฌ์„œ ๋๋‚ฌ๋”๋ผ๋„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•จ. ์ด๋•Œ Reorder Buffer ์‚ฌ์šฉ


Reorder Buffer์— ์‹คํ–‰์ด ๋๋‚œ ๋ช…๋ น์–ด๋“ค์„ ๋ชจ์•„๋’€๋‹ค๊ฐ€ ์›๋ž˜์˜ ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ๋Œ€๋กœ ์ฐจ๋ก€์ฐจ๋ก€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ์คŒ


Reorder Buffer์—๋Š” ๋‹น์—ฐํžˆ ์›๋ž˜ ๋ช…๋ น์–ด์˜ ์ˆœ์„œ๋Œ€๋กœ ์Œ“์•„๋‘์–ด์•ผ ํ•œ๋‹ค.

 

โ‘  Reorder Buffer ์— ๋ช…๋ น์–ด๋ฅผ ๋„ฃ์–ด๋‘๋Š” ์‹œ์  =  ์ดˆ๊ธฐ์— Reservation Station์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ๋„ฃ๋Š” ์‹œ์ 

โ‘ก Reorder Buffer์— ๋„ฃ์–ด๋‘๊ณ  ์‹คํ–‰(์—ฐ์‚ฐ)์ด ๋๋‚œ ๊ฒƒ๋“ค๋งŒ ํ‘œ์‹œ

โ‘ข ์ฒ˜๋ฆฌ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ‘œ์‹œ๊ฐ€ ๋œ ๋ช…๋ น๋“ค์„ Reorder Buffer์—์„œ ์›๋ž˜ ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ๋Œ€๋กœ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ ๋“ฑ์— ์ €์žฅํ•ด ์คŒ

 

 


Out-of-oder-Excution (๋น„์ˆœ์ฐจ์  ์‹คํ–‰)์œผ๋กœ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž

A=5
B=3
C=A+B
D=4

 

์‚ฌ์ง„ 1
์‚ฌ์ง„ 2

 

 

โ–ถout-of-order-execution์€ Meltdown ์ทจ์•ฝ์  ์œ ๋ฐœ.


๐ŸŸฃ branch prediction(๋ถ„๊ธฐ ์˜ˆ์ธก)

(์ œ์–ด ํ•ด์ €๋“œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)

dynamic prediction : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ history ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„๊ธฐ๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ

 

a = e + f;
if (a == 0)
	b = 0;
else
	b = 1;

CPU๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋“ค์„ ์ฐพ์ง€๋งŒ, 2๋ฒˆ์งธ ์ค„์— if๋ฌธ์ด ์žˆ์–ด์„œ 3๋ฒˆ์„ ์ฝ์„์ง€ 5๋ฒˆ์„ ์ฝ์„์ง€ ์•Œ ์ˆ˜ ์—†์Œ.

โ–ถ ๊ทธ๋ž˜์„œ ์ฃผ์–ด์ง„ ๋ถ„๊ธฐ๋ฌธ์ด ์ฐธ์ด๋ƒ ๊ฑฐ์ง“์ด๋ƒ ํ•˜๋Š” ์งˆ๋ฌธ์˜ ๋‹ต์„ ์˜ˆ์ธกํ•จ. =Branch prediction(๋ถ„๊ธฐ ์˜ˆ์ธก)

 

์˜ˆ๋ฅผ ๋“ค์–ด,

๋ถ„๊ธฐ ์˜ˆ์ธก๊ธฐ๊ฐ€ a == 0์ผ ํ™•๋ฅ ์ด ๋†’๋‹ค๊ณ  ์˜ˆ์ธกํ–ˆ๋‹ค๋ฉด → CPU๋Š” ๊ทธ๊ฒƒ์„ ๋ฏฟ๊ณ  3๋ฒˆ์งธ ์ค„์˜ ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•จ.

์ดํ›„ 2๋ฒˆ์งธ ์ค„ ๋ช…๋ น์ด ์™„๋ฃŒ๋˜์–ด

  • a == 0์ด ๋งž๋‹ค๊ณ  ํŒ๋ช…๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•จ.
  • a == 0์ด ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋ช…๋˜๋ฉด ๋‹ค์‹œ ๋˜๋Œ์•„๊ฐ€(Undo) 5๋ฒˆ์งธ ์ค„ ๋ช…๋ น์ด ์ˆ˜ํ–‰๋˜๋„๋ก ํ•จ. 

๋ถ„๊ธฐ ์˜ˆ์ธก ๊ธฐ์ˆ ์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

โ— ๋ถ„๊ธฐ ๋ฐฉํ–ฅ ์˜ˆ์ธก

์‹คํ–‰๋  Pipeline ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฌธ์˜ ๋ถ„๊ธฐ ์—ฌ๋ถ€(teken or not taken)๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๊ธฐ๋ฒ•

 

์ •์  ๋ถ„๊ธฐ ๋ฐฉํ–ฅ ์˜ˆ์ธก : ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ผ ์‚ฌ์ „์— ๋ถ„๊ธฐ๋ฅผ ์ง€์ •

๋™์  ๋ถ„๊ธฐ ๋ฐฉํ–ฅ ์˜ˆ์ธก : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๊ณ„์‚ฐ ์ด๋ ฅ์— ๋”ฐ๋ผ ๋ถ„๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ์˜ˆ์ธก

 

โ— ๋ถ„๊ธฐ ๋ชฉ์ ์ง€ ์˜ˆ์ธก

๋ถ„๊ธฐ๋ฌธ์ด ์–ด๋””๋กœ ๋ถ„๊ธฐํ• ์ง€ ๋ชฉ์ ์ง€ PC(Program Counter) ๊ฐ’์„ ์˜ˆ์ธกํ•˜๋Š” ๊ธฐ๋ฒ•

 

โ–ถBranch prediction์€ Spectre ์ทจ์•ฝ์  ์œ ๋ฐœ.


๐ŸŸฃ speculation execution (์˜ˆ์ธก ์‹คํ–‰)

๋ถˆํ™•์‹คํ•œ ์˜ˆ์ธก ๊ธฐ๋ฐ˜, ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•

์˜ˆ์ธก์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๋ช…๋ น์–ด๋ฅผ ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ → ๊ฒฐ๊ณผ ๊ฐ’์ด ์˜ˆ์ธก ๊ฐ’๊ณผ ๋‹ค๋ฅด๋ฉด ์ด๋ฏธ ์ฒ˜๋ฆฌํ•œ ๋ช…๋ น์–ด ์‚ญ์ œ

 

โ— ์˜ˆ์ธก์— ํ•„์š”ํ•œ ์žฅ์น˜

๋ฏธ๋ž˜ ์˜ˆ์ธก ์žฅ์น˜ : ์˜ˆ์ธก์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๋ช…๋ น์„ ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•˜๋Š” ์žฅ์น˜

- ๋™์ /์ •์  ๋ถ„๊ธฐ ์˜ˆ์ธก, ์ด๋ ฅ ๊ธฐ๋ฐ˜ ๋ถ„๊ธฐ ์˜ˆ์ธก

 

ROB(Reorder Buffer)

๊ฒฐ๊ณผ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์•„๋„ ์‹คํ–‰์„ ๊ณ„์† ์ง„ํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜

 

Undo

์˜ˆ์ธก์ด ํ‹€๋ ธ์„ ๋•Œ ์›์ƒํƒœ๋กœ ๋ณต๊ตฌํ•˜๋Š” ์žฅ์น˜

 

โ— ์˜ˆ์ธก ์‹คํ–‰ ๋™์ž‘ ์›๋ฆฌ

๋ถ„๊ธฐ๋ฌธ ์˜ˆ์ธก ์‹คํ–‰ : ๋™์ /์ •์  ๋ถ„๊ธฐ ๋ฐฉํ–ฅ๊ณผ, ๋ถ„๊ธฐ ๋ชฉ์ ์ง€๋ฅผ ์˜ˆ์ธกํ•˜์—ฌ ๋ช…๋ น์–ด ์‹คํ–‰

์˜ˆ์ธก ์„ฑ๊ณต ์‹œ : ์‹คํ–‰๋œ ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด ์ˆ˜ํ–‰

์˜ˆ์ธก ์‹คํŒจ ์‹œ : ์‹คํ–‰๋œ ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ์ทจ์†Œํ•˜๊ณ  ์›์ƒํƒœ๋กœ ๋ณต๊ตฌ(Undo)

'Layer7' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

C Pointer  (1) 2021.05.11
embedded(์ž„๋ฒ ๋””๋“œ)  (3) 2021.04.20
Pipelining : Hazard  (2) 2021.04.17
RAM ROM FLASH  (4) 2021.04.11
์ปดํ“จํ„ฐ ๋ถ€ํŒ…๊ณผ์ •  (2) 2021.04.10