2. Organization & Implemention

2์žฅ Organization & Implementation ๊ฐœ์š”

ARM ํ”„๋กœ์„ธ์„œ์˜ Organization (๊ตฌ์„ฑ) ๊ณผ Implementation (๊ตฌํ˜„) ์„ ํ•™์Šตํ•œ๋‹ค. 3-stage pipeline ARM๋ถ€ํ„ฐ 5-stage ARM9๊นŒ์ง€์˜ ์ง„ํ™”, Principal Components, Data Forwarding, Branch, Memory Bottleneck์„ ๋‹ค๋ฃฌ๋‹ค.

ARM์˜ Principal Components

  • Register file: 32-bit 16๊ฐœ์˜ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ. ์ผ๋ถ€๋Š” PC(R15), LR(R14) ๋“ฑ์œผ๋กœ ์šฉ๋„ ๊ณ ์ •
  • Barrel shifter: ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ cycle ๋‚ด์—์„œ shift/rotate (ARM์˜ ํŠน์ง•)
  • ALU: Arithmetic & Logic Unit
  • Address register/incrementer: ๋‹ค์Œ fetch๋ฅผ ์œ„ํ•ด PC ์ฆ๊ฐ€
  • Data register: ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ๊ณ ๋ฐ›์„ ๋ฐ์ดํ„ฐ ๋ณด๊ด€
  • Instruction register: ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ instruction

3-Stage Pipeline ARM (ARM7 ์ด์ „)

Fetch โ†’ Decode โ†’ Execute

๊ฐ stage๊ฐ€ ํ•œ cycle์”ฉ ๊ฑธ๋ฆฌ๊ณ  CPI๋Š” 1์— ๊ฐ€๊น๋‹ค. Program counter๋Š” ํ•ญ์ƒ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ instruction + 8 (pipelining ๋•Œ๋ฌธ).

3 Stages ์„ค๋ช…

  • Fetch: Instruction์„ instruction register๋กœ ๋กœ๋“œ โ†’ fetch ์™„๋ฃŒ
  • Decode: Instruction์„ ํ•ด์„, register ์ฝ๊ธฐ, control signal ์ƒ์„ฑ
  • Execute: ALU ์—ฐ์‚ฐ, register์— ๊ฒฐ๊ณผ ์ €์žฅ

3-stage Pipeline ARM Organization

ARM Single-Cycle Instruction Operations

ARM์˜ single-cycle instruction ์ข…๋ฅ˜:

  • Data operation: ADD, SUB, MUL ๋“ฑ ALU ์—ฐ์‚ฐ โ†’ register์— ์ €์žฅ
  • Addressing register R shifter: barrel shifter๋ฅผ ํ†ตํ•ด ์—ฐ์‚ฐ (ARM ํŠน์ง•)
  • Store instruction: register ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ (1 cycle)

STR (Store Instruction) โ€” Address Mode 4, ์ƒ๋Œ€ ์ฃผ์†Œ๋กœ ์“ฐ๊ธฐ

์˜ˆ: STR r0, [r1, #4] โ†’ r1 + 4 ์ฃผ์†Œ์— r0 ์ €์žฅ

How to Improve the Performance

์„ฑ๋Šฅ ํ–ฅ์ƒ์˜ ๊ธฐ๋ณธ ๊ณต์‹:

$$T_{prog} = N_{inst} \times CPI \times T_{clk}$$

  • $N_{inst}$: instruction ์ˆ˜ (์ปดํŒŒ์ผ๋Ÿฌ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜์กด)
  • $CPI$: cycles per instruction (pipeline ์„ค๊ณ„)
  • $T_{clk}$: clock ์ฃผ๊ธฐ

โ†’ Pipeline stage ์ˆ˜๋ฅผ ๋Š˜๋ ค $T_{clk}$์„ ์ค„์ด๋ฉด, pipeline ํšจ์œจ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ฐ€๋Šฅ. ๊ทธ๋Ÿฌ๋‚˜ hazard ์ฆ๊ฐ€.

ARM์€ 3-stage โ†’ 5-stage pipeline์œผ๋กœ ํ™•์žฅ. ๋” ๋น ๋ฅธ clock๊ณผ ๋” ๋งŽ์€ pipeline ๋‹จ๊ณ„๋กœ ์ตœ์ข…์ ์œผ๋กœ RISC ๊ธฐ๋ฐ˜์˜ ํšจ์œจ์  pipeline์„ ๊ตฌ์„ฑ.

Single-Cycle ๋ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ

Memory Bottleneck (Von Neumann Bottleneck)

  • Memory bottleneck์— ์˜ํ•œ Structural Hazard ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒ
  • Instruction์„ ์ฝ๋Š” ๊ฒƒ๊ณผ Data๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋  ์ˆ˜ ์—†๊ธฐ์— ํ•˜๋‚˜๊ฐ€ ๋ฉˆ์ถฐ์„œ ์ˆ˜ํ–‰ โ†’ Hazard ์œ ๋ฐœ

Solution

Memory bandwidth๋ฅผ ์ฆ๊ฐ€์‹œํ‚ด: - ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•: Instruction๊ณผ Data Memory๋ฅผ ๋ถ„๋ฆฌ (Harvard Architecture) - 1 cycle ๋‹น access๊ฐ€ 32-bit ์ด์ƒ์„ ์ „๋‹ฌํ•ด ์ฃผ๋ฉด ๋จ

5-Stage ARM Organization (ARM9)

Fetch โ†’ Decode โ†’ Execute โ†’ Buffer/Data โ†’ Write-Back
  • Stage ์ˆ˜์˜ ์ฆ๊ฐ€ โ†’ $f_{clk}$ ์ฆ๊ฐ€
  • Instruction๊ณผ data memory ๋ถ„๋ฆฌ โ†’ Memory bandwidth 2๋ฐฐ
  • CPI ์ฆ๊ฐ€ (Stage์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ์— ์ค‘์ฒฉํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Instruction ์ฆ๊ฐ€)
  • Hazard ๋ฐœ์ƒ ํ™•๋ฅ ์˜ ์ฆ๊ฐ€์ด์ง€๋งŒ ๋‚˜๋จธ์ง€ ์ด์ ์ด ๋” ํฌ๊ธฐ์— ์ƒ์‡„ โ†’ $f_{clk}$ ์ฆ๊ฐ€, Memory bandwidth ์ฆ๊ฐ€

5 Stages ์„ค๋ช…

  • Fetch: I๋ฅผ ์ฝ์–ด์™€์„œ pipeline์— ๋„ฃ์Œ
  • Decode: I์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ๊ณ  ์ค€๋น„ (register, Control Signal ์ค€๋น„)
  • Execute: Operand shift, ALU ์—ฐ์‚ฐ, ์ฃผ์†Œ ์—ฐ์‚ฐ
  • Buffer/Data: Memory Access ํ˜น์€ by-pass๋จ
  • Write-Back: ๊ฒฐ๊ณผ๊ฐ€ register์— ์ €์žฅ

Multiple Load/Store

์—ฌ๋Ÿฌ ๊ฐœ์˜ I๋ฅผ ํ•˜๋‚˜๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” I ์‚ฌ์šฉ ๊ฐ€๋Šฅ โ†’ MUX ๋ถ€๋ถ„์ด ์žˆ๋Š” ์ด์œ 

LDR r1, 0(r0)    ์—ฐ์†์ ์ธ ์ฆ๊ฐ€
LDR r1, 4(r0)    โ†’ ํ•˜๋‚˜๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ
LDR r1, 8(r0)
LDR r1, 12(r0)

Memory Bottleneck ๋ฐ 5-Stage ARM

Data Forwarding

5-stage pipeline์—์„œ๋Š” throughput โ†‘, I๊ฐ€ ๋™์‹œ์— ์ˆ˜ํ–‰.

  • Stall์ด ์—†๋‹ค๋ฉด data dependency ๊ด€๊ณ„๊ฐ€ ์žˆ์Œ (data Hazard)
  • Data Forwarding์œผ๋กœ ํ•ด๊ฒฐ
reg bank โ†’ Mux โ†’ ALU โ†’ D-cache
              โ†‘     โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”˜   internal forwarding

Mux๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ๋‚˜์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

Load I์˜ ๊ฒฝ์šฐ

๊ทธ๋Ÿฌ๋‚˜ Load I์€ internal forwarding์„ ์ด์šฉํ•ด๋„ 1 stall์ด ํ•„์š”. โ†’ Instruction reordering์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ.

์˜ˆ:

LDR r0, 0(r1)          LDR r0, 0(r1)
ADD r3, r0, r2    โ†’    ADD r4, r5, r1
ADD r4, r5, r1          ADD r3, r0, r2
   (1 stall ํ•„์š”)           (stall ํ•„์š” X)

Data Processing Instruction

๋ง์…ˆ, ๋บ„์…ˆ, ๊ณฑ์…ˆ๊ณผ ๊ฐ™์€ I์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •.

  • 2๊ฐœ์˜ operand ํ•„์š”
  • ํ•˜๋‚˜๋Š” ํ•ญ์ƒ register, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” register๋‚˜ immediate value ๊ฐ€๋Šฅ (8-bit๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ)
  • barrel shifter๋ฅผ ํ†ต๊ณผํ•จ (ARM ํŠน์ง•)
ADD [reg]  [reg/imm]   (shift ์˜ต์…˜ ํฌํ•จ)
  • 2๊ฐœ์˜ operand๋Š” ALU์—์„œ ์—ฐ์‚ฐํ•ด์„œ register์— ์ €์žฅ (ARM ํŠน์ง•)
  • Hazard๊ฐ€ ์—†๋‹ค๋ฉด 1 cycle ๋™์•ˆ ์ˆ˜ํ–‰

์˜ˆ์‹œ

ADD r0, r1, r2 << 1   โ† r2 LSL 1 (shift ์ด์šฉ)
  • Data ์—ฐ์‚ฐ: data out์œผ๋กœ ๋‚˜์˜ด
  • Decoder ์ƒ๋žต

Data Forwarding ๋ฐ Data Processing

Data Transfer Instruction

๋ฉ”๋ชจ๋ฆฌ์™€ Register ์‚ฌ์ด ๋ฐ์ดํ„ฐ ์ด๋™ (Load/Store).

  • Level 1 (Load I) = Single mem cycle: Stage 1 (1 cycle register access)
  • ๋ฐ์ดํ„ฐ ์ฝ๋Š” ๊ฒฝ์šฐ: register โ† memory[address]
  • ๋ฐ์ดํ„ฐ ์“ฐ๋Š” ๊ฒฝ์šฐ: memory[address] โ† register

Auto-Index (Pre/Post Index)

  • Pre-index: LDR r1, [r2, #4] โ†’ address = r2 + 4, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์Œ (r2๋Š” ๊ทธ๋Œ€๋กœ)
  • Pre-index with writeback: LDR r1, [r2, #4]! โ†’ address r2 + 4, r2 r2 + 4 (๊ฐฑ์‹ )
  • Post-index: LDR r1, [r2], #4 โ†’ address r2, ์ฝ์€ ํ›„ r2 r2 + 4

์ด๋Š” ARM์˜ ํŠน์ง•์ธ load/store with auto-indexing์„ ์ง€์›.

Single I โ†’ Auto-index Calculation

ARM์€ load/store ์‹œ auto-indexing์œผ๋กœ ์ฃผ์†Œ ๊ณ„์‚ฐ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ. ๋‹ค๋ฅธ ISA์—์„œ๋Š” load + add๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ARM์€ ํ•˜๋‚˜์˜ instruction์—์„œ ์ฒ˜๋ฆฌ.

Branch Instruction

PC relative addressing, target address ๊ณ„์‚ฐ.

  • PC๋ฅผ ๊ธฐ์ค€์œผ๋กœ offset (signed) ๊ณ„์‚ฐ โ†’ target address
  • Target address = PC + offset

๋‹จ์ˆœ Branch (B label): - 1st cycle: target ๊ณ„์‚ฐ ๋ฐ PC ๊ฐฑ์‹ 

Branch with Link (BL label): - 1st cycle: branch target ๊ณ„์‚ฐ - 2nd cycle: return address๋ฅผ R14 (LR) ์— ์ €์žฅ - 3rd cycle: LR ์ˆ˜์ • (ํ˜„์žฌ PC์˜ ๋‹ค์Œ๋ฒˆ์œผ๋กœ ๋Œ์•„์™€์•ผ ํ•˜๊ธฐ์—) โ†’ R14 = R14 + 4

Data Transfer ๋ฐ Branch Instruction Branch 1st/2nd Cycle ์ƒ์„ธ

์ •๋ฆฌ

  • Principal Components: Register file, Barrel shifter, ALU, Address/Data register, Instruction register
  • 3-stage (ARM7) โ†’ 5-stage (ARM9) ๋กœ ์ง„ํ™”, $f_{clk}$ ์ฆ๊ฐ€ + Harvard architecture๋กœ memory bandwidth 2๋ฐฐ
  • Data Forwarding: Mux๋ฅผ ํ†ตํ•œ internal forwarding์œผ๋กœ ๋Œ€๋ถ€๋ถ„ data hazard ํ•ด๊ฒฐ, Load-use๋Š” 1 stall ๋˜๋Š” reordering
  • Data Processing I: Barrel shifter ํ†ต๊ณผ, 2 operand(ํ•˜๋‚˜๋Š” immediate ๊ฐ€๋Šฅ), ALU ์—ฐ์‚ฐ ํ›„ register ์ €์žฅ
  • Data Transfer I: Auto-indexing (pre/post)์œผ๋กœ ์ฃผ์†Œ ๊ณ„์‚ฐ ํšจ์œจํ™”
  • Branch: PC-relative, BL์€ 3 cycle ํ•„์š” (target + LR ์ €์žฅ + LR ์ˆ˜์ •)

Pipelining์˜ ๊ธฐ๋ณธ ์›์น™๊ณผ ARM ํŠน์œ ์˜ ์ตœ์ ํ™” (barrel shifter, auto-indexing, multiple load/store)๋ฅผ ๊ฒฐํ•ฉํ•ด RISC์˜ ์ •์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

๋น„์Šทํ•œ ๊ธ€ ์ถ”์ฒœ

Comments (0)

No comments yet. Be the first to comment!