๐Ÿชœ Computer System : 4. ํ”„๋กœ์„ธ์„œ ๊ตฌ์กฐ_part3

A Yeon Jangยท2025๋…„ 8์›” 5์ผ

โ›“๏ธโ€ ํŒŒ์ดํ”„๋ผ์ธ

ํŒŒ์ดํ”„๋ผ์ธ(Pipelining)์ด๋ž€?

ํŒŒ์ดํ”„๋ผ์ด๋‹์€ ํ”„๋กœ์„ธ์„œ์˜ ์ฒ˜๋ฆฌ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ๋ฐฉ์‹์ด๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” "๋ช…๋ น์–ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋“ค์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ณ‘๋ ฌ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ"์œผ๋กœ,
SEQ ๊ตฌ์กฐ์—์„œ๋Š” ๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ ํ•œ๋ฒˆ์˜ ํด๋Ÿญ์‚ฌ์ดํด์— ํ•œ๋ฒˆ์˜ ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ,
Pipeline์—์„œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๊ฐ€ CPU ๋‚ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋‹จ๊ณ„์—์„œ ๋™์‹œ์— ์‹คํ–‰๋œ๋‹ค.

โœ… ํŒŒ์ดํ”„๋ผ์ด๋‹์˜ ํŠน์ง•

  • ํด๋Ÿญ ์‚ฌ์ดํด ๋‹จ์ถ•: ๊ฐ ๋‹จ๊ณ„์— ๋งž๋Š” ์ตœ์ ํ™”๋œ ๋™์ž‘๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ํด๋Ÿญ ์ฃผ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€: ๋ช…๋ น์–ด๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์ „์ฒด Throughput ์ƒ์Šนํ•œ๋‹ค.
    • ๋‹ค๋งŒ, ๋˜ ๋‹ค๋ฅธ ์ง€์—ฐ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ํ•˜๋“œ์›จ์–ด ์ž์› ํ™œ์šฉ๋ฅ  ์ฆ๊ฐ€: ๋ชจ๋“  ์œ ๋‹›(ALU, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)์ด ๋งค ์‚ฌ์ดํด๋งˆ๋‹ค ๋ฐ”์˜๊ฒŒ ์ผํ•œ๋‹ค.

๋น„ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ

๐Ÿ”ผ Unpipelined Hardware (๋น„ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ)

  • ๋‹จ์ผ ์กฐํ•ฉ ๋…ผ๋ฆฌ ํšŒ๋กœ(Comb. logic)๊ฐ€ 300ps ๋™์•ˆ ์ž‘๋™
  • ์ถœ๋ ฅ๊ฐ’์€ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•˜๋Š”๋ฐ 20ps ์†Œ์š”๋œ๋‹ค.

๐Ÿ“Œ ๋ฌธ์ œ์ 

  • ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ์ด์ „ ๋ช…๋ น์–ด๊ฐ€ ์™„์ „ํžˆ ๋๋‚˜์•ผ๋งŒ ์‹œ์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์กฐํ•ฉ๋…ผ๋ฆฌ ์ „์ฒด๊ฐ€ ํ•œ ๋ฒˆ์— ๋™์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํด๋Ÿญ ์†๋„ ๋А๋ฆฌ๊ณ  ์ž์› ๋‚ญ๋น„๋„ ํฌ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ

๐Ÿ”ผ 3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ

  • ๋™์ผํ•œ ์ž‘์—…์„ 100ps์งœ๋ฆฌ 3๊ฐœ์˜ ๋…ผ๋ฆฌ ๋ธ”๋ก(A, B, C) ์œผ๋กœ ๋ถ„ํ• 
  • ๊ฐ ๋‹จ๊ณ„ ์‚ฌ์ด์—๋Š” ๋ ˆ์ง€์Šคํ„ฐ(20ps) ์กด์žฌํ•˜์—ฌ ํด๋Ÿญ์— ๋”ฐ๋ผ ๊ฐ’ ๋„˜๊น€
  • ์ด ๋ช…๋ น์–ด ์ง€์—ฐ ์‹œ๊ฐ„์€ 360ps์ง€๋งŒ, ์ด๋Š” latency (ํ•œ ๋ช…๋ น์–ด๊ฐ€ ๋๋‚˜๋Š” ์‹œ๊ฐ„)์ผ ๋ฟ!

โœ… ์ด์ 

  • 3๋‹จ๊ณ„๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฏ€๋กœ ๊ฐ ๋ช…๋ น์–ด๊ฐ€ ๊ฒน์ณ ์‹คํ–‰๋จ
  • ์ž์› ๋‚ญ๋น„ ์—†์ด ๋ชจ๋“  ๋…ผ๋ฆฌ ๋ธ”๋ก์ด ๋ฐ”์˜๊ฒŒ ์ผํ•จ
  • latency๋Š” ๋” ๊ธธ์–ด๋„ throughput์€ ํ›จ์”ฌ ๋†’๋‹ค.

๐Ÿ”ฅ ์ฆ‰, ์šฐ๋ฆฌ๋Š” ์ผ๋ถ€ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์‹œ์Šคํ…œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐœ๋…์˜๋ฏธ๋ˆ„๊ฐ€ ์œ ๋ฆฌ?
Latencyํ•œ ๋ช…๋ น์–ด๊ฐ€ ์‹œ์ž‘ํ•ด์„œ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋น„ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๊ฐ€ ์œ ๋ฆฌ
Throughput๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ๋ช‡ ๊ฐœ ๋ช…๋ น์–ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๊ฐ€ ์œ ๋ฆฌ

๐Ÿงฉ ํŒŒ์ดํ”„๋ผ์ธ ๋™์ž‘

๐Ÿ”— ์ƒ์„ธ ๋™์ž‘

1๏ธโƒฃ Time = 239 : ํด๋Ÿญ ์‹ ํ˜ธ๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ ์ง์ „
I1 : Stage B์—์„œ ์—ฐ์‚ฐ ์ค‘
register A ๐Ÿ”— B : A์™€ ๊ด€๊ณ„ ์—†์ด B์˜ ์ด์ „ ๊ฐ’ ์ €์žฅ ์ค‘
I2: Stage A์—์„œ ์—ฐ์‚ฐ ์ค‘
register B ๐Ÿ”— C : ๋ฐ์ดํ„ฐ x
I3 : ์•„๋ฌด ๋™์ž‘๋„ ์•ˆํ•จ
register C ๐Ÿ”— : ๋ฐ์ดํ„ฐ x

๐Ÿ“Œ ํด๋Ÿญ ์ƒ์Šน์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „ ๊นŒ์ง€๋Š” ์—ฐ์‚ฐ์ด ๋๋‚ฌ๋‹ค๊ณ  ํ•ด๋„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ์ด ์•ˆ๋จ

2๏ธโƒฃ Time = 241 : ํด๋Ÿญ ์ƒ์Šน์ด ๋ฐœ์ƒํ•œ ์งํ›„
I1 : Stage C๋กœ ๋“ค์–ด๊ฐ€ ์—ฐ์‚ฐ ์‹œ์ž‘
register A ๐Ÿ”— B : A์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ์ฆ‰, I2์˜ A์—ฐ์‚ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ €์žฅ๋จ
I2: Stage B๋กœ ๋“ค์–ด๊ฐ€ ์—ฐ์‚ฐ ์‹œ์ž‘
register B ๐Ÿ”— C : B์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ์ฆ‰, I1์˜ B์—ฐ์‚ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ €์žฅ๋จ
I3 : Stage A๋กœ ๋“ค์–ด๊ฐ€ ์—ฐ์‚ฐ ์‹œ์ž‘์ค‘
register C ๐Ÿ”— : ๋ฐ์ดํ„ฐ x

๐Ÿ“Œ ํด๋Ÿญ ์ƒ์Šน์ด ๋ฐœ์ƒ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์ž…๋ ฅ๊ฐ’์„ ์บก์ณํ•˜๊ณ  ๋‹ค์Œ ์Šคํ…Œ์ด์ง€๋กœ ๋„˜์–ด์˜ด

3๏ธโƒฃ Time = 300 : ์กฐํ•ฉ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ ์ค‘
I1 : Stage C์˜ ์กฐํ•ฉ ๋…ผ๋ฆฌ ์•ˆ์—์„œ ์—ฐ์‚ฐ ์ค‘
register A ๐Ÿ”— B : ๋ณ€ํ™” ๋ฐœ์ƒ ์—†์Œ
I2: Stage B์˜ ์กฐํ•ฉ ๋…ผ๋ฆฌ ์•ˆ์—์„œ ์—ฐ์‚ฐ ์ค‘
register B ๐Ÿ”— C : ใ…‹๋ณ€ํ™” ๋ฐœ์ƒ ์—†์Œ
I3 : Stage A์˜ ์กฐํ•ฉ ๋…ผ๋ฆฌ ์•ˆ์—์„œ ์—ฐ์‚ฐ ์ค‘
register C ๐Ÿ”— : ๋ณ€ํ™” ๋ฐœ์ƒ ์—†์Œ

๐Ÿ“Œ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ณ‘๋ ฌ์„ฑ์ด ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ตฌ๊ฐ„์œผ๋กœ ๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ๋™์‹œ์— ๋‹ค๋ฅธ ์Šคํ…Œ์ด์ง€์—์„œ ์ž‘์—… ์ค‘

4๏ธโƒฃ Time = 359 : ๋‹ค์Œ ํด๋Ÿญ ์ƒ์Šน ์ง์ „
I1 : ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๊ฒฐ๊ณผ๊ฐ€ C ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ž…๋ ฅ๋‹จ์— ๋„์ฐฉ
register A ๐Ÿ”— B : ๋ณ€ํ™” ๋ฐœ์ƒ ์—†์Œ
I2: ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๊ฒฐ๊ณผ๊ฐ€ B ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ž…๋ ฅ๋‹จ์— ๋„์ฐฉ
register B ๐Ÿ”— C : ๋ณ€ํ™” ๋ฐœ์ƒ ์—†์Œ
I3 : ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๊ฒฐ๊ณผ๊ฐ€ A ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ž…๋ ฅ๋‹จ์— ๋„์ฐฉ
register C ๐Ÿ”— : ๋ณ€ํ™” ๋ฐœ์ƒ ์—†์Œ

โฑ๏ธ ํด๋Ÿญ ์‹ ํ˜ธ

์‚ฌ์ง„์„ ๋ณด๋ฉด ํ•œ ์‚ฌ์ดํด ๋‚ด์—์„œ ํด๋Ÿญ์ด ์ƒ์Šนํ–ˆ๋‹ค๊ฐ€ ํ•˜๊ฐ•ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๊ฑธ rising edge-triggered ๋ผ๊ณ  ํ•˜๋Š”๋ฐ,
ํด๋Ÿญ์ด ์˜ค๋ฅผ๋•Œ์—๋งŒ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์ž…๋ ฅ๋‹จ์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์ณํ•˜๊ณ  ์ดํ›„ ๋™์ž‘์„ ์‹œํ–‰ํ•œ๋‹ค.
ํด๋Ÿญ์ด ํ•˜๊ฐ•ํ•˜๋Š”๊ฑด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ผ๋Š” ์‹ ํ˜ธ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค๋Š” ์˜๋ฏธ์ผ ๋ฟ, ๊ทธ ์ˆœ๊ฐ„์—๋Š” ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

์ฆ‰, ์‚ฌ์‹ค์ƒ ํด๋Ÿญ์ด ์ƒ์Šนํ•œ ์ˆœ๊ฐ„๋งŒ ์ค‘์š”ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ์กฐํ•ฉ ๋…ผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ ํ˜ธ๋ฅผ ์ „ํŒŒ ํ•˜๋Š” ์‹œ๊ฐ„์ด๋‹ค.

โ€ผ๏ธ ๋‹จ, ํด๋Ÿญ์ด ๋„ˆ๋ฌด ๋น ๋ฅด๋ฉด ์•„์ง ์—ฐ์‚ฐ ์ค‘์ธ ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ
๋ ˆ์ง€์Šคํ„ฐ์— ์ž…๋ ฅ์ด ์œ ํšจํ•˜์ง€ ์•Š๊ฒŒ ๋˜์–ด ์น˜๋ช…์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ

โฑ๏ธ ์กฐํ•ฉ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ ์‹œ๊ฐ„์ด 100ps ๊ฑธ๋ฆฌ๊ณ 
๋ ˆ์ง€์Šคํ„ฐ + ์…‹์—… ์‹œ๊ฐ„๊นŒ์ง€ ๊ณ ๋ คํ•˜๋ฉด ์ „์ฒด ํด๋Ÿญ ์ฃผ๊ธฐ๋Š”
"120ps ์ •๋„๋กœ ์„ค์ •ํ•ด์•ผ ์•ˆ์ •์ ์ด๋‹ค"

์…‹์—… ์‹œ๊ฐ„ ์ฐธ๊ณ 

T_clock โ‰ฅ T_comb + T_setup + T_clk_to_q

ํ•ญ๋ชฉ์„ค๋ช…
T_comb์กฐํ•ฉ ๋…ผ๋ฆฌ์˜ ์ตœ๋Œ€ ์—ฐ์‚ฐ ์ง€์—ฐ ์‹œ๊ฐ„
T_setup๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์ž…๋ ฅ์„ ์•ˆ์ •์ ์œผ๋กœ ๋ฐ›๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์ค€๋น„ ์‹œ๊ฐ„
T_clk_to_q์ด์ „ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ถœ๋ ฅ์ด ๋ณ€ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ (์ถœ๋ ฅ ๋”œ๋ ˆ์ด)

โš ๏ธ ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•œ๊ณ„

๋‹ค์Œ์€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ํšจ๊ณผ๋ฅผ ์ถ•์†Œ์‹œํ‚ค๋Š” ์š”์ธ๋“ค์ด๋‹ค.

๐Ÿ—‚๏ธ ๋น„๊ท ์ผ๋ถ„๋ฆฌ Nonuniform Partitioning


์•ž์—์„œ ๋ดค๋˜ ์˜ˆ์‹œ์™€ ๋‹ฌ๋ฆฌ ์œ„์˜ ๊ทธ๋ฆผ์€ ๊ฐ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ง€์—ฐ์‹œ๊ฐ„์ด ๋‹ค์–‘ํ•˜๋‹ค.

ํšจ์œจ์ ์ด์ง€ ๋ชปํ•œ ํด๋Ÿญ ์†๋„

๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ด๋ฐ์— ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋Ÿญ ์†๋„๋ฅผ ๊ณ ๋ คํ•  ๋•Œ
๊ฐ€์žฅ ๋Šฆ๊ฒŒ ๋๋‚˜๋Š” ๋‹จ๊ณ„์˜ ์‹œ๊ฐ„์ง€์—ฐ์„ ๊ณ ๋ ค
ํ•ด์•ผ ํ•œ๋‹ค.
์ฆ‰, ์ด ์—ฐ์‚ฐ ์‹œ๊ฐ„์€ ๋™์ผํ•˜๋”๋ผ๋„ ํด๋Ÿญ ์†๋„๋กœ ์ธํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

๐Ÿ“‰ ์ค„์–ด๋“œ๋Š” Deep Pipelining์˜ ํšจ๊ณผ

๋ฌด์‹œํ•  ์ˆ˜ ์—†๋Š” ๋ ˆ์ง€์Šคํ„ฐ ์‹œ๊ฐ„ ์ง€์—ฐ

์ž‘์—…์˜ ๋‹จ๊ณ„๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ์ชผ๊ฐœ๋Š” ๊ฒƒ์€, ์ฆ‰ ๋งค์šฐ ๊นŠ์€ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ™์€ ์ž‘์—…์— ๋Œ€ํ•ด์„œ๋„
์—ฐ์‚ฐ์˜ ์–‘์ด ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

๋‹จ, ๊นŠ์€ ํŒŒ์ดํ”„๋ผ์ธ์€ ๊ทธ๋งŒํผ ์ค‘๊ฐ„์— ๋ ˆ์ง€์Šคํ„ฐ๋„ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ 
๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์„ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ› ๏ธ ํŒŒ์ดํ”„๋ผ์ธํ˜• Y86-64์˜ ๊ตฌํ˜„

โ˜‘๏ธ PC ๊ฐฑ์‹  ๋‹จ๊ณ„ ์žฌ๋ฐฐ์น˜

๊ธฐ์กด SEQ

Fetch โ†’ Decode โ†’ Execute โ†’ Memory โ†’ Writeback โ†’ PC update

  • ํ˜„์žฌ ๋ช…๋ น์–ด์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ๊ฒฐ์ •ํ•จ

๐Ÿ” ์‹คํ–‰ ํ๋ฆ„ (์‚ฌ์ดํด N ๊ธฐ์ค€)

  1. instruction a์˜ ์ „์ฒด ๋‹จ๊ณ„ ์ˆ˜ํ–‰ (Fetch ~ Writeback)
  2. ์‹ธ์ดํด ๋์—์„œ a์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ PC ๊ณ„์‚ฐ
  3. ๊ณ„์‚ฐ๋œ PC๋Š” ๋‹ค์Œ ์‹ธ์ดํด์— ์ ์šฉ
  4. ๋”ฐ๋ผ์„œ instruction b์˜ Fetch๋Š” ํ•œ ์‹ธ์ดํด ๋Šฆ๊ฒŒ ์‹œ์ž‘

โ›” PC ๊ณ„์‚ฐ๊ณผ Fetch๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์—,
๋‹ค์Œ ๋ช…๋ น์–ด ์‹คํ–‰์ด ํ•ญ์ƒ ์ง€์—ฐ๋จ

SEQโบ

PC update โ†’ Fetch โ†’ Decode โ†’ Execute โ†’ Memory โ†’ Writeback

  • PC ์—ฐ์‚ฐ์„ ํด๋Ÿญ ์‹ธ์ดํด ์‹œ์ž‘ ์‹œ์ ์œผ๋กœ ์•ž๋‹น๊ธด ๊ตฌ์กฐ
  • instruction a๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋‹ค์Œ ๋ช…๋ น์–ด(b)์˜ ์ฃผ์†Œ ๊ณ„์‚ฐ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ
    โ†’ pIcode, pCnd, pValP ๊ฐ™์€ ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ด๋‘ 
  • ๋‹ค์Œ ์‹ธ์ดํด์ด ์‹œ์ž‘๋˜์ž๋งˆ์ž โ†’ ์ด ๊ฐ’์„ ์ด์šฉํ•ด b์˜ ์ฃผ์†Œ๋ฅผ ์ฆ‰์‹œ ๊ณ„์‚ฐ
  • ๊ณ„์‚ฐ๋œ ์ฃผ์†Œ๋Š” ๊ทธ ์‹ธ์ดํด ์•ˆ์—์„œ ์ฆ‰์‹œ Fetch์— ์‚ฌ์šฉ

๐Ÿ” ์‹คํ–‰ ํ๋ฆ„ (์‚ฌ์ดํด N ๊ธฐ์ค€)

  1. instruction a๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ ํ•„์š”ํ•œ ์‹ ํ˜ธ๋“ค์„ ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ
  2. ๋™์‹œ์—, ์ด์ „์— ์ €์žฅํ•ด ๋‘” ์‹ ํ˜ธ๋“ค๋กœ PC ๊ณ„์‚ฐ + instruction b Fetch ์ˆ˜ํ–‰
  3. instruction b๋Š” a์™€ ๊ฒน์ณ์„œ ์‹คํ–‰๋˜๊ธฐ ์‹œ์ž‘ํ•จ

โœ… PC ์—ฐ์‚ฐ๊ณผ Fetch๊ฐ€ ๊ฐ™์€ ์‹ธ์ดํด ์•ˆ์—์„œ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ,
๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ

โ€ผ๏ธ SEQ โ†’ SEQโบ

-Circuit retiming ๊ธฐ๋ฒ• ์‚ฌ์šฉ

  • ๋ฆฌํƒ€์ด๋ฐ(retiming): ํšŒ๋กœ์˜ ๋…ผ๋ฆฌ์  ๋™์ž‘์€ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ƒํƒœ ์š”์†Œ(๋ ˆ์ง€์Šคํ„ฐ)์˜ ์œ„์น˜๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ธฐ์ˆ 

โ˜‘๏ธ ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ ์‚ฝ์ž…

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

๐Ÿ”ฉ Pipeline ๋ ˆ์ง€์Šคํ„ฐ ๊ตฌ์กฐ (F, D, E, M, W)

๊ฐ ๋ช…๋ น์–ด๊ฐ€ ๋‹ค์Œ ์Šคํ…Œ์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋Š” Pipeline Register์— ์ €์žฅ๋œ๋‹ค.

๋ ˆ์ง€์Šคํ„ฐํฌํ•จ ์ •๋ณด
Fํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ์˜ ์˜ˆ์ธก๊ฐ’์„ ์ €์žฅ
Dํ•ด๋… ๋‹จ๊ณ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ตœ๊ทผ์— ์„ ์ž…ํ•œ ์ธ์ŠคํŠธ๋Ÿญ์…˜์— ๊ด€ํ•œ ์ •๋ณด ์ €์žฅ
E๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด๋“ค์ธ ๊ฐ’, ๊ฐ€์žฅ ์ตœ๊ทผ์— ํ•ด๋…ํ•œ ์ธ์ŠคํŠธ๋Ÿญ์…˜์— ๊ด€ํ•œ ์ •๋ณด ์ €์žฅ
M๊ฐ€์žฅ ์ตœ๊ทผ์— ์‹คํ–‰ํ•œ ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ ๊ฒฐ๊ณผ ๋ฐ ๋ถ„๊ธฐ์กฐ๊ฑด, ๋ถ„๊ธฐ ๋ชฉ์ ์ง€์— ๊ด€ํ•œ ์ •๋ณด ์ €์žฅ
W๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋ก ํ•  ๊ณ„์‚ฐ ๊ฒฐ๊ณผ์™€ ret ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์œ„ํ•œ ๋ฆฌํ„ด์ฃผ์†Œ ์ €์žฅ

๊ฐ Pipeline Register๋Š” ํด๋Ÿญ ์ƒ์Šน ์‹œ์ ์— ์—…๋ฐ์ดํŠธ๋˜๋ฉฐ, ๋ช…๋ น์–ด๋“ค์ด ์Šคํ…Œ์ด์ง€ ๊ฐ„ ์ •ํ™•ํžˆ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.


๐Ÿ“Œ ์‹ ํ˜ธ์˜ ์žฌ๋ฐฐ์น˜ ๋ฐ ์žฌ๋ช…๋ช…

PIPEโˆ’๋Š” SEQ, SEQโบ์™€ ๋‹ฌ๋ฆฌ ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๊ฐ€ ๋™์‹œ์— ํŒŒ์ดํ”„๋ผ์ธ์„ ๋”ฐ๋ผ ํ๋ฅด๋„๋ก ์„ค๊ณ„๋œ ๊ตฌ์กฐ์ด๋‹ค.
์ฆ‰, ๊ฐ ๋ช…๋ น์–ด๊ฐ€ ๋™์ผํ•œ ์‹ ํ˜ธ ์ด๋ฆ„์„ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,
์ •ํ™•ํ•œ ์‹ ํ˜ธ ๊ตฌ๋ถ„ ๋ฐ ๋ช…์‹œ์  ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ ๊ตฌ์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค.

โ˜‘๏ธ ํŒŒ์ดํ”„๋ผ์ธ ์‹ ํ˜ธ ๋ช…๋ช… ๊ทœ์น™

  • ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋˜๋Š” ์‹ ํ˜ธ๋Š” ํ•ด๋‹น ๋ ˆ์ง€์Šคํ„ฐ ์ด๋ฆ„์˜ ๋Œ€๋ฌธ์ž ์ ‘๋‘์–ด๋ฅผ ๋ถ™์ธ๋‹ค:

    • ์˜ˆ: D_stat, E_stat, M_stat, W_stat
  • ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์—์„œ ๋ฐฉ๊ธˆ ๊ณ„์‚ฐ๋œ ์‹ ํ˜ธ๋Š” ์†Œ๋ฌธ์ž ์ ‘๋‘์–ด๋ฅผ ๋ถ™์ธ๋‹ค:

    • ์˜ˆ: f_stat (Fetch), m_stat (Memory)
  • ํ”„๋กœ์„ธ์„œ ์ „์ฒด ์ƒํƒœ (Stat)๋Š” W ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Writeback ๋‹จ๊ณ„์—์„œ ๊ฒฐ์ •๋œ๋‹ค.

    • stat๋Š” ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋ช…๋ น์–ด ์‹คํ–‰ ๋„์ค‘ ํ•ด๋‹น ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ์ด๋‹ค.
    • ์ฆ‰ ๋งŒ์•ฝ ์–ด๋–ค ๋‹จ๊ณ„์—์„œ(์˜ˆ๋ฅผ ๋“ค์–ด, decode ๋‹จ๊ณ„) SADR/SINS ๋“ฑ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋‹จ ๋ฌด์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ„ ๋’ค, write_back์˜ stat ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค.

๐Ÿ”’ ๋ช…๋ น์–ด ์ •๋ณด ์ผ๊ด€์„ฑ ์œ ์ง€ ์›์น™

  • SEQโบ์—์„œ๋Š” dstE, dstM ๋“ฑ์˜ ์‹ ํ˜ธ๋ฅผ ๋ฐ”๋กœ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ,
  • PIPEโˆ’์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ชฉ์ ์ง€ ์ •๋ณด๋„ ํŒŒ์ดํ”„๋ผ์ธ์„ ํƒ€๊ณ  ํ๋ฅด๋„๋ก ํ•œ๋‹ค.

๐Ÿ“Œ Why?:

  • Writeback ์‹œ์ ์—์„œ **๊ฐ’(valE, valM)**๊ณผ **๋ ˆ์ง€์Šคํ„ฐ ID(dstE, dstM)**๊ฐ€ ๊ฐ™์€ ๋ช…๋ น์–ด์— ์†ํ•œ ๊ฐ’์ด์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ์—‰๋šฑํ•œ ๋ ˆ์ง€์Šคํ„ฐ์— ์“ฐ๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

โœ… ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด์— ๊ด€๋ จ๋œ ๋ชจ๋“  ์ •๋ณด๋Š” ๋™์ผํ•œ ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ์— ๋‹ด์•„์„œ ํ๋ฅด๊ฒŒ ํ•œ๋‹ค.


๐Ÿ”ง Select A ๋ธ”๋ก

  • SEQ, SEQโบ์—๋Š” valP ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜จ ๊ฐ’์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” Data ๋ธ”๋ก์ด ์žˆ์—ˆ์Œ
  • PIPEโˆ’์—์„œ๋Š” ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  Decode ์Šคํ…Œ์ด์ง€์— "Select A" ๋ธ”๋ก์„ ๋„์ž…ํ•จ

Select A์˜ ๋™์ž‘

  • valP (D ๋ ˆ์ง€์Šคํ„ฐ๋กœ๋ถ€ํ„ฐ) ๋˜๋Š” Register File์—์„œ ์ฝ์€ ๊ฐ’์„ ์„ ํƒํ•˜์—ฌ valA ์ƒ์„ฑ
  • valA๋งŒ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ํ•„์š”ํ•œ ์Šคํ…Œ์ด์ง€์—์„œ ์‚ฌ์šฉํ•จ
    ์ฆ‰, ๋‘˜ ๋‹ค ๋„˜๊ธฐ๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋„˜๊ธด๋‹ค !

์žฅ์ 

  • ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ์–‘ ์ค„์–ด๋“ฆ โ†’ ํ•˜๋“œ์›จ์–ด ์ €์žฅ ์šฉ๋Ÿ‰ ์ถ•์†Œ ๋ฐ ์„ค๊ณ„ ๊ฐ„์†Œํ™”
  • ๋ถˆํ•„์š”ํ•œ ์‹ ํ˜ธ ๋ถ„์‚ฐ ๋ฐฉ์ง€ โ†’ ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ์— ํ•„์š”ํ•œ ๊ฐ’๋งŒ ๋ณด๋ƒ„

๐Ÿ”„ ์ œ์–ด ์˜์กด์„ฑ ์ฒ˜๋ฆฌ

PC ๊ฐ’ ์ถ”์ •

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

๋‹ค๋งŒ, ์ด๋Ÿฐ ๋ชฉ์ ์„ ์œ„ํ•ด์„œ๋Š” ํ˜„์žฌ ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์„ ์ž…ํ•œ ์งํ›„ ๋ฐ”๋กœ ๋‹ค์Œ ์„ ์ž…ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋ชฉํ‘œ:

  • ๋งค ์‹ธ์ดํด๋งˆ๋‹ค ์ƒˆ๋กœ์šด Fetch๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•จ

๋ฌธ์ œ:

  • ์กฐ๊ฑด ๋ถ„๊ธฐ(jXX)๋Š” **์‹คํ–‰ ๊ฒฐ๊ณผ(๋ถ„๊ธฐ ์—ฌ๋ถ€)**๋ฅผ Execute ์Šคํ…Œ์ด์ง€์—์„œ์•ผ ์•Œ ์ˆ˜ ์žˆ์Œ
  • ret์€ return ์ฃผ์†Œ๋ฅผ Memory ์Šคํ…Œ์ด์ง€์—์„œ์•ผ ์•Œ ์ˆ˜ ์žˆ์Œ

ํ•ด๊ฒฐ ์ „๋žต:

  1. ๋ถ„๊ธฐ ์˜ˆ์ธก(branch prediction) ์‚ฌ์šฉ
  2. ret์€ ์˜ˆ์ธก ๋ถˆ๊ฐ€ โ†’ stall ๋ฐœ์ƒ ํ—ˆ์šฉ

๋ถ„๊ธฐ ์˜ˆ์ธก ์ •์ฑ…

  • ์กฐ๊ฑด ๋ถ„๊ธฐ(jXX)๋Š” ํ•ญ์ƒ taken์œผ๋กœ ์˜ˆ์ธก
    • ์ฆ‰, ๋‹ค์Œ PC๋Š” valC๋กœ ์„ค์ •
  • ์ด ์˜ˆ์ธก์ด ํ‹€๋ฆฌ๋ฉด โ†’ ๋‚˜์ค‘์— ํŒŒ์ดํ”„๋ผ์ธ์„ flushํ•˜๊ณ  ๋‹ค์‹œ fetchํ•จ

ret ์ฒ˜๋ฆฌ

  • return address๋Š” ์Šคํƒ ๊ผญ๋Œ€๊ธฐ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ธก ๋ถˆ๊ฐ€
  • ret์ด Writeback์„ ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์ดํ›„ ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ

Fetch ์Šคํ…Œ์ด์ง€

์ฃผ์š” ๋ธ”๋ก:

  • Select PC:

    • instruction memory์—์„œ ์‚ฌ์šฉํ•  ์ฃผ์†Œ ์„ ํƒ

    • ์„ ํƒ์ง€:

      1. ์˜ˆ์ธก๋œ PC (predicted_pc)
      2. ์ด์ „ ๋ถ„๊ธฐ ๋ช…๋ น์–ด์˜ valP (M_valA)
      3. ret ๋ช…๋ น์–ด์˜ return address (W_valM)
  • Predict PC:

    • ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ ์˜ˆ์ธก
    • ์กฐ๊ฑด ๋ถ„๊ธฐ๋Š” ํ•ญ์ƒ taken โ†’ valC ๋ฐ˜ํ™˜
    • ๊ทธ ์™ธ๋Š” valP ๋ฐ˜ํ™˜
  • F ๋ ˆ์ง€์Šคํ„ฐ:

    • ์˜ˆ์ธก๋œ PC(predicted_pc)๋ฅผ ์ €์žฅํ•ด ๋‹ค์Œ Fetch ๊ธฐ์ค€ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉ

PIPEโˆ’๋Š” SEQโบ์™€๋Š” ๋‹ฌ๋ฆฌ ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๊ฐ€ ๋™์‹œ์— ํ๋ฅด๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—,
์‹ ํ˜ธ์˜ ๋ช…ํ™•ํ•œ ๊ตฌ๋ถ„, ์˜ˆ์ธก ๊ธฐ๋ฐ˜์˜ ์ œ์–ด ํ๋ฆ„ ์ฒ˜๋ฆฌ, ์ผ๊ด€๋œ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ด๋‹ค.

๐Ÿงจ ํ•ด์ €๋“œ(Hazard)์™€ ํ•ด๊ฒฐ ์ „๋žต

์œ„์—์„œ ๋ณธ ๊ฒƒ ์ฒ˜๋Ÿผ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋„์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ์—ฐ์†๋˜๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜๋“ค ๊ฐ„์— ์˜์กด์„ฑ์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํŒŒ์ดํ”„๋ผ์ธ์ด ์˜์กด์„ฑ์— ์˜ํ•ด ์ž˜๋ชป๋œ ๊ณ„์‚ฐ์„ ์•ผ๊ธฐํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„ ๋•Œ ์ด๋“ค์„ ํ•ด์ €๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๐Ÿ”ถ Data Hazard

ํ•œ๊ฐœ์˜ ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์Œ์— ์˜ค๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์˜์กด์„ฑ์ด ๋ฐœ์ƒํ•œ๋‹ค.

ํ•œ ๋ช…๋ น์–ด๊ฐ€ ์•„์ง ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์— ์“ฐ๊ธฐ ์ „์—, ๋‹ค์Œ ๋ช…๋ น์–ด๊ฐ€ ๊ทธ ๊ฐ’์„ ํ•„์š”๋กœ ํ•  ๋•Œ ๋ฐœ์ƒ

์˜ˆ์‹œ:

1: mrmovq 0(%rbx), %rax   # ์•„์ง %rax์— ๊ฐ’์ด ์•ˆ ๋“ค์–ด๊ฐ
2: addq %rax, %rcx        # %rax๋ฅผ ์ฝ์œผ๋ ค ํ•จ โ†’ forwarding or stall ํ•„์š”

ํ•ด๊ฒฐ:

  • Forwarding: ๊ฐ’์ด ์•„์ง ์“ฐ๊ธฐ ์ „ ๋‹จ๊ณ„์— ์žˆ์–ด๋„ ALU ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ๋‹ค์Œ ๋ช…๋ น์–ด์— ์ œ๊ณต
  • Stalling: ๊ฐ’์„ ๊ธฐ๋‹ค๋ฆด ๋•Œ๊นŒ์ง€ Decode ๋‹จ๊ณ„๋ฅผ ๋ฉˆ์ถ”๊ณ  nop์„ ์‚ฝ์ž…

๐Ÿ”ถ Control Hazard

ํ•œ๊ฐœ์˜ ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ๋‹ค์Œ์— ๋”ฐ๋ผ์˜ค๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ œ์–ด ์˜์กด์„ฑ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋ถ„๊ธฐ ๋ช…๋ น์–ด (jXX, call, ret)์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์— ๋‹ค์Œ ๋ช…๋ น์–ด์˜ PC๋ฅผ ์•Œ ์ˆ˜ ์—†์Œ

ํ•ด๊ฒฐ:

  • ์ •์  ๋ถ„๊ธฐ ์˜ˆ์ธก (์˜ˆ: ์•ˆ ํŠ„๋‹ค๊ณ  ๊ฐ€์ •)
  • ๋ถ„๊ธฐ ์‹คํŒจ ์‹œ flush (D, E ๋‹จ๊ณ„์— nop ์‚ฝ์ž…)

ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰ ์˜ˆ์‹œ

โ˜‘๏ธ ํŠน์ง•

  • ์ค‘๊ฐ„์— ์„ธ๊ฐœ์˜ nop ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์กด์žฌํ•œ๋‹ค.

๐Ÿšจ ๋ฌธ์ œ

  • ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • nop ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ๋ฐ์ดํ„ฐ ์˜์กด์„ฑ์„ ๊ฐ–๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜๋“ค ๊ฐ„์— ์‹œ๊ฐ„์ง€์—ฐ์„ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ

โ˜‘๏ธ ํŠน์ง•

  • nop ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด 2๊ฐœ๋กœ ์ค„์—ˆ๋‹ค.

๐Ÿšจ ๋ฌธ์ œ

  • ๋ ˆ์ง€์Šคํ„ฐ %rax์— ์ž˜๋ชป๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.
    • add ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์‹คํ–‰๋˜๋Š” ์‚ฌ์ดํด์—์„œ %rax ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋„ฃ๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ

โ˜‘๏ธ ํŠน์ง•

  • nop ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด 1๊ฐœ๋กœ ์ค„์—ˆ๋‹ค.

๐Ÿšจ ๋ฌธ์ œ

  • ๋ ˆ์ง€์Šคํ„ฐ %rax, %rdx ๋ชจ๋‘ ์ž˜๋ชป๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.
    • add ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์‹คํ–‰๋˜๋Š” ์‚ฌ์ดํด์—์„œ %rax, %rdx ๋ชจ๋‘ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ

โ˜‘๏ธ ํŠน์ง•

  • nop ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿšจ ๋ฌธ์ œ

  • ์—ฌ์ „ํžˆ ๋ ˆ์ง€์Šคํ„ฐ %rax, %rdx ๋ชจ๋‘ ์ž˜๋ชป๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.
    • add ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์‹คํ–‰๋˜๋Š” ์‚ฌ์ดํด์—์„œ %rax, %rdx ๋ชจ๋‘ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ

โœ‹๐Ÿป ํ•ด์ €๋“œ ํšŒํ”ผ by Stalling

๐Ÿ”น Stalling์ด๋ž€?

Stalling: ํ•ด์ €๋“œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ Decode ๋‹จ๊ณ„์—์„œ ์ •์ง€์‹œํ‚ค๊ณ , ํ›„์† ๋ช…๋ น์–ด๋“ค๋„ ์ •์ง€์‹œ์ผœ ์†Œ์Šค ์˜คํผ๋žœ๋“œ๋ฅผ ์ œ๋Œ€๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์„๋•Œ๊นŒ์ง€ ๋ฉˆ์ถ”๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“Œ ์Šคํ†จ ์กฐ๊ฑด ๊ฐ์ง€

  • ํŒŒ์ดํ”„๋ผ์ธ ์ปจํŠธ๋กค ๋กœ์ง์€ Decode ๋‹จ๊ณ„์— ์žˆ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์†Œ์Šค ๋ ˆ์ง€์Šคํ„ฐ(%rdx, %rax)๊ฐ€
    • Execute, Memory, Write-back ์ค‘ ์–ด๋А ๋‹จ๊ณ„์—์„œ๋ผ๋„ ๊ฐฑ์‹ ๋  ์˜ˆ์ •์ด๋ผ๋ฉด,
  • ๊ทธ ๋ช…๋ น์–ด๋ฅผ Stallํ•œ๋‹ค.

๐Ÿ•“ ์˜ˆ์‹œ: addq ๋ช…๋ น์–ด

  • Decode ๋‹จ๊ณ„์—์„œ addq๊ฐ€ ์žˆ์„ ๋•Œ,
    • ์•ž์„  ๋ช…๋ น์–ด๊ฐ€ %rdx ๋˜๋Š” %rax๋ฅผ Write ์ค‘์ด๋ผ๋ฉด โ†’ addq๋Š” Decode์— ๋ฉˆ์ถ˜๋‹ค.
    • prog2์—์„œ๋Š” 1 ์‚ฌ์ดํด ๋™์•ˆ ์Šคํ†จ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿšซ Fetch๋„ ๋ฉˆ์ถค

  • Decode๊ฐ€ ๋ฉˆ์ท„๋‹ค๋ฉด Fetch๋„ ๋ฉˆ์ถฐ์•ผ ํ•œ๋‹ค.
  • ์ด๋•Œ๋Š” Program Counter(PC)๋ฅผ ๊ณ ์ •์‹œ์ผœ์„œ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ fetchํ•˜๊ฒŒ ํ•œ๋‹ค.

๐Ÿ’จ ๋ฒ„๋ธ”(Bubble) ์ฃผ์ž…

Bubble์€ ๋™์ ์œผ๋กœ ์‚ฝ์ž…๋œ nop ๋ช…๋ น์–ด์™€ ๊ฐ™๋‹ค
๋ ˆ์ง€์Šคํ„ฐ, ๋ฉ”๋ชจ๋ฆฌ, Condition Codes, ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ

โœ”๏ธ ์™œ ๋ฒ„๋ธ”์ด ํ•„์š”ํ•œ๊ฐ€?

  • Decode์—์„œ ๋ช…๋ น์–ด๊ฐ€ ๋ฉˆ์ท„๋‹ค๋ฉด,
    • Execute ๋‹จ๊ณ„๋Š” ๋น„๊ฒŒ ๋จ
    • ์ด๋•Œ ํ•ด๋‹น ์ž๋ฆฌ์— Bubble์„ ์‚ฝ์ž…ํ•ด์„œ ํŒŒ์ดํ”„๋ผ์ธ ํ๋ฆ„์„ ์œ ์ง€ํ•จ

๐Ÿ” ๋ฐ˜๋ณต ๋™์ž‘

  • Decode๊ฐ€ ๋ฉˆ์ถฐ ์žˆ๋Š” ๋™์•ˆ๋งˆ๋‹ค โ†’ Execute์— Bubble ์‚ฝ์ž…

๐Ÿ“‰ Stalling์˜ ํ•œ๊ณ„

  • ์Šคํ†จ๋ง ๊ธฐ๋ฒ•์€ ๊ตฌํ˜„์ด ์‰ฝ๋‹ค.
    • ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์Œ
    • ์ด์œ : ์—ฐ์†๋œ ๋ช…๋ น์–ด ๊ฐ„์— ๋ ˆ์ง€์Šคํ„ฐ ์‚ฌ์šฉ์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์„œ ์Šคํ†จ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•จ

โœ‹๐Ÿป ํ•ด์ €๋“œ ํšŒํ”ผ by Forwarding

๐Ÿ”น Forwarding์ด๋ž€?

**Forwarding(๋˜๋Š” Bypassing)**์€ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋’ค์ชฝ์—์„œ ์•ž์ชฝ์œผ๋กœ ์ง์ ‘ ์ „๋‹ฌํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ฆ‰, ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์ด ์•„์ง ์•ˆ ์จ์กŒ๋”๋ผ๋„, ํ•ด๋‹น ๊ฐ’์ด ์–ด๋”˜๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ์— ์žˆ์œผ๋ฉด ๊ทธ ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ „๋‹ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ํฌ์›Œ๋”ฉ์€ ๊ธฐ๋ณธ ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ์— ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ๊ณผ ์ œ์–ด๋กœ์ง์„ ํ•„์š”๋กœ ํ•œ๋‹ค.

๐Ÿ•“ ์˜ˆ์‹œ: addq ๋ช…๋ น์–ด

์ƒํ™ฉ:

  • addq ๋ช…๋ น์–ด๊ฐ€ Decode ๋‹จ๊ณ„์—์„œ %rax๋ฅผ ์ฝ์œผ๋ ค ํ•จ
  • ๊ทธ๋Ÿฐ๋ฐ Write-back ๋‹จ๊ณ„์— %rax์— ๊ฐ’์„ ์“ธ ์˜ˆ์ •์ž„

โœ… ํ•ด๊ฒฐ์ฑ…:

  • ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  โ†’ Write-back ๋‹จ๊ณ„์˜ W_valE ๊ฐ’์„ valB๋กœ ์‚ฌ์šฉ!
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ stall ์—†์ด ๋ช…๋ น์–ด๊ฐ€ ์ง„ํ–‰๋จ
๋ช…๋ น ์ข…๋ฅ˜๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„ํฌ์›Œ๋”ฉ ๊ฐ€๋Šฅ ์‹œ์ ๋Œ€ํ‘œ ๋ช…๋ น์–ด์˜ˆ์‹œ
์—ฐ์‚ฐ ๊ณ„์—ด
(ALU ์‚ฌ์šฉ)
E ๋‹จ๊ณ„E ๋‹ค์Œ ์‚ฌ์ดํด๋ถ€ํ„ฐ
(= D์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
addq, irmovq, rmmovq, OPq ๋“ฑaddq %rbx, %rax
irmovq $10, %rbx
๋ฉ”๋ชจ๋ฆฌ ์ฝ๊ธฐ ๊ณ„์—ดM ๋‹จ๊ณ„M ๋‹ค์Œ ์‚ฌ์ดํด๋ถ€ํ„ฐ
(= D์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
mrmovq, popqmrmovq 0(%rdx), %rax

Forwarding vs Stalling ๋น„๊ต

ํ•ญ๋ชฉForwardingStalling
๋™์ž‘ ๋ฐฉ์‹๋’ค ๋‹จ๊ณ„์—์„œ ์•ž ๋‹จ๊ณ„๋กœ ๊ฐ’ ์ „๋‹ฌ๋ช…๋ น์–ด ์ •์ง€ & bubble ์‚ฝ์ž…
์„ฑ๋Šฅโœ… ๋น ๋ฆ„ (stall ์—†์Œ)โŒ ๋А๋ฆผ (stall ๋ฐœ์ƒ)
๊ตฌํ˜„ ๋ณต์žก๋„๋†’์Œ (ํฌ์›Œ๋”ฉ ํšŒ๋กœ ํ•„์š”)๋‚ฎ์Œ (๋‹จ์ˆœ stall ๋กœ์ง)
ํ™œ์šฉ ์˜ˆ์‹œprog2~prog4prog2~prog4 (๋ฒ„๋ธ” ์‚ฝ์ž… ํ•„์š” ์‹œ)

โœ‹๐Ÿป ํ•ด์ €๋“œ ํšŒํ”ผ by Load/Use Hazard์™€

๐Ÿงจ Forwarding๋งŒ์œผ๋กœ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

  • ์˜ˆ: mrmovq๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ %rax๋กœ ๊ฐ’์„ ๋กœ๋“œํ•˜๊ณ ,
    • ๋ฐ”๋กœ ๋‹ค์Œ ๋ช…๋ น์–ด(addq)๊ฐ€ %rax๋ฅผ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•˜๋ฉด?
  • ๋ฌธ์ œ: mrmovq๋Š” ๋ฉ”๋ชจ๋ฆฌ(M) ๋‹จ๊ณ„์—์„œ์•ผ ๊ฐ’์ด ์œ ํšจํ•œ๋ฐ,
    • addq๋Š” Decode(D) ๋‹จ๊ณ„์—์„œ ๊ทธ ๊ฐ’์„ ํ•„์š”๋กœ ํ•จ
  • ์ด๊ฑด ๋งˆ์น˜ ๋ฏธ๋ž˜์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, forwarding๋งŒ์œผ๋กœ๋Š” ํ•ด๊ฒฐ โŒ

โœ… ํ•ด๊ฒฐ์ฑ…: Stalling + Forwarding ์กฐํ•ฉ โ†’ Load Interlock

  • mrmovq๊ฐ€ Execute(E) ๋‹จ๊ณ„์ผ ๋•Œ, ์ปจํŠธ๋กค ๋กœ์ง์ด ๋‹ค์Œ ๋ช…๋ น์–ด(addq)๊ฐ€ ๊ทธ ๊ฐ’์„ ํ•„์š”๋กœ ํ•œ๋‹ค๊ณ  ํŒ๋‹จ
  • Decode(D) ๋‹จ๊ณ„์˜ addq๋ฅผ 1 ์‚ฌ์ดํด ์Šคํ†จ
  • Execute(E)์—๋Š” Bubble ์‚ฝ์ž…
  • ๊ทธ ๋‹ค์Œ ์‚ฌ์ดํด์— Memory(M) ๋‹จ๊ณ„์—์„œ %rax ๊ฐ’์ด ๋‚˜์˜ค๋ฉด โ†’ forwarding์œผ๋กœ ์ „๋‹ฌ

๐Ÿ“Œ Load Interlock

  • Forwarding์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Load-Use Hazard๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•
  • bubble 1๊ฐœ๋งŒ ์‚ฝ์ž…ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ตœ์†Œํ•œ์˜ stall๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
  • forwarding๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ๋ฅผ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

โœ… ํ•ด์ €๋“œ ํšŒํ”ผ ์š”์•ฝ

โ€œForwarding + Load Interlock ์กฐํ•ฉ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค!โ€

  • Forwarding์€ ๋Œ€๋ถ€๋ถ„์˜ ํ•ด์ €๋“œ๋ฅผ ํ•ด๊ฒฐ
  • Load-Use Hazard๋Š” ์˜ˆ์™ธ โ†’ Load Interlock (stall + forward) ํ•„์š”
  • bubble ์‚ฝ์ž…์€ ์ตœ์†Œ 1๊ฐœ โ†’ ๋†’์€ throughput ์œ ์ง€ ๊ฐ€๋Šฅ ๐Ÿ’ช

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 8์›” 5์ผ

ํ•ด์ €๋“œ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋Š”๋ฐ ใ… ใ… ใ…  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