๋งค์ผ๋ฉ์ผ ๋ฐฑ์๋ ์ง๋ฌธ์ ์ฐธ๊ณ ํด ๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค.
์ค๋ฅ๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ํผ๋๋ฐฑ ์ฃผ์๋ฉด ๋ฐ๋ก ๋ฐ์ํ๊ฒ ์ต๋๋ค..!
์์ํ๊ธฐ์ ์
"์ด๋ค ์ฝ๋๊ฐ ์ CPU์์ ๋ ๋น ๋ฅด๊ฒ ์คํ๋๋ ๊ฑธ๊น?" ์ ๋ํ ์ด์ ์ค ํ๋๋ ๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋์ด๋ผ๋ CPU์ ๋์ ์๋ฆฌ ๋๋ถ์
=> ๋ฐฑ์๋๊ด๋ จ ์ ๋ฌด๋ฅผ ํ๋ค๋ฉด ๋์ ์ฑ๋ฅ๊ณผ ํจ์จ์ ์ํด ๋ก์ฐ๋ ๋ฒจ ์์คํ ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ํนํ ์ค์!!
๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋์ด๋?
๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋(instruction pipelining) ์ CPU๊ฐ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๋์์ ๊ฒน์ณ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ฐ ๋ช ๋ น์ด๋ฅผ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋ถํ ํ์ฌ ์ฒ๋ฆฌํ๋ ๊ธฐ์ ์
=> ์ฆ, ํ๋์ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋์, ๋ค์ ๋ช ๋ น์ด์ ์ผ๋ถ๋ ๋ฏธ๋ฆฌ ์ํํด ์ ์ฒด ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ด ํต์ฌ
์ ํต์ ์ธ CPU๋ ํ ๋ฒ์ ํ๋์ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด, ํ์ดํ๋ผ์ธ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ CPU๋ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋จ๊ณ์์ ๋์์ ์ฒ๋ฆฌํ ์ ์์

์ ๊ทธ๋ฆผ์ ์ดํด๋ณด๋ฉด
๋ค์ฏ ๊ฐ์ ๋ช ๋ น์ด๊ฐ ๋์์ ์คํ๋๊ณ ์๋๋ฐ ํ๋์ ๋ช ๋ น์ด๋ ๋ค์ฏ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์คํ๋๊ณ , ์ด๋ ํ๋ก์ธ์์์๋ ์ฒซ ๋ฒ์งธ ๋ช ๋ น์ด์ IF๊ฐ ์คํ๋๋ฉด ID๋ฅผ ์คํํ๋ ๋์์ ๋ค์ ๋ช ๋ น์ด์ IF๋ฅผ ์คํํจ
๊ทธ ๋ค์์๋ ์ฒซ ๋ฒ์งธ์ EX, ๋ ๋ฒ์งธ์ ID, ์ธ ๋ฒ์งธ์ IF๋ฅผ ์คํํ๋๊ฑธ ๋ณผ ์ ์์
ํ์ดํ๋ผ์ด๋์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
- IF(Instruction Fetch) : ๋ช ๋ น์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ ธ์ด
- ID(Instruction Decode) : ๋ช ๋ น์ด ํด์ ๋ฐ ํ์ํ ๋ ์ง์คํฐ ์๋ณ
- EX(Execute) : ALU ์ฐ์ฐ ์ํ
- MEM(Memory Access) : ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ํ
- WB(Write Back) : ๊ฒฐ๊ณผ๋ฅผ ๋ ์ง์คํฐ์ ์ ์ฅ
ํ์ดํ๋ผ์ด๋์ ํ๊ณ : Pipeline Hazard
ํ์ดํ๋ผ์ด๋์ ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ๋ช ๋ น์ด๊ฐ ๊ฒน์น๋ฉด์ ๋งค ์ฌ์ดํด๋ง๋ค ๋ช ๋ น์ด๊ฐ ํ๋์ฉ ๋๋์ผํจ
ํ์ง๋ง, ์๋ก ๋ค๋ฅธ ๋ช
๋ น์ด๊ฐ ์ถฉ๋ํ๊ฑฐ๋, ์์ธก์ด ๋น๋๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ ์ด๋ฅผ ํ์ดํ๋ผ์ธ ์ํ(Pipeline Hazard) ์ด๋ผ๊ณ ํจ
(๋์ฒด๋ก ํ์ดํ๋ผ์ด๋์ ๋์ ์ฑ๋ฅ์ ๊ฐ์ ธ์ค์ง๋ง, ๋๋ก๋ ์ฑ๋ฅ ํฅ์์ ์คํจํ๊ธฐ๋ํจ)
Data Hazard (๋ฐ์ดํฐ ์ํ)
๋ฐ์ดํฐ ์ํ์ ๋ฐ์ดํฐ ์์กด์ ์ธ ๋ ๋ช ๋ น์ด๋ฅผ ๋์์ ์คํํ๋ ๊ฒฝ์ฐ, ํ์ดํ๋ผ์ธ์ด ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ์ ์๋ฏธํจ
1. ADD R1, R2, R3 ; R1 = R2 + R3
2. SUB R4, R1, R5 ; R4 = R1 - R5 (R1์ ์ ์ฐ์ฐ ๊ฒฐ๊ณผ)
์ ์์ ์์ 2๋ฒ์งธ ๋ช
๋ น์ด๋ R1 ๊ฐ์ ์ฌ์ฉํ์ง๋ง, ์์ง ์ฒซ ๋ฒ์งธ ๋ช
๋ น์ด์ ๊ฒฐ๊ณผ๊ฐ R1์ ๋ฐ์๋์ง ์์์ ์ ์์
=> ํ์ดํ๋ผ์ธ ์ง์ฐ์ด ํ์ํจ (Forwarding - ๋ฐ์ดํฐ ์ ๋ฌ, Stalling - ํ์ดํ๋ผ์ธ ์ผ์ ์ ์ง)
Control Hazard (์ ์ด ์ํ)
์ ์ด ์ํ์ ๋ถ๊ธฐ(branch)๋ ์กฐ๊ฑด๋ฌธ ๋ฑ์ผ๋ก ์ธํด ๋ค์์ ์คํํ ๋ช ๋ น์ด๊ฐ ๋ฌด์์ธ์ง ๊ฒฐ์ ๋์ง ์์ ํ์ดํ๋ผ์ธ์ด ๋ฉ์ถ๊ฒ ๋๋ ๊ฒ์ ์๋ฏธํจ
BEQ R1, R2, label ; R1 == R2์ผ ๋ label๋ก ์ ํ
์์ ๊ฒฝ์ฐ, ๋ถ๊ธฐ ์กฐ๊ฑด์ด ํ๊ฐ๋๊ธฐ ์ ๊น์ง ๋ค์์ ์ด๋ค ๋ช ๋ น์ด๋ฅผ ์คํํด์ผ ํ ์ง ์ ์ ์์
=> ๋ถ๊ธฐ ์์ธก(branch prediction), delay slot, ํ์ดํ๋ผ์ธ flush ๋ฑ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์
(ํ์ง๋ง, ์์ธก์ ์คํจํ๋ฉด ๊ณ์ฐ๋ ํ์ดํ๋ผ์ธ์ ๋ชจ๋ ๋ฒ๋ ค์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ์์ค์ด ํผ)
Pipeline Flush : ๋ถ๊ธฐ ์์ธก ์คํจ, Exception, ์ธํฐ๋ฝํธ ๋ฑ์ด ๋ฐ์ํ์ ๋ ํ์ดํ๋ผ์ธ ์์ ๋ค์ด๊ฐ ๋ช ๋ น์ด๋ค์ ๋ชจ๋ ๋ฒ๋ฆฌ๊ณ (flush) ์๋ก์ด ๋ช ๋ น์ด๋ก ํ์ดํ๋ผ์ธ์ ์ฌ์์ํ๋ ๊ฒ
Branch Prediction(๋ถ๊ธฐ ์์ธก) : ๋ถ๊ธฐ ๋ช ๋ น์ด(if, for, goto, switch ๋ฑ)๊ฐ ๋์์ ๋, ์ค์ ๋ก ๋ถ๊ธฐํ ์ง ์๋์ง๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํ๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํ์ดํ๋ผ์ธ์ ๋ฃ๋ ๊ธฐ๋ฒ
=> ์์ธก์ด ๋ง์ผ๋ฉด ํ์ดํ๋ผ์ธ ์ ์ ์งํ์ด์ง๋ง, ํ๋ฆฌ๋ฉด Pipeline Flush
Delay Slot : ๋ถ๊ธฐ ๋ช ๋ น์ด ๋ค์ ๋ช ๋ น์ด ํ๋๋ ๋ฌด์กฐ๊ฑด ์คํ๋๊ฒ ๊ฐ์ ๋ก ๋ณด์ฅํ๋ ๋ฐฉ์์
(๋ถ๊ธฐ๋ฌธ ๋ฐ๋ก ๋ฐ ํ ์ค๋ง Delay Slot์)
=> ํ์ดํ๋ผ์ธ flush ์ฌ์ด์ ํ์ดํ๋ผ์ธ์ด ๋๊ฒ๋๋ฏ๋ก ๋ญ๋น๋ฅผ ๋ง๊ธฐ ์ํด ์ฌ์ฉํ๋๋ฐ,
๋ถ๊ธฐ ๋ช ๋ น์ด ๋ค์์ ์ฌ ๋ช ๋ น์ด ํ๋๋ ๋ฌด์กฐ๊ฑด ์คํ๋ ๊ฑธ๋ก ๊ฐ์ ํ๊ณ , ์๋ฏธ ์๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ๋ ๋์ ์ค์ ๋ก ์คํํด๋ ๋๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ์ด๋๋ฉด ์ฑ๋ฅ ํฅ์์ด ๊ฐ๋ฅํจ
BEQ R1, R2, LABEL ; ๋ถ๊ธฐ
ADD R7, R8, R9 ; Delay Slot โ ๋ฌด์กฐ๊ฑด ์คํ๋จ โ ์ด์ฐจํผ ํด์ผ ๋ ์ฐ์ฐ์ ๋ฏธ๋ฆฌ ์ํ
์์ฒ๋ผ ๋ฌด์กฐ๊ฑด ์คํํด๋ ๊ด์ฐฎ์ ๋ช ๋ น์ด๋ฅผ Delay Slot์ ๋ฃ์ผ๋ฉด ํ์ดํ๋ผ์ธ ๋ญ๋น ์ค์ด๊ณ ์ฑ๋ฅ ํฅ์!!
(Delay Slot์ ๋ฃ์ ๋ช ๋ น์ด๋ ์์ ํ ๋ช ๋ น์ด์ฌ์ผ ํจ)
Structural Hazard (๊ตฌ์กฐ์ ์ํ)
๊ตฌ์กฐ์ ์ํ์ ํ ๋ช ๋ น์ด๊ฐ ์์์ ์ฌ์ฉํ๋ฉด, ํด๋น ์์์ด ํ์ํ ๋ค๋ฅธ ๋ช ๋ น์ด๋ ๋ฉ์ถ๊ฒ ๋์ด ํ์ดํ๋ผ์ธ์ด ์ ๋๋ก ์๋ํ์ง ์๋๊ฑธ ์๋ฏธํจ
์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ํ์ํ ๋ ๋ช ๋ น์ด๊ฐ ๋์์ MEM ๋จ๊ณ๋ฅผ ์ํํ๋ ค ํ๋ฉด ์ถฉ๋์ด ๋ฐ์
=> ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๋ณต์๋ก ๊ตฌ์ฑํ๊ฑฐ๋, ๋ช ๋ น์ด ์คํ ์์๋ฅผ ์กฐ์ ํด์ ํด๊ฒฐํ ์ ์์
ํ์ดํ๋ผ์ด๋์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
- CPU ์ฒ๋ฆฌ๋ ์ฆ๊ฐ (Throughput ํฅ์)
- ๋จ์ผ ๋ช
๋ น์ด ์ฒ๋ฆฌ ์๊ฐ์ ๊ทธ๋๋ก์ง๋ง, ์ ์ฒด ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ ๋จ์ถ
- ๋ณ๋ ฌ์ฑ๊ณผ ์๋ ํฅ์
๋จ์
- ๋ณต์กํ ํ๋์จ์ด ์ ์ด ๋ก์ง ํ์
- ํ์ดํ๋ผ์ธ ์ํ ์ฒ๋ฆฌ ๋น์ฉ ์กด์ฌ
- ๋ถ๊ธฐ ์์ธก ์คํจ ์ ํ์ดํ๋ผ์ธ flush ๋น์ฉ
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ๋ฃจํด์ ์ฌ์ฉํ ์์ ์ฒ๋ฆฌ๊ฐ ๊ธฐ์กด ์ค๋ ๋ ๋ฐฉ์๋ณด๋ค ๊ฐ๋ฒผ์ด ์ด์ (1) | 2025.06.30 |
---|---|
์ฟ ํค(Cookie)์ ์ธ์ (Session)์ ์ฐจ์ด (0) | 2025.06.27 |
์ฐธ์กฐ ์ง์ญ์ฑ์ ์๋ฆฌ๋? (0) | 2025.06.22 |
Go(Golang)์ด๋? (0) | 2025.06.06 |
Java ์ ์ถ๋ ฅ(I/O) ์์๋ณด๊ธฐ (0) | 2025.06.03 |
๋งค์ผ๋ฉ์ผ ๋ฐฑ์๋ ์ง๋ฌธ์ ์ฐธ๊ณ ํด ๊ฐ์ธ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค.
์ค๋ฅ๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ํผ๋๋ฐฑ ์ฃผ์๋ฉด ๋ฐ๋ก ๋ฐ์ํ๊ฒ ์ต๋๋ค..!
์์ํ๊ธฐ์ ์
"์ด๋ค ์ฝ๋๊ฐ ์ CPU์์ ๋ ๋น ๋ฅด๊ฒ ์คํ๋๋ ๊ฑธ๊น?" ์ ๋ํ ์ด์ ์ค ํ๋๋ ๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋์ด๋ผ๋ CPU์ ๋์ ์๋ฆฌ ๋๋ถ์
=> ๋ฐฑ์๋๊ด๋ จ ์ ๋ฌด๋ฅผ ํ๋ค๋ฉด ๋์ ์ฑ๋ฅ๊ณผ ํจ์จ์ ์ํด ๋ก์ฐ๋ ๋ฒจ ์์คํ ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ํนํ ์ค์!!
๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋์ด๋?
๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋(instruction pipelining) ์ CPU๊ฐ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๋์์ ๊ฒน์ณ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ฐ ๋ช ๋ น์ด๋ฅผ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋ถํ ํ์ฌ ์ฒ๋ฆฌํ๋ ๊ธฐ์ ์
=> ์ฆ, ํ๋์ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋์, ๋ค์ ๋ช ๋ น์ด์ ์ผ๋ถ๋ ๋ฏธ๋ฆฌ ์ํํด ์ ์ฒด ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ด ํต์ฌ
์ ํต์ ์ธ CPU๋ ํ ๋ฒ์ ํ๋์ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด, ํ์ดํ๋ผ์ธ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ CPU๋ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋จ๊ณ์์ ๋์์ ์ฒ๋ฆฌํ ์ ์์

