[ํผ๊ณต์ปด์ด] Chapter 05-2 ๋ช ๋ น์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ๋ฒ
๋ช ๋ น์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ๋ฒ (ILP : Instruction - Level Parallelism)
: ๋ช ๋ น์ด๋ฅผ ๋์์ ์ฒ๋ฆฌํ์ฌ CPU๋ฅผ ํ์๋ ์ฌ์ง ์๊ณ ์๋์ํค๋ ๋ฐฉ๋ฒ
ILP ์ ์ข ๋ฅ
1. ๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋
2. ์ํผ์ค์นผ๋ผ
3. ๋น ์์ฐจ์ ๋ช ๋ น์ด ์ฒ๋ฆฌ
๋ช ๋ น์ด ํ์ดํ๋ผ์ธ
[ ๋ช ๋ น์ด ์ฒ๋ฆฌ ๊ณผ์ ]
1. Instruction Fetch (๋ช ๋ น์ด ์ธ์ถ)
2. Instruction Decode (๋ช ๋ น์ด ํด์)
3. Execute Instruction (๋ช ๋ น์ด ์คํ)
4. Write Back (๊ฒฐ๊ณผ ์ ์ฅ)
[์ค์]
: ๊ฐ์ ๋จ๊ณ๊ฐ ๊ฒน์น์ง ์๋๋ค๋ฉด CPU๋ ๊ฐ ๋จ๊ณ๋ฅผ ๋์์ ์คํํ ์ ์๋ค.
์ฆ, CPU๋ ํ ๋ช ๋ น์ด๋ฅผ '์ธ์ถ' ํ๋ ๋์ ๋ค๋ฅธ ๋ช ๋ น์ด๋ฅผ '์คํ' ํ ์ ์๊ณ ,
'์คํ' ํ๋ ๋์ ์ฐ์ฐ๊ฒฐ๊ณผ๋ฅผ '์ ์ฅ' ํ ์ ์๋ค.
์ฆ, ๊ณต์ฅ ์์ฐ ๋ผ์ธ๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ค์ ๋ช ๋ น์ด ํ์ดํ๋ผ์ธ์ ๋ฃ๊ณ ๋์์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ์ "๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋" ์ด๋ผ๊ณ ํ๋ค
(= ๋์์ ์ฌ๋ฌ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ๊ฒน์ณ ์คํํ๋ ๊ธฐ๋ฒ)
๋ฐ๋ผ์ ๋ช ๋ น์ด ํ์ดํ๋ผ์ด๋์ ์ฑ๋ฅ ํฅ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค.
ํ์ง๋ง, ํญ์ ์ฑ๋ฅํฅ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋๋ค.
ํ์ดํ๋ผ์ธ ์ํ
:ํน์ ์ํฉ์์ ์ฑ๋ฅ ํฅ์์ ์คํจํ๋ ๊ฒฝ์ฐ
1. ๋ฐ์ดํฐ ์ํ
2. ์ ์ด ์ํ
3. ๊ตฌ์กฐ์ ์ํ
๋ฐ์ดํฐ ์ํ
: ๋ช ๋ น์ด ๊ฐ '๋ฐ์ดํฐ ์์กด์ฑ' ์ ์ํด ๋ฐ์
์ฆ, ์ด๋ค ๋ช ๋ น์ด๋ ์ด์ ๋ช ๋ น์ด๋ฅผ ๋๊น์ง ์คํํด์ผ ๋ง ์คํ ๊ฐ๋ฅํ ๋ช ๋ น์ด๊ฐ ์๋ค.
ex)
๋ช ๋ น์ด 1 : R1 <- R2 + R3 // R2 + R3 ๊ฐ์ R1์ ์ ์ฅ
๋ช ๋ น์ด 2 : R4 <- R1 + R5 // R1 + R5 ๊ฐ์ R4์ ์ ์ฅ
์ฆ, R4์ ๊ฐ์ ์๊ธฐ ์ํด์๋ R1, ๋ช ๋ น์ด 1์ ๋ชจ๋ ์ฒ๋ฆฌ ํ ํ ๊ณ์ฐํด์ฃผ์ด์ผ ํ๋ค.
์ ์ด ์ํ
: ๋ถ๊ธฐ ๋ฑ์ผ๋ก ์ธํ 'ํ๋ก๊ทธ๋จ ์นด์ดํฐ์ ๊ฐ์์ค๋ฌ์ด ๋ณํ'์ ์ํด ๋ฐ์ํ๋ค.
"ํ๋ก๊ทธ๋จ ์นด์ดํฐ" ๋ ํ์ฌ ์คํ ์ค์ธ ๋ช ๋ น์ด์ ๋ค์ ์ฃผ์๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด๋ค.
ํ์ง๋ง, ํ๋ก๊ทธ๋จ ์คํ ํ๋ฆ์ด ๋ฐ๋์ด ๋ช ๋ น์ด๊ฐ ์คํ๋๋ฉฐ ํ๋ก๊ทธ๋จ ์นด์ดํฐ์ ๋ณํ๊ฐ ์๊ธฐ๊ฒ ๋๋ฉด ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ ์ฒ๋ฆฌ์ค์ด๋ ๋ช ๋ น์ด๊ฐ ์ธ๋ชจ ์์ด์ง ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ถ๊ธฐ ์์ธก ์ด ํ์ํ๋ค.
๊ตฌ์กฐ์ ์ํ (=์์ ์ํ)
: ๋ช ๋ น์ด๋ค์ ๊ฒน์ณ ์คํํ๋ ๊ณผ์ ์์ ์๋ก ๋ค๋ฅธ ๋ช ๋ น์ด๊ฐ ๋์์ ALU, ๋ ์ง์คํฐ ๋ฑ๊ณผ ๊ฐ์ CPU๋ถํ์ ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ๊ตฌ์กฐ์ (์์) ์ํ์ด ๋ฐ์ํ ์ ์๋ค.
์ํผ์ค์นผ๋ผ
= ์ฌ๋ฌ ๊ฐ์ ํ์ดํ๋ผ์ธ (์ฆ, ํ์ดํ๋ผ์ธ์ ์งํฉ)
์ํผ์ค์นผ๋ผ ํ๋ก์ธ์ (=์ํผ์ค์นผ๋ผ CPU)
์ํผ์ค์นผ๋ผ ํ๋ก์ธ์ค๋ ์ํผ์ค์นผ๋ผ ๊ตฌ์กฐ๋ก ๋ช ๋ น์ด ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ CPU์ด๋ค.
๋งค ํด๋ญ ์ฃผ๊ธฐ๋ง๋ค ๋์์ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ์ธ์ถ, ์คํ, ํด์ํ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ก ์ : ์ํผ์ค์นผ๋ผ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ดํ๋ผ์ธ ๊ฐ์์ ๋น๋กํ์ฌ ํ๋ก๊ทธ๋จ ์ฒ๋ฆฌ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
- ์ค์ง์ : ์ํผ์ค์นผ๋ผ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ดํ๋ผ์ธ ์ํ์ด ์ ์ ๋ง์์ง๋ฉด์ ๋ค๋ฃจ๊ธฐ ๊น๋ค๋ก์์ง๋ค.
๋น์์ฐจ์ ๋ช ๋ น์ด ์ฒ๋ฆฌ(OoOE : Out-of order Execution)
= "ํฉ๋ฒ์ ์ธ ์์น๊ธฐ" (<-> ์์ฐจ์ ๋ช ๋ น์ด ์ฒ๋ฆฌ : ์ํผ์ค์นผ๋ผ, ๋ช ๋ น์ด ํ์ดํ๋ผ์ธ)
๋น์์ฐจ์ ๋ช ๋ น์ด ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์
: ํ์ดํ๋ผ์ธ ์ํ๊ณผ ๊ฐ์ ์์์น ๋ชปํ ๋ฌธ์ ๋ค๋ก ์ธํด ๋ช ๋ น์ด๋ ๊ณง๋ฐ๋ก ์ฒ๋ฆฌ๋์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๊ทธ๋ ๋ค๋ฉด, ์์์น ๋ชปํ ์ํฉ์์ ๋ช ๋ น์ด ํ์ดํ๋ผ์ธ์ ๋ฉ์ถฐ ๋ฒ๋ฆฌ๊ฒ ๋๋ค.
๋ฐ๋ผ์, ๋น์์ฐจ์ ๋ช ๋ น์ด ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ๋ฐ๊ฟ ์คํํด๋ ๋ฌด๋ฐฉํ ๋ช ๋ น์ด๋ค์ ๋จผ์ ์คํํ์ฌ ๋ช ๋ น์ด ํ์ดํ๋ผ์ธ์ด ๋ฉ์ถ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ์ด๋ค.
CPU ํ๋จ ๊ธฐ์ค
์ฆ, CPU๋ฅผ ์ฌ์ฉํ ๋, ์ข ๋ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ฌ ์ ํํด์ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ช ๋ น์ด๋ค์ด ์ด๋ค ๋ช ๋ น์ด์ ๋ฐ์ดํฐ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋๊ฐ?
- ์์๋ฅผ ๋ฐ๊ฟ ์คํ ํ ์ ์๋ ๋ช ๋ น์ด์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋๊ฐ?
์ด ๋๊ฐ์ง ์ง๋ฌธ์ ํตํด ๋ ๋์ CPU๋ฅผ ์ ํํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค