๋ถ๋ฅ: ์ปดํจํฐ ์์คํ
๋ฐ ๊ตฌ์กฐ
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
Scoreboarding์ CDC 6600์์ ๋์
ํ ๋น์์ฐจ์ ์คํ ๊ธฐ๋ฒ์ด๋ค. Tomasulo ์๊ณ ๋ฆฌ์ฆ๊ณผ๋ ๋ฌ๋ฆฌ, ๋น์์ฐจ์ ์คํ์ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ ๊ธฐ๋ฅ ๋จ์[1]์ ํฉ์ด๋์ง ์๊ณ Scoreboard์ ๋ชจ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํน์ง์ด๋ค.
1.1. Scoreboard์ ๊ตฌ์ฑ[ํธ์ง]
Scoreboard๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๋ค.
- ๋ช ๋ น์ด ์ํ(Instruction status) : ์ฒ๋ฆฌํ๊ณ ์๋ ๋ช ๋ น์ด๊ฐ ํ์ดํ๋ผ์ธ์ ์ด๋ ๋จ๊ณ์ ์๋์ง์ ๋ํ ์ ๋ณด.
- ๊ธฐ๋ฅ ๋จ์ ์ํ(Functional Unit status) : ๊ฐ ๊ธฐ๋ฅ ๋จ์๊ฐ ์ด๋ค ์ํ์ธ์ง๋ฅผ ๋ํ๋ด๋ ์ ๋ณด. ์ฃผ์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Busy : ์ด ๊ธฐ๋ฅ ๋จ์๊ฐ ํ์ฌ ์ฌ์ฉ ์ค์ธ์ง์ ์ฌ๋ถ๋ฅผ ํ์ํ๋ ํ๋๊ทธ.
- Op : Operation. ํ์ฌ ๊ธฐ๋ฅ ๋จ์์์ ์ฒ๋ฆฌํ๊ณ ์๋ ์ฐ์ฐ.
- Fi : ์ด ๊ธฐ๋ฅ ๋จ์์์ ํ์ฌ ๊ณ์ฐ์ ๋ค ์ํํ๋ฉด ๊ฐ์ ์จ์ผ ํ ๋ชฉ์ ์ง ๋ ์ง์คํฐ์ ๋ฒํธ
- Fj, Fk, ... : ํ์ฌ ๊ณ์ฐ์ ์ฒ๋ฆฌํ ๋ฐ ํ์ํ source ๋ ์ง์คํฐ๋ค์ ๋ฒํธ.
- Qj, Qk, ... : ๊ณ์ฐ์ ํ์ํ ๊ฐ์ ๋ฐ์ ์ฌ ๊ธฐ๋ฅ ๋จ์์ ๋ํ ์ ๋ณด. ์ด ์ ๋ณด๋ ์ง๊ธ ๊ธฐ๋ฅ ๋จ์๊ฐ ์ฒ๋ฆฌํ๊ณ ์๋ ๋ช ๋ น์ด๊ฐ ์ฝ์ด์ผ ํ ๋ช ๋ น์ด์ ์ฒ๋ฆฌ๊ฐ ์์ง ์งํ ์ค์ผ ๊ฒฝ์ฐ์ ํ์ํ๋ค.
- Rj, Rk, ... : ๊ฐ๊ฐ Fj, Fk, ... ์ ๊ฐ์ด ์ค๋น๋์์ผ๋, ์์ง ํ์ฌ ๊ธฐ๋ฅ ๋จ์๊ฐ ์ฝ์ง ์์์์ ํ์ํ๋ ํ๋๊ทธ์ด๋ค. ์ด๋ ํ์ฌ ๊ธฐ๋ฅ ๋จ์๊ฐ ์ฝ๊ธฐ๋ ์ ์ ๋ค๋ฅธ ๊ธฐ๋ฅ ๋จ์๊ฐ ๋ ์ง์คํฐ์ ์๋ ๊ฐ์ ๋ฎ์ด์ฐ์ง ์๋๋ก ํ๋ ์ญํ ์ ํ์ฌ WAR ์ํ์ ํด๊ฒฐํ๋ค.
- ๋ ์ง์คํฐ ๊ฒฐ๊ณผ ์ํ(Register result status) : ๋ ์ง์คํฐ๋ง๋ค, ๋ง์ฝ ํด๋น ๋ ์ง์คํฐ์ ์ฐ๋ ๋ช ๋ น์ด๊ฐ ์ฒ๋ฆฌ ์ค์ด๋ผ๋ฉด ๊ทธ๊ฒ์ด ์ด๋ค ๊ธฐ๋ฅ ๋จ์์์ ๊ฐ์ ๋ฐ์์์ผ ํ๋์ง์ ๋ํ ์ ๋ณด.
1.2. ํ์ดํ๋ผ์ธ ๋จ๊ณ[ํธ์ง]
Scoreboarding์์, ๊ฐ์ ธ์จ(fetched) ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ค์ ๊ฑฐ์น๊ฒ ๋๋ค.
- ๋ฐํ(Issue) : ์ฐ์ , ๋ช ๋ น์ด๋ฅผ ํด์ํ๊ณ , ๋ง์ฝ ์ด ๋ช ๋ น์ด๋ฅผ ๋ฐํํ ํ์ ์์ ๋ช ๋ น์ด๋ค๊ณผ์ ๊ตฌ์กฐ ์ํ(structural hazard)์ด ์๋์ง[2] ํ์ธํ ํ, ์๋ค๋ฉด ๋ฐํํ์ง ์๊ณ ๊ทธ๋ ์ง ์์ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ์ด ๊ตฌ์กฐ ์ํ ํ์ธ ๋๋ฌธ์ ๋ช ๋ น์ด๊ฐ ๋ฐํ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๊ฒ์ ์์ฐจ์ ์ด์ด์ผ ํ๋ค. ๋ํ WAW ์ํ์ ํด๊ฒฐํ๊ธฐ ์ํด, ์ด ๋ช ๋ น์ด๊ฐ ์ธ ๊ณณ์ ์ฐ๋ ๋ค๋ฅธ ๋ช ๋ น์ด๊ฐ ์์ง ์ฒ๋ฆฌ ์ค์ด๋ผ๋ฉด ๋ฐํํ์ง ์๋๋ค.
- ๋ช ๋ น์ด๋ฅผ ๋ฐํํ๊ฒ ๋๋ฉด, ์ฌ์ฉํ๋ ๊ธฐ๋ฅ ๋จ์์ ํด๋นํ๋ Scoreboard์ Busy๋ฅผ Yes๋ก ํ์ํ๊ณ , Op, Fi, Fj, Fk์ ๋ํ ์ ๋ณด๋ฅผ ์ฑ์ด๋ค. ๋ ์ง์คํฐ ๊ฒฐ๊ณผ ์ํ๋ฅผ ํ์ธํ์ฌ, ์ด ๋ช ๋ น์ด๊ฐ ์ฝ์ด์ผ ํ ๊ฐ ๋ ์ง์คํฐ์ ๊ฐ์ด ์ด๋ค ๋ค๋ฅธ ๊ธฐ๋ฅ ๋จ์์์ ๊ณ์ฐํ๊ณ ์๋ค๋ฉด ๊ทธ์ ๋ํ ์ ๋ณด๋ฅผ ๋์๋๋ Qj, Qk, ...์ ์ฑ์ฐ๊ณ ๋์๋๋ Rj, Rk, ... ๋ No๋ก ์ค์ ํ๋ค. ์๋๋ผ๋ฉด ํด๋น ๋ ์ง์คํฐ์ ๊ฐ์ด ์ค๋น๋์ด ์๊ณ ์์ง ๊ธฐ๋ฅ ๋จ์๊ฐ ์ฝ์ง ์์์ผ๋ฏ๋ก ๋์๋๋ Rj, Rk, ...๋ Yes๋ก ์ค์ ํ๋ค.
- ํผ์ฐ์ฐ์ ์ฝ๊ธฐ(Read Operand) : ํผ์ฐ์ฐ์๋ค์ ์ฝ๊ธฐ ์ ์ RAW ์ํ์ ํด๊ฒฐํ๊ธฐ ์ํด ํผ์ฐ์ฐ์๋ค์ด ๋ชจ๋ ์ค๋น๋ ๋๊น์ง, ์ฆ ๋ชจ๋ Rj, Rk, ... ๊ฐ Yes๋ก ์ค์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
- ํผ์ฐ์ฐ์๋ค์ด ๋ชจ๋ ์ค๋น๋์์ผ๋ฉด, ๋ ์ง์คํฐ๋ค์ ํผ์ฐ์ฐ์๋ค์ ์ฝ๊ณ Rj, Rk, ...๋ ๋ชจ๋ No๋ก ์ค์ ํ๋ค.
- ์คํ(Execute) : ๊ธฐ๋ฅ ๋จ์๊ฐ ์ฐ์ฐ์ ์ํํ๋ค. ์ด์ ์์๋๋ ์๊ฐ์ ์ฐ์ฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ ์ฌ์ดํด์์ ์์ญ ์ฌ์ดํด๊น์ง๋ ์์๋ ์ ์๋ค.
- ๋์ฐ๊ธฐ(Write Back) : ๊ฒฐ๊ณผ๋ฅผ ๋ ์ง์คํฐ์ ์ฐ๊ธฐ ์ ์ ํน์ ์ฐ๋ ๋์์ด ๋ค๋ฅธ ๊ณณ์ ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฎ์ด์ฐ๋์ง๋ฅผ ํ์ธํ๊ณ , ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด ๊ทธ๋ ์ง ์์ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ์ด๋ก์จ WAR ์ํ์ด ํด๊ฒฐ๋๋ค.
- ์ด ๊ธฐ๋ฅ ๋จ์์ ๊ฒฐ๊ณผ๊ฐ ํ์ํ ๊ธฐ๋ฅ ๋จ์๋ง๋ค, ํด๋นํ๋ Rj, Rk, ...๋ฅผ Yes๋ก ์ค์ ํด ์ค์ผ๋ก์จ ๊ฒฐ๊ณผ๊ฐ ์ค๋น๋์๋ค๋ ๊ฑธ ์๋ ค์ผ ํ๋ค. ๋ํ ๋ ์ง์คํฐ์ ๊ฐ์ ์ฐ๋ฉด์ ๋ ์ง์คํฐ ๊ฒฐ๊ณผ ์ํ ์ญ์ ๋น์์ผ ํ๋ค. ๋ง์ง๋ง์ผ๋ก, ์ด ๊ธฐ๋ฅ ๋จ์์ Busy๋ฅผ No๋ก ํ์ํจ์ผ๋ก์จ ๋ค๋ฅธ ๋ช ๋ น์ด๋ค์ด ์ด ๊ธฐ๋ฅ ๋จ์๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
2. ์์[ํธ์ง]
์ ์ค๋ช
๋ง์ผ๋ก๋ ๊ตฌ์ฒด์ ์ธ ๋์ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฝ์ง ์์ผ๋ฏ๋ก, ์์๋ฅผ ๋ค์ด ํ ์ฌ์ดํด์ฉ ๊ทธ ๋์์ ์ค๋ช
ํ๋ค. ํ์๋ ๊ฐ ์ฌ์ดํด์ด ๋๋ ์งํ์ ์ํ๋ฅผ ํ์ํ๋ค.
์์ ์๋ณธ [3]
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ค์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๊ฐํด ๋ณด์. F0...F10์ ๋ถ๋์์์ ๋ ์ง์คํฐ์ด๊ณ , MUL, SUB, DIV, ADD๋ ๊ฐ๊ฐ ๊ณฑ์ , ๋บ์ , ๋๋์ , ๋ง์ ์ ์ฒ๋ฆฌํ๋ ๋ช ๋ น์ด์ด๋ค. ํผ์ฐ์ฐ์(operand)๋ ์ฒซ ๋ฒ์งธ๊ฐ ๋ชฉ์ ์ง ๋ ์ง์คํฐ๋ฅผ ์ง์ ํ๊ณ , ๋๋จธ์ง ๋์ ๊ณ์ฐํ๋ ๋ฐ ํ์ํ source ๋ ์ง์คํฐ๋ฅผ ์ง์ ํ๋ค. LOAD์ ๊ฒฝ์ฐ, ํด๋นํ๋ ์ฃผ์์์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
๋ค์์ cycle 0์ผ ๋์ ์ด๊ธฐ ์ํ์ด๋ค. ์ฒซ ๋ช ๋ น์ด์ธ LOAD๊ฐ ๋ฐํ๋๊ธฐ ์ ์ด๋ค. ๋ช ๋ น์ด ์ํ์๋ ๋ค์ ์๋ฃํด์ผ ํ ๋จ๊ณ๋ฅผ ๋ํ๋ธ๋ค.
์์ ์๋ณธ [3]
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ค์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๊ฐํด ๋ณด์. F0...F10์ ๋ถ๋์์์ ๋ ์ง์คํฐ์ด๊ณ , MUL, SUB, DIV, ADD๋ ๊ฐ๊ฐ ๊ณฑ์ , ๋บ์ , ๋๋์ , ๋ง์ ์ ์ฒ๋ฆฌํ๋ ๋ช ๋ น์ด์ด๋ค. ํผ์ฐ์ฐ์(operand)๋ ์ฒซ ๋ฒ์งธ๊ฐ ๋ชฉ์ ์ง ๋ ์ง์คํฐ๋ฅผ ์ง์ ํ๊ณ , ๋๋จธ์ง ๋์ ๊ณ์ฐํ๋ ๋ฐ ํ์ํ source ๋ ์ง์คํฐ๋ฅผ ์ง์ ํ๋ค. LOAD์ ๊ฒฝ์ฐ, ํด๋นํ๋ ์ฃผ์์์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
LOAD F6, 34+R2
LOAD F2, 45+R3
MUL F0, F2, F4
SUB F8, F6, F2
DIV F10, F0, F6
ADD F6, F8, F2
๋ค์์ cycle 0์ผ ๋์ ์ด๊ธฐ ์ํ์ด๋ค. ์ฒซ ๋ช ๋ น์ด์ธ LOAD๊ฐ ๋ฐํ๋๊ธฐ ์ ์ด๋ค. ๋ช ๋ น์ด ์ํ์๋ ๋ค์ ์๋ฃํด์ผ ํ ๋จ๊ณ๋ฅผ ๋ํ๋ธ๋ค.
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | Issue |
LOAD F2, 45+R3 | |
MUL F0, F2, F4 | |
SUB F8, F6, F2 | |
DIV F10, F0, F6 | |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | - | - | - |
๋จ์ ์๊ฐ | ๊ธฐ๋ฅ ๋จ์ | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
Multiply | No | |||||||||
Add/Sub | No | |||||||||
Divide | No |
2.1. cycle 1[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | R.O |
LOAD F2, 45+R3 | Issue |
MUL F0, F2, F4 | |
SUB F8, F6, F2 | |
DIV F10, F0, F6 | |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | Load/Store | - | - |
๋จ์ ์๊ฐ | ๊ธฐ๋ฅ ๋จ์ | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | Yes | Load | F6 | R2 | Yes | |||||
Multiply | No | |||||||||
Add/Sub | No | |||||||||
Divide | No |
์ฒซ ๋ฒ์งธ LOAD๊ฐ ๋ฐํ๋์๋ค. Load/Store FU์ Busy๊ฐ Yes๋ก ์ค์ ๋๊ณ , ๋ชฉ์ ์ง ๋ ์ง์คํฐ์ธ F6์ ํด๋น FU์์ ๊ฐ์ ๊ฐ์ ธ์์ผ ํ๋ค.
2.2. cycle 2[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | Exec |
LOAD F2, 45+R3 | Issue |
MUL F0, F2, F4 | |
SUB F8, F6, F2 | |
DIV F10, F0, F6 | |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | Load/Store | - | - |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | Yes | Load | F6 | R2 | No | |||||
Multiply | No | |||||||||
Add/Sub | No | |||||||||
Divide | No |
Load/Store FU๊ฐ ์ด๋ฏธ ์ฌ์ฉ ์ค์ด๋ฏ๋ก ๊ตฌ์กฐ ์ํ์ ์ํด ๋ค์ LOAD๊ฐ ๋ฐํ๋์ง ์๋๋ค. ์ฒซ ๋ฒ์งธ LOAD๋ ํผ์ฐ์ฐ์ ์ฝ๊ธฐ๊ฐ ์๋ฃ๋์๊ณ Rk๊ฐ No๋ก ์ค์ ๋๋ค.
2.3. cycle 3[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | W.B |
LOAD F2, 45+R3 | Issue |
MUL F0, F2, F4 | |
SUB F8, F6, F2 | |
DIV F10, F0, F6 | |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | Load/Store | - | - |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | Yes | Load | F6 | R2 | No | |||||
Multiply | No | |||||||||
Add/Sub | No | |||||||||
Divide | No |
์ฒซ ๋ฒ์งธ LOAD์ ์คํ์ด ์๋ฃ๋์๋ค.
2.4. cycle 4[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | Issue |
MUL F0, F2, F4 | |
SUB F8, F6, F2 | |
DIV F10, F0, F6 | |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | - | - | - |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
Multiply | No | |||||||||
Add/Sub | No | |||||||||
Divide | No |
์ฒซ ๋ฒ์งธ LOAD์ ๋์ฐ๊ธฐ๊น์ง ์๋ฃ๋์๋ค. ๋ ์ง์คํฐ์๋ 34+R2์ ์ฃผ์์ ์๋ ๊ฐ์ด ์ฐ์๊ณ , FU status์ Register result status๋ ๋ค์ ๋น์์ง๋ค.
2.5. cycle 5[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | R.O |
MUL F0, F2, F4 | Issue |
SUB F8, F6, F2 | |
DIV F10, F0, F6 | |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
- | Load/Store | - | - | - | - |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | Yes | Load | F2 | R3 | Yes | |||||
Multiply | No | |||||||||
Add/Sub | No | |||||||||
Divide | No |
์์์ ๊ตฌ์กฐ ์ํ์ด ํด์๋์ด, ๋ ๋ฒ์งธ LOAD๊ฐ ๋ฐํ๋์๋ค. ์ฒซ LOAD๋์ ๋์ผํ๋ค.
2.6. cycle 6[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | Exec |
MUL F0, F2, F4 | R.O |
SUB F8, F6, F2 | Issue |
DIV F10, F0, F6 | |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | Load/Store | - | - | - | - |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | Yes | Load | F2 | R3 | No | |||||
Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | Yes | ||
Add/Sub | No | |||||||||
Divide | No |
Multiply ๊ธฐ๋ฅ ๋จ์๋ Busyํ์ง ์์ผ๋, ๊ตฌ์กฐ ์ํ์ด ์์ด MUL์ด ๋ฐํ๋์๋ค. ์ฒซ LOAD๋ ํผ์ฐ์ฐ์ ์ฝ๊ธฐ๊ฐ ์๋ฃ๋์๋ค.
2.7. cycle 7[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | W.B |
MUL F0, F2, F4 | R.O |
SUB F8, F6, F2 | R.O |
DIV F10, F0, F6 | Issue |
ADD F6, F8 |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | Load/Store | - | - | Add/Sub | - |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | Yes | Load | F2 | R3 | No | |||||
Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | Yes | ||
Add/Sub | Yes | Sub | F8 | F6 | F2 | Load/Store | Yes | No | ||
Divide | No |
์์ง MUL์ ํผ์ฐ์ฐ์๊ฐ ์ค๋น๋์ง ์์, ํผ์ฐ์ฐ์ ์ฝ๊ธฐ ๋จ๊ณ๋ฅผ ์๋ฃํ ์ ์๋ค. LOAD๊ฐ ์คํ๋์๊ณ , SUB๊ฐ ๋ฐํ๋๋ค.
2.8. cycle 8[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | R.O |
SUB F8, F6, F2 | R.O |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | Issue |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | - | Add/Sub | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | Yes | Yes | ||
Add/Sub | Yes | Sub | F8 | F6 | F2 | Load/Store | Yes | Yes | ||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
LOAD๋ ๋์ฐ๊ธฐ๊น์ง ์๋ฃํ๋ฉด์, ๋ ์ง์คํฐ์ ๋ถ๋ฌ์จ ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ๋จ์๋ค์ด ํ์๋ก ํ๋์ง ๋ณด๊ณ ๊ฐ์ด ์ค๋น๋์๋ค๋ ํ์๋ก Rj, Rk๋ฅผ Yes๋ก ์ค์ ํ๋ค. DIV๊ฐ ๋ฐํ๋๋ค.
2.9. cycle 9[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | Exec |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | Issue |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | - | Add/Sub | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
10 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
2 | Add/Sub | Yes | Sub | F8 | F6 | F2 | Load/Store | No | No | |
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
MUL๊ณผ SUB์ ํผ์ฐ์ฐ์ ์ฝ๊ธฐ๊ฐ ์๋ฃ๋๋ฉฐ, Rj์ Rk๋ฅผ No๋ก ์ค์ ํ๋ค. ํ์ํ ๊ฐ์ Multiply FU์์ ๋ฐ์ ์์ผ ํ๊ธฐ ๋๋ฌธ์ DIV๋ ํผ์ฐ์ฐ์ ์ฝ๊ธฐ ๋จ๊ณ๋ฅผ ์๋ฃํ ์ ์๋ค. SUB๊ฐ Add/Sub ๊ธฐ๋ฅ๋จ์๋ฅผ ์ฌ์ฉ ์ค์ด๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ ์ํ์ด ํด๊ฒฐ๋ ๋๊น์ง ADD๋ฅผ ๋ฐํํ ์ ์๋ค.
2.10. cycle 10[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | Exec |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | Issue |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | - | Add/Sub | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
9 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
1 | Add/Sub | Yes | Sub | F8 | F6 | F2 | Load/Store | No | No | |
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
MUL๊ณผ SUB๊ฐ ๊ณ์ฐ๋๊ณ ์๋ค.
2.11. cycle 10[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | W.B |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | Issue |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | - | Add/Sub | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
8 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
0 | Add/Sub | Yes | Sub | F8 | F6 | F2 | Load/Store | No | No | |
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
SUB์ ์คํ์ด ์๋ฃ๋์๋ค.
2.12. cycle 12[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | Issue |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | - | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
7 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
Add/Sub | No | |||||||||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
SUB๋ ๋์ฐ๊ธฐ๊น์ง ์๋ฃ๋์๋ค. ํด๋นํ๋ ๋ถ๋ถ์ ๋น์ด๋ค.
2.13. cycle 13[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | R.O |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
6 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
Add/Sub | Yes | Add | F6 | F8 | F2 | Yes | Yes | |||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
๊ตฌ์กฐ ์ํ์ด ํด๊ฒฐ๋์ด ADD๋ฅผ ๋ฐํํ ์ ์๋ค.
2.14. cycle 14[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | Exec |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
5 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
2 | Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | ||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
ADD์ ํผ์ฐ์ฐ์ ์ฝ๊ธฐ๊ฐ ์๋ฃ๋์๋ค.
2.15. cycle 15[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | Exec |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
4 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
1 | Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | ||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
MUL๊ณผ ADD๋ฅผ ๊ณ์ฐ ์ค์ด๋ค.
2.16. cycle 16[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | W.B |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
3 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
0 | Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | ||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
ADD์ ๊ณ์ฐ์ด ์๋ฃ๋์๋ค.
2.17. cycle 17[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | W.B |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
2 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | |||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
ADD๊ฐ ์จ์ผ ํ F6์ ์๋ ๊ฒฐ๊ณผ๋ฅผ DIV๊ฐ ์์ง ์ฝ์ง ๋ชปํ์ผ๋ฏ๋ก, ADD๋ ๋์ฐ๊ธฐ ๋จ๊ณ๋ฅผ ์๋ฃํ์ง ๋ชปํ๋ค.
2.18. cycle 18[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | Exec |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | W.B |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
1 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | |||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
MUL์ ๊ณ์ฐํ๊ณ ์๋ค.
2.19. cycle 19[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | W.B |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | W.B |
F0 | F2 | F4 | F6 | F8 | F10 |
Multiply | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
0 | Multiply | Yes | Mult | F0 | F2 | F4 | Load/Store | No | No | |
Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | |||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | Yes |
MUL์ ๊ณ์ฐ์ด ์๋ฃ๋์๋ค.
2.20. cycle 20[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | - |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | R.O |
ADD F6, F8 | W.B |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
Multiply | No | |||||||||
Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | |||
Divide | Yes | Div | F10 | F0 | F6 | Multiply | Yes | Yes |
MUL์ ๋์ฐ๊ธฐ๊น์ง ์๋ฃ๋๋ฉด์, DIV์ ํ์ํ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ์ค๋น๋๋ค.
2.21. cycle 21[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | - |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | Exec |
ADD F6, F8 | W.B |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | Add/Sub | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
Multiply | No | |||||||||
Add/Sub | Yes | Add | F6 | F8 | F2 | No | No | |||
40 | Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | No |
์ด์ DIV๋ ํผ์ฐ์ฐ์ ์ฝ๊ธฐ ๋จ๊ณ๋ฅผ ์๋ฃํ ์ ์๋ค. ์ด๋ก์จ WAR ์ํ์ด ํด๊ฒฐ๋๊ฒ ๋๋ค.
2.22. cycle 22[ํธ์ง]
๋ช
๋ น์ด | ๋ค์ |
LOAD F6, 34+R2 | - |
LOAD F2, 45+R3 | - |
MUL F0, F2, F4 | - |
SUB F8, F6, F2 | - |
DIV F10, F0, F6 | Exec |
ADD F6, F8 | - |
F0 | F2 | F4 | F6 | F8 | F10 |
- | - | - | - | - | Divide |
๋จ์ ์๊ฐ | FU | Busy | Op | Fi | Fj | Fk | Qj | Qk | Rj | Rk |
Load/Store | No | |||||||||
Multiply | No | |||||||||
Add/Sub | No | |||||||||
39 | Divide | Yes | Div | F10 | F0 | F6 | Multiply | No | No |
ADD์ ๋์ฐ๊ธฐ๊น์ง ์๋ฃ๋๋ค.
[1] Functional Unit; FU. CPU์์ ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌํ ๋ ์ค์ ๋ก ์ฐ์ฐ(์ฌ์น์ฐ์ฐ, ๋
ผ๋ฆฌ์ฐ์ฐ ๋ฑ)์ ์ํํ๋ ์์. ํ๋ CPU์์๋ ์ฒ๋ฆฌ ์๋ ํฅ์์ ์ํด ๊ฐ์ ๊ธฐ๋ฅ ๋จ์๊ฐ ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๊ธฐ๋ ํด์ ์ฌ๋ฌ ๋ช
๋ น์ด๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ค.
[2] ์์ปจ๋, ์ด ๋ช
๋ น์ด๊ฐ ์ฌ์ฉํด์ผ ํ๋ ๊ธฐ๋ฅ ๋จ์๋ฅผ ์์ ๋ช
๋ น์ด๋ค์ด ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์์ด์ ๊ธฐ๋ค๋ ค์ผ ํ๋์ง ๋ฑ
[3] ์ฌ๊ธฐ ์๋ ๊ทธ๋ฆผ์ ๋ณธ ๋ฌธ์์ ์์ ๋ ๊ฒ๊ณผ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋๋ฐ, ์ด๋ ๋ณธ ๋ฌธ์์์๋ ์ผ๊ด์ ์ผ๋ก ๊ฐ ์ฌ์ดํด์ด ๋๋ ์งํ๋ฅผ ๋ฌ์ฌํ ๋ฐ๋ฉด, ๊ทธ๋ฆผ์์๋ ์คํ ์ค์ธ ๊ณผ์ ์ ๋ฌ์ฌํ์๊ธฐ ๋๋ฌธ์ด๋ค.