์ ๊ทธ๋ฆผ์ ์ดํด๋ณด๋ฉด
๋ค์ฏ ๊ฐ์ ๋ช ๋ น์ด๊ฐ ๋์์ ์คํ๋๊ณ ์๋๋ฐ ํ๋์ ๋ช ๋ น์ด๋ ๋ค์ฏ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์คํ๋๊ณ , ์ด๋ ํ๋ก์ธ์์์๋ ์ฒซ ๋ฒ์งธ ๋ช ๋ น์ด์ IF๊ฐ ์คํ๋๋ฉด ID๋ฅผ ์คํํ๋ ๋์์ ๋ค์ ๋ช ๋ น์ด์ IF๋ฅผ ์คํํจ
๊ทธ ๋ค์์๋ ์ฒซ ๋ฒ์งธ์ EX, ๋ ๋ฒ์งธ์ ID, ์ธ ๋ฒ์งธ์ IF๋ฅผ ์คํํ๋๊ฑธ ๋ณผ ์ ์์
ํ์ดํ๋ผ์ด๋์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
- IF(Instruction Fetch) : ๋ช ๋ น์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ ธ์ด
- ID(Instruction Decode) : ๋ช ๋ น์ด ํด์ ๋ฐ ํ์ํ ๋ ์ง์คํฐ ์๋ณ
- EX(Execute) : ALU ์ฐ์ฐ ์ํ
- MEM(Memory Access) : ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ํ
- WB(Write Back) : ๊ฒฐ๊ณผ๋ฅผ ๋ ์ง์คํฐ์ ์ ์ฅ
ํ์ดํ๋ผ์ด๋์ ํ๊ณ : Pipeline Hazard
ํ์ดํ๋ผ์ด๋์ ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ๋ช ๋ น์ด๊ฐ ๊ฒน์น๋ฉด์ ๋งค ์ฌ์ดํด๋ง๋ค ๋ช ๋ น์ด๊ฐ ํ๋์ฉ ๋๋์ผํจ
ํ์ง๋ง, ์๋ก ๋ค๋ฅธ ๋ช
๋ น์ด๊ฐ ์ถฉ๋ํ๊ฑฐ๋, ์์ธก์ด ๋น๋๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ ์ด๋ฅผ ํ์ดํ๋ผ์ธ ์ํ(Pipeline Hazard) ์ด๋ผ๊ณ ํจ
(๋์ฒด๋ก ํ์ดํ๋ผ์ด๋์ ๋์ ์ฑ๋ฅ์ ๊ฐ์ ธ์ค์ง๋ง, ๋๋ก๋ ์ฑ๋ฅ ํฅ์์ ์คํจํ๊ธฐ๋ํจ)
Data Hazard (๋ฐ์ดํฐ ์ํ)
๋ฐ์ดํฐ ์ํ์ ๋ฐ์ดํฐ ์์กด์ ์ธ ๋ ๋ช ๋ น์ด๋ฅผ ๋์์ ์คํํ๋ ๊ฒฝ์ฐ, ํ์ดํ๋ผ์ธ์ด ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ์ ์๋ฏธํจ
1. ADD R1, R2, R3 ; R1 = R2 + R3
2. SUB R4, R1, R5 ; R4 = R1 - R5 (R1์ ์ ์ฐ์ฐ ๊ฒฐ๊ณผ)
์ ์์ ์์ 2๋ฒ์งธ ๋ช
๋ น์ด๋ R1 ๊ฐ์ ์ฌ์ฉํ์ง๋ง, ์์ง ์ฒซ ๋ฒ์งธ ๋ช
๋ น์ด์ ๊ฒฐ๊ณผ๊ฐ R1์ ๋ฐ์๋์ง ์์์ ์ ์์
=> ํ์ดํ๋ผ์ธ ์ง์ฐ์ด ํ์ํจ (Forwarding - ๋ฐ์ดํฐ ์ ๋ฌ, Stalling - ํ์ดํ๋ผ์ธ ์ผ์ ์ ์ง)
Control Hazard (์ ์ด ์ํ)
์ ์ด ์ํ์ ๋ถ๊ธฐ(branch)๋ ์กฐ๊ฑด๋ฌธ ๋ฑ์ผ๋ก ์ธํด ๋ค์์ ์คํํ ๋ช ๋ น์ด๊ฐ ๋ฌด์์ธ์ง ๊ฒฐ์ ๋์ง ์์ ํ์ดํ๋ผ์ธ์ด ๋ฉ์ถ๊ฒ ๋๋ ๊ฒ์ ์๋ฏธํจ
BEQ R1, R2, label ; R1 == R2์ผ ๋ label๋ก ์ ํ
์์ ๊ฒฝ์ฐ, ๋ถ๊ธฐ ์กฐ๊ฑด์ด ํ๊ฐ๋๊ธฐ ์ ๊น์ง ๋ค์์ ์ด๋ค ๋ช ๋ น์ด๋ฅผ ์คํํด์ผ ํ ์ง ์ ์ ์์
=> ๋ถ๊ธฐ ์์ธก(branch prediction), delay slot, ํ์ดํ๋ผ์ธ flush ๋ฑ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์
(ํ์ง๋ง, ์์ธก์ ์คํจํ๋ฉด ๊ณ์ฐ๋ ํ์ดํ๋ผ์ธ์ ๋ชจ๋ ๋ฒ๋ ค์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ์์ค์ด ํผ)
Pipeline Flush : ๋ถ๊ธฐ ์์ธก ์คํจ, Exception, ์ธํฐ๋ฝํธ ๋ฑ์ด ๋ฐ์ํ์ ๋ ํ์ดํ๋ผ์ธ ์์ ๋ค์ด๊ฐ ๋ช ๋ น์ด๋ค์ ๋ชจ๋ ๋ฒ๋ฆฌ๊ณ (flush) ์๋ก์ด ๋ช ๋ น์ด๋ก ํ์ดํ๋ผ์ธ์ ์ฌ์์ํ๋ ๊ฒ
Branch Prediction(๋ถ๊ธฐ ์์ธก) : ๋ถ๊ธฐ ๋ช ๋ น์ด(if, for, goto, switch ๋ฑ)๊ฐ ๋์์ ๋, ์ค์ ๋ก ๋ถ๊ธฐํ ์ง ์๋์ง๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํ๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํ์ดํ๋ผ์ธ์ ๋ฃ๋ ๊ธฐ๋ฒ
=> ์์ธก์ด ๋ง์ผ๋ฉด ํ์ดํ๋ผ์ธ ์ ์ ์งํ์ด์ง๋ง, ํ๋ฆฌ๋ฉด Pipeline Flush
Delay Slot : ๋ถ๊ธฐ ๋ช ๋ น์ด ๋ค์ ๋ช ๋ น์ด ํ๋๋ ๋ฌด์กฐ๊ฑด ์คํ๋๊ฒ ๊ฐ์ ๋ก ๋ณด์ฅํ๋ ๋ฐฉ์์
(๋ถ๊ธฐ๋ฌธ ๋ฐ๋ก ๋ฐ ํ ์ค๋ง Delay Slot์)
=> ํ์ดํ๋ผ์ธ flush ์ฌ์ด์ ํ์ดํ๋ผ์ธ์ด ๋๊ฒ๋๋ฏ๋ก ๋ญ๋น๋ฅผ ๋ง๊ธฐ ์ํด ์ฌ์ฉํ๋๋ฐ,
๋ถ๊ธฐ ๋ช ๋ น์ด ๋ค์์ ์ฌ ๋ช ๋ น์ด ํ๋๋ ๋ฌด์กฐ๊ฑด ์คํ๋ ๊ฑธ๋ก ๊ฐ์ ํ๊ณ , ์๋ฏธ ์๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ๋ ๋์ ์ค์ ๋ก ์คํํด๋ ๋๋ ๋ช ๋ น์ด๋ฅผ ๋ฃ์ด๋๋ฉด ์ฑ๋ฅ ํฅ์์ด ๊ฐ๋ฅํจ
BEQ R1, R2, LABEL ; ๋ถ๊ธฐ
ADD R7, R8, R9 ; Delay Slot โ ๋ฌด์กฐ๊ฑด ์คํ๋จ โ ์ด์ฐจํผ ํด์ผ ๋ ์ฐ์ฐ์ ๋ฏธ๋ฆฌ ์ํ
์์ฒ๋ผ ๋ฌด์กฐ๊ฑด ์คํํด๋ ๊ด์ฐฎ์ ๋ช ๋ น์ด๋ฅผ Delay Slot์ ๋ฃ์ผ๋ฉด ํ์ดํ๋ผ์ธ ๋ญ๋น ์ค์ด๊ณ ์ฑ๋ฅ ํฅ์!!
(Delay Slot์ ๋ฃ์ ๋ช ๋ น์ด๋ ์์ ํ ๋ช ๋ น์ด์ฌ์ผ ํจ)
Structural Hazard (๊ตฌ์กฐ์ ์ํ)
๊ตฌ์กฐ์ ์ํ์ ํ ๋ช ๋ น์ด๊ฐ ์์์ ์ฌ์ฉํ๋ฉด, ํด๋น ์์์ด ํ์ํ ๋ค๋ฅธ ๋ช ๋ น์ด๋ ๋ฉ์ถ๊ฒ ๋์ด ํ์ดํ๋ผ์ธ์ด ์ ๋๋ก ์๋ํ์ง ์๋๊ฑธ ์๋ฏธํจ
์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ํ์ํ ๋ ๋ช ๋ น์ด๊ฐ ๋์์ MEM ๋จ๊ณ๋ฅผ ์ํํ๋ ค ํ๋ฉด ์ถฉ๋์ด ๋ฐ์
=> ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๋ณต์๋ก ๊ตฌ์ฑํ๊ฑฐ๋, ๋ช ๋ น์ด ์คํ ์์๋ฅผ ์กฐ์ ํด์ ํด๊ฒฐํ ์ ์์
ํ์ดํ๋ผ์ด๋์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
- CPU ์ฒ๋ฆฌ๋ ์ฆ๊ฐ (Throughput ํฅ์)
- ๋จ์ผ ๋ช
๋ น์ด ์ฒ๋ฆฌ ์๊ฐ์ ๊ทธ๋๋ก์ง๋ง, ์ ์ฒด ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ ๋จ์ถ
- ๋ณ๋ ฌ์ฑ๊ณผ ์๋ ํฅ์
๋จ์
- ๋ณต์กํ ํ๋์จ์ด ์ ์ด ๋ก์ง ํ์
- ํ์ดํ๋ผ์ธ ์ํ ์ฒ๋ฆฌ ๋น์ฉ ์กด์ฌ
- ๋ถ๊ธฐ ์์ธก ์คํจ ์ ํ์ดํ๋ผ์ธ flush ๋น์ฉ
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ๋ฃจํด์ ์ฌ์ฉํ ์์ ์ฒ๋ฆฌ๊ฐ ๊ธฐ์กด ์ค๋ ๋ ๋ฐฉ์๋ณด๋ค ๊ฐ๋ฒผ์ด ์ด์ (1) | 2025.06.30 |
---|---|
์ฟ ํค(Cookie)์ ์ธ์ (Session)์ ์ฐจ์ด (0) | 2025.06.27 |
์ฐธ์กฐ ์ง์ญ์ฑ์ ์๋ฆฌ๋? (0) | 2025.06.22 |
Go(Golang)์ด๋? (0) | 2025.06.06 |
Java ์ ์ถ๋ ฅ(I/O) ์์๋ณด๊ธฐ (0) | 2025.06.03 |