204225 Finals

29
Architecture! Chapter 3: CPU Arithmetic How MUL and DIV really works! Addition-Subtraction เราอาศัย 2’s complement ในการคิดบวกลบ และเราจะต้องดูว่ามัน overflow ได้หรือไม่ด้วย x y Operation Overflow + + Addition Possible, roll to negative + - Addition Impossible - - Addition Possible, to positive + + Subtraction Impossible + - Subtraction Possible, to negative - - Subtraction Impossible Multiplication เราคูณฐานสองแบบเด็กๆ เลย แบบทางขวาเนี่ย พอเข้าใจง่ายมั้ย Start Shift 1 bit 1 0 Shift 1 bit 32 ? No Yes Set product = 0 ALU (64) Product (64) Control Multiplier (32) Multiplicand (64) Shift Left Shift Right ALU (32) Product (64) Control Multiplicand (32) Shift Right

description

This document provides after-midterm contents of Computer Architecture & Organization course at Kasetsart University, as lectured by Teacher Paruj R.. This document is in Thai.

Transcript of 204225 Finals

Page 1: 204225 Finals

Architecture!

Chapter 3: CPU Arithmetic How MUL and DIV really works!

Addition-Subtraction เราอาศย 2’s complement ในการคดบวกลบ และเราจะตองดวามน overflow ไดหรอไมดวย

x y Operation Overflow + + Addition Possible, roll to negative + - Addition Impossible - - Addition Possible, to positive + + Subtraction Impossible + - Subtraction Possible, to negative - - Subtraction Impossible

Multiplication เราคณฐานสองแบบเดกๆ เลย แบบทางขวาเนย พอเขาใจงายมย

Start

Shift 1 bit

1 0

Shift 1 bit

32 ?

No

Yes

Set product = 0

ALU (64)

Product (64) Control

Multiplier (32)

Multiplicand (64)

Shift Left

Shift Right

ALU (32)

Product (64) Control

Multiplicand (32)

Shift Right

Page 2: 204225 Finals

ตวอยางการคณ แสดงดงตารางน

Iteration No.

Operation (Slow)

y x Product Operation (Fast)

x Product (z)

0 Initialize 0011 0000 0010 0000 0000 Initialize 0010 0000 0011 1 add 0011 0000 0010 0000 0010 add (high) 0010 0010 0011 x<<1 0011 0000 0100 0000 0010 z>>1 0010 0001 0001 y>>1 0001 0000 0100 0000 0010 2 add 0001 0000 0100 0000 0110 add (high) 0010 0011 0001 x<<1 0001 0000 1000 0000 0110 z>>1 0010 0001 1000 y>>1 0000 0000 1000 0000 0110 3 nop 0000 0000 1000 0000 0110 nop 0010 0001 1000 x<<1 0000 0001 0000 0000 0110 z>>1 0010 0000 1100 y>>1 0000 0001 0000 0000 0110 4 nop 0000 0001 0000 0000 0110 nop 0010 0000 1100 x<<1 0000 0010 0000 0000 0110 z>>1 0010 0000 0110 y>>1 0000 0010 0000 0000 0110

จะเหนวาแบบ Fast (แบบทเอา hardware ตวลางมา implement) เรวกวาแบบ Slow ทใช Hardware แบบบน

(สแดง: ต าแหนงทถก operate, สเขยว: การพจารณาเลอกค าสง)

Signed Multiplication

ท าไดโดยการ

จ า sign ไว

แปลงลบเปนบวกใหหมดกอน

คณปกต

แลวแปลง sign กลบ

Implementation

ใน MIPS ผลการคณจะถกเกบไวใน HI กบ LO การจะเอาคาออกมาตองใชค าสง mfhi, mflo เพอเอามาไวใน register ของเรา

Division

Page 3: 204225 Finals

ลองมาท าการหารกนบางดกวา

Iteration Operation Q Divisor R/Dividend Operation R|Q D Status

0 Initialize 0000 0010 0000 0000 0111 Initialize 0 0000 0111 0010 1 Subtract 0000 0010 0000 1110 0111 Compare 0 0000 0111 0010 FAIL Fail: Undo 0000 0010 0000 0000 0111 RQ<<1 (0) 0 0000 1110 0010 Q << 1 (0) 0000 0010 0000 0000 0111 D >> 1 0000 0001 0000 0000 0111 2 Subtract 0000 0001 0000 1111 0111 Compare 0 0000 1110 0010 FAIL Fail: Undo 0000 0001 0000 0000 0111 RQ<<1 (0) 0 0001 1100 0010 Q << 1 (0) 0000 0001 0000 0000 0111 D >> 1 0000 0000 1000 0000 0111 3 Subtract 0000 0000 1000 1111 1111 Compare 0 0001 1100 0010 FAIL Fail: Undo 0000 0000 1000 0000 0111 RQ<<1 (0) 0 0011 1000 0010 Q << 1 (0) 0000 0000 1000 0000 0111 D >> 1 0000 0000 0100 0000 0111 4 Subtract 0000 0000 0100 0000 0011 Compare 0 0011 1000 0010 OK Q << 1 (1) 0001 0000 0100 0000 0011 Subtract 0 0001 1000 0010 D >> 1 0001 0000 0010 0000 0011 RQ<<1 (1) 0 0011 0001 0010 5 Subtract 0001 0000 0010 0000 0001 Compare 0 0011 0001 0010 OK Q << 1 (1) 0011 0000 0010 0000 0001 Subtract 0 0001 0001 0010 D >> 1 0011 0000 0001 0000 0001 RQ<<1 (1) 0 0010 0011 0010

Start

Shift 1

Shift 0

False True

>>1

33 ?

End

ALU (64)

Remainder (64) Control

Quotient (32)

Divisor (64)

Shift Right

0/1 LSB

64

64

+/- test

ALU (32)

R(32) | Q(32) Control

Divisor (32)

>><<

write

64

64

+/- test

Page 4: 204225 Finals

เปนอนเสรจสนการหาร จะเหนวาการหารทางขวาท าไดเรวกวาทางซาย ทงน ทางขวานนใช comparator ในการตรวจสอบคา (เปน Verilog implementation ของผ เขยนเองจงยงไมไดแกไข ทจรงตองใชการลบแลวตรวจสอบ sign bit) สาระส าคญคอ การหารปกตจะท าการ shift 2 ครง ซงชากวาแบบเรวทใชการ shift เพยงครงเดยวตอรอบ โดยการหารดวยฮารดแวรใหมนไมท าใหจ านวนรอบเพมขนดวย

จรงๆ แลวตองใช R|Q = 2n+1 bits ถาเราตองการหารเลข n bits และเราตองเกบผลลพธตามทขดเสนใตไวอกดวย (ถาไมท าแบบนค าตอบอาจไมเทากน)

Signed Division

การหารคดเครองหมาย หลกการคลายการคณ คอตองแปลงเครองหมายกอน -หลงการด าเนนการ ทงน ดงทเหนในภาพ เราตองท าใหเครองหมายของเศษตรงกบเครองหมายของตวตงเสมอ

Interlude: Verilog Programming เสนอเฉพาะหลกการทวไปเทาทจ าเปน

การเขยน Verilog ท าคลายๆ C + VHDL

Modules แบงโคดของเราเปน module ขางในกท างานไปตามเรองตามราว แต modules เหลานจะท างานตลอดเวลาตามพฤตกรรม ไมมการเรยกฟงกชนเหมอนภาษาโปรแกรมมงทเรารจก ตอไปนจะเปนตวอยางการเขยนวงจร NAND และผลลพธทได

module mynand(in1,in2,out); input in1,in2; output out; assign out = ~(in1&in2)

endmodule module foo(p,q,p_b,q_b,o)

input p,q,p_b,q_b output o wire w, w_b mynand nand1(.out(w), .in1(p), .in2(q)) ; mynand nand2(.out(w_b), .in1(p_b), .in2(q_b)) ; mynand nand3(.out(o), .in1(w), .in2(w_b)) ;

endmodule

Page 5: 204225 Finals

Signals in Verilog สญญาณมสรปแบบ คอ 0, 1, Z, X ซงสามารถน ามา “ผสม” กนได โดยจะมผลดงตารางตอไปน

0 1 X Z 0 0 X X 0 1 X 1 X 1 X X X X X Z 0 1 X Z

Bus บส คอการรวมสญญาณยอยๆ หลายๆ เสนเขาดวยกน การประกาศและใชงานบสนนคลายอารเรย แตมลกเลนแปลกๆ ทเราสามาถท ากบบสไดดวย เชน การตอสญญาณทางขนาน (concatenation)

Assign and Use Buses

input [5:0] a,b; //gives 6-line bus called a, and another 6-line bus called b

a[5:1] = {a[4:0],1’b0}; //equivalent to shift left

Concatenation

Concatenate “once”, for example: assign a[63:0] = {b[31:0], c[31:0]};

Concatenate “many”, for example: assign y = {3{a[3:0]},b[3:2],2'b00};

Sequential Programming (always @)

input [7:0] in1; input [7:0] in2; reg [7:0] out; input select; always @ (select) begin //ใหท างานบลอกนเมอคา select เปลยนแปลง

if (select==1'b0) out = in1; //สงเกตวา out เปน reg เพราะ always นนเปนการท างานแบบ sequential ท างานครงเดยวกผานไป ไมได

เปนสายไฟคางไวตลอดเหมอนขางนอก จงตองมเมมโมรมาจ าคา else

out = in2; end reg [7:0] counter; always @ (posedge clk) //ใหท างานบลอกนเมอคา clk เปลยนแปลงแบบขอบขาขน

counter = counter + 1; สงเกต: เราใช begin-end เมอค าสงใน block มหลายค าสงเทานน

Page 6: 204225 Finals

Case

Case เปนค าสงหนงทส าคญในการเขยน behavioral modules เชน decoder ในตวอยางตอไปน

module what_is_me(a,y); input [2:0] a; output [7:0] y; reg [7:0] y; always @ (a) case(a)

3'h0 : y = 8'h01; 3'h1 : y = 8'h02; 3'h2 : y = 8'h04; 3'h3 : y = 8'h08; 3'h4 : y = 8'h10; 3'h5 : y = 8'h20; 3'h6 : y = 8'h40; 3'h7 : y = 8'h80;

endcase endmodule

Chapter 4: Data Path & Control Hard part…

Hardware Designs

Single-Cycle Design

เปนแบบทเราเคยเรยนมา คอม latch (memory element) ทเปน sequential ผสมกบ combinational logic circuit โดยการออกแบบเปน worst-case design คออะไรใชเวลามากสด (delay time มาก) กจะเปนตวก าหนด clock interval ทเลกทสดเทาทท าได เชน วงจรใชเวลาวงผานเกตรวม 100ns กหามท า clock ทเรวกวานน

Pipeline Design

ไมใชทอสงแกส! แตเปนการออกแบบโปรเซสเซอรทสงขนมา ท าใหท างานไดอยางมประสทธภาพมากขน โดยโยนงานตอเปนทอดๆ และรบงานใหมเขามาอยางรวดเรว ท าใหรบงานใหมไดโดยไมตองรองานเกาวงจนจบ (แควงไปใหพนทางกพอ)

Understanding MIPS 32 registers Instruction Format

o R-type o I-type o J-type

Instruction Types

Page 7: 204225 Finals

o ALU/Logic o Load/Store o Branch/Jump

How to Design

มหลายตว แตละอนกมความเหมาะสมตางกน เชน หากเราลองออกแบบดวย Finite State Machine (FSM)

32 registers = 32 sequential elements แตละอนกวาง 32 bits order of FSM นาจะประมาณ 2^32*2 states โอว! PC กอก 32 bits

อะไรๆ กมากไปหมด จงไมเหมาะกบการท างานททวไป (general-purpose) เพราะมนตองท าทกอยาง บนทก states นอกจากน FSM มระดบการประมวลผลทต าเกนกวาจะมาออกแบบอะไรแบบนได คดดวาเชควงเลบยงท าไมไดเลย ตองไปใชพวก push-down automata + ท า stack (ยงม Turing Machine ทมความสามารถในการค านวณสงสดอก แตจะเรยนใน Theory)

โครงสรางทจะมาจ าลอง Turing Machine แบบงายๆ เกดจาก Memory ตอกบ ALU ทม select มาเลอกค าสงอกท สวนตว memory กตอกบ memory control ซงทงหมดกรบค าสงมาจาก control อกท

ขอจ ากดของ Turing Machine กมเหมอนกน เชน Halting Problem (ปญหาทถามวาโปรแกรมหนงๆ จะท างานจนจบหรอไม)

How Single-Cycle Data Path works ภาพประกอบใหดทภาคผนวก A

Single-Cycle CPU ท างานโดยเราไปดงค าสงมา ค าสงนนกจะมสามชนดคอ R, I, J โดยแตละแบบจะไปใชงาน CPU ในสวนตางๆ กนออกไป

การท างานของ Single-Cycle CPU จะตองไมใหความเรวคลอกเรวไปกวาความเรวทชาทสดของวงจร (อยาลมวาอปกรณทกชนในวงจรม propagation delay เสมอ ดงทไดเรยนไปแลวใน Digital Systems)

เราแบง CPU ออกเปนหาสวน (ตามภาคผนวก B) โดยแบงเปน

Instruction Fetch (IF) มหนาทดงค าสงออกมาจาก Instruction Memory (ทเกบค าสงของเรา) Instruction Decode (ID / REG) มหนาทแปลงค าสงและดงคาจาก Register ทตองใช Execution (EXE / ALU) มหนาทท าการค านวณลวนๆ Memory (MEM) มหนาท store / load คาจาก memory Write-Back (WB) มหนาทเขยนคาใหมลงใน Registers (เชน คาทโหลดมา หรอผลจากการค านวณ)

เราจะเหนไดอยางชดเจนวา ค าสงบางค าสงกจะใช CPU ไมครบทกสวน เชน add ไมใช MEM เลย เพราะวาไมไดเกบคาหรอดงคาใดๆ ออกจากหนวยความจ า หรอ beq ทไมมการเขยนคากลบหรอเขา memory เลย เพราะเราโยนผลการบวกออกมาเปนการแปลง program counter ทนทโดยไมมการบนทกคา เปนตน

หลกการคด clock interval ท าโดยเอาเวลาท างานทงหมดมาบวกกน คอ สมมตวา IF = 5ns, ID = 3ns, EXE = 6ns, MEM = 5ns, WB = 4ns เรากจบบวกกนได 23ns นเปนคาบเวลาเลกสดทเราจะใชกบ CPU รนนได

Page 8: 204225 Finals

Pipelining ไมใชทอสงแกส แตเปนทอทจะท าใหงานของเราสะดวกรวดเรวขน

ตวอยางหนงทนาสนใจคอการซกผา สมมตเราอยหอแลวรวมผากนซก ผาตองแยกกลมกน (จะไดไมปนกน) ท าทละตะกราไป ถามวแต รอกนมนกจะชา ซงไอการรอกนทวากคอหลกของ Single Cycle ทกประการ

แบบซายคอแบบ Single-Cycle เราตองรองานจบกอน กบแบบขวาคอ Pipeline เราโยนผาใสเครองตอไปไดเลย จะเหนวาแบบซายใชเวลาตอ cycle ทงหมด 30+40+20 = 90 นาท ในขณะทแบบขวาใชเวลาตอ cycle ทงหมด max(30,40,20) = 40 นาท

แบบขวาเรวกวา แตมขอจ ากดอย

ถาค าสงทท ามไมมาก ความคมคาจะไมชดเจน ท ายาก เพราะอาจเกดปญหาวางานเกายงไมไดขอมลออกมา งานใหมตองเอาขอมลนนมาดวนทสด ฯลฯ

Clock Trigger Organization

เราตองจด clock trigger ใหเหมาะสม ระหวาง “บลอก” นนเราใหตนาฬกาท posedge ไปแลว ขางในแตละกอนกตองเปน negedge แทน สรปออกมาจะไดวา

PC, regfile: negedge (เพราะเราตองใหเวลามนในการท างานใหเสรจกอน) IF/ID, ID/EX, EX/MEM, MEM/WB: posedge (เปนปกตของมน)

Data Hazard

Data Hazard จะเกดขนเมอเราตองการขอมลทนท แตมนยงไมมให เพราะค าสงกอนหนายงท าไมเสรจ เชน

add $1,$2,$3 ori $8, $1, 0xff

สงเกตวา $1 ส าหรบ ori มนยงไมมา เพราะเมอ ori วงเขา EXE นน add ยงอยใน MEM (ยงไม WB คาใหมจะไมมา!)

วธการแก Data Hazard มดงน

Stalling คอเราหยดการท างานโปรแกรมไวกอน รอจนคามาทๆ เราตองใช แลวคอยลยตอ วธนเสยเวลาแตไมตองแกฮารดแวรเลย หากเราคดๆ ดจะไดวา

o ถาค าสงใชคาใน regfile ตอกนทนท จะเสย 2 cycles o ถามค าสงอนมาคนกลาง (ทไมไปท าใหเกด stalling เพม) จะเสย 1 cycle

Page 9: 204225 Finals

Forwarding o คอการยนยอมใหสงคาบางคาไปยง pipeline stage ทตองการไดทนทโดยไมตองรอจบ cycle เราท าโดยการชอตขาแลว

เอา MUX มาดกไว แลวใช control signal ในการเลอกคา o การจะดวา Forwarding ไดหรอไมนนเราควรเขยนแผนภาพเวลาดวย โดยการ forward จะตองไมใหมการวงยอนเวลาได

Reg File

ID/EX

MU

XM

UX

MU

X

Rt

ALU

EX/MEM

Memory(data)

Rd EX/MEM.RegisterRd

Forwarding Unit

Rt

Rs

MEM/WB.RegisterRd

MU

X

ForwardB

ForwardA

MEM/WB

ตวอยางของ Forwarding

เรามาลองเปรยบเทยบกนวา forwarding แลวดขนหรอไม กบโจทยสนๆ น

lw $1, 4($3) addi $2,$1,10 sub $2,$2,$1

Without Forwarding o lw ท างาน + 2 bubble เพราะมคนรอ $1 มาตดๆ o addi ท างาน + 2 bubble เพราะมคนรอ $2 มาตดๆ o sub ท างาน o รวมเปน 7 clocks

With Forwarding o lw แลวยงไงกตอง stall 1 clock เพราะเขากรณ lw-stall o addi แลวใช forwarding o sub รบ forwarding มา o รวมเปน 4 clocks

Page 10: 204225 Finals

Control Hazard

เราแกปญหาเรองขอมลเขาชาไดแลว ปญหาตอไปคอถาค าสงท n เปน branch (beq) แลวตอมาค าสงท n+1 ตองท าอะไรตอละทน? ในการท างานของ branch นนมนมทางเลอกสองทางคอ จะ fall through (ไปบรรทดตอไป) หรอจะกระโดดไปยงต าแหนงทอยในค าสงเลยด

beq $8, $9, L1 addi $2, $2, 1 <-- fall-through sub $3, $2, $4 L1: lw $3, 16($2) <-- target

กวาเราจะรวาตองท า addi หรอ lw นนกตองรอรอรอ รอจน beq มนท า EXE เสรจ (ไป MEM นนแลว) เพงจะได fetch ค าสงใหมมา (ชาโคตร) สรปวาเราเสยไป 2 clocks ฟรๆ

เราสามารถแกปญหานไดโดยใช Quick Compare ซงเปนการยงผลลพธจากการเชคคาเทาไมเทาในขน EXE กลบมาทระบบ update PC เลย แบบนกจะเรวขนไปอก เพราะค าสงใหมจะเขามาในขณะท beq อยใน EXE เทานน (เสยนอยลงเหลอ 1 clock)

อกวธหนงทนยมใชกนคอ Delayed Branching ซงอาจก าจดการเสย clock ไดทงหมด!!! นไมใชวธทางฮารดแวร แตเราอาศยความสามารถของ MIPS Compiler มาชวย เชนเรามค าสงภาษาซวา:

z=1; if (x==a) y=5; else y=6;

เราแปลงเปน Assembly ไดเปน addi $3, $0, 1 bne $1, $4, L1 addi $2, $0, 5 j L2 L1: addi $2, $0, 6 L2:

แบบนชา เพราะ bne ตองเสยเวลา 1 clock วางๆ ไป เราจะสลบบรรทด addi แรกกบ bne

bne $1, $4, L1 addi $3, $0, 1 <- delayed addi $2, $0, 5 j L2 L1: addi $2, $0, 6 L2:

มนจะเรวขน เพราะเราสามารถยด addi ไวทาย bne ไดเลย เพราะม "ความปลอดภยของคา" อย คอมนจะไมเขยนทบกนเองแนนอน คอในเมอมน branch กเสยค าสงแนๆ กลองเอามาไวทาย branch กอน โดยเอามาวางใน delayed slot เชนในกรณนเราท าค าสงสแดง (z=1) ไปพรอมๆ กบการ evaluate branching ไปเลยกได

Page 11: 204225 Finals

พดสรปกนงายๆ คอ เอาค าสงกอนหนา branch ไปไวหลง branch (ในแงของล าดบการท างานของซพย) กจะไดท าไปพรอมๆ กนเลย ทงน นเปนกระบวนการของ MIPS Compiler ไมใช MIPS CPU เพราะ MIPS CPU ไมมระบบตรวจ control hazard ในตว

วาแตทเรยนมานานแลวนะ แลวท าไม jal ถงเกบ pc+8? นนกเปนเพราะใน pc+4 ม delayed slot อยแลวไง

อกวธทนาสนใจอยางยงคอ Branch Prediction ซงจะเปนการ “จ า” ไววาทผานมานนเราได take branch รเปลา เพราะการท างานค าสงบางประเภทเชน for-loop นนเรามแนวโนมทจะกลบเขาไปบอยๆ

ถาเรามคา 1 bit ไวเกบวาแตละบรรทดจะท างานซ าหรอไม เรากจะเดาไดงายขนวาจะตองท างานหรอไม โดยถา branch กใส 1 ถาไม branch กใส 0 กอนจะท าการ branch เรากโหลดค าสงทเหมาะสมมาตอรอไวเลย ถาผดก flush ค าสงทงไปจากระบบ

แตในกรณ loop สองชนนนมนใชไมได เราจะใหโอกาสแก CPU เพมขน โดยการเพมจ านวน states เปน 4 เพอทจะไดยงไมตอลเปลยนสถานะการเดาแมวาจะผดแคครงเดยว คอ เราจะใส “น าหนก” ความเชอใหมน เปน Strong Take, Weak Take, Weak Not Take และ Strong Not Take ตามล าดบ

T T

NT NT

Not Taken Taken

Taken

Not Taken

Not Taken

Taken

Not Taken

Taken

Chapter 5: Memory

Age of Memory หนวยความจ ามการพฒนามาโดยตลอดตงแตยค 50’s โดยสมยนนใช Core Memory เหนยวน าสนามแมเหลกเพอเกบคา (เกรด: เวลาเครองบมแลวมนขนวา “Core Dump” กหมายถงกระบวนการโบราณน คอมน dump ขอมลมาจาก core memory นนเอง)

ในยค 70’s ไดมการพฒนาใช semiconductor มาท าหนวยความจ า ขนาดของ memory และราคาตอหนวยกลดลงเรอยๆ

Memory is so expensive! Memory Type Access Time Cost (Baht per GB) Typical Size in Market SRAM 1ns 100000 Not for separate sale DRAM 60ns 2000 4-8GB Magnetic Disk 10ms 50 Up to 1.5TB-2TB Solid-State Drive microseconds 500-1000 Up to 512GB (very expensive here!)

แตไมวาอยางไร ของดมนกยงแพงอยวนยงค า แถมเลกอกตางหาก

Page 12: 204225 Finals

แลวเราจะท าอยางไรใหไดสงททกคนตองการ?

เรว ใหญ ถก

มนเปนไปไมไดทจะท าใหไดทงสามอยาง แตเราหลอกผใชได อารมณประมาณวารถเบนซใสเครองเซยงกง

Memory Hierarchy เปนผลจากการหลอกผใช เราเอาของเรว (SRAM Cache) ไวใกล CPU มากทสด เอาของทใหญแตชาอยหางออกมาคอ DRAM และเอาของใหญมากทสดไวหางๆ คอ Hard Drive

มหลกการสองขอทตองร คอ

Temporal Locality o โปรแกรมใชขอมลกอนนแลวมแนวโนมใชอก

Spatial Locality o โปรแกรมมกใชขอมลใกลๆ กน

Caching เปรยบเสมอนการสรางหองเกบของเลกๆ เกบเครองมอทเราใชบอยทสด จะไดไมตองไปเบก-คนบอยๆ (หยบเอง = 3 นาท, เบก = 3 วน?)

Cache

Main Memory

การ map แบบนกเปนวธหนง สมมตวาเราอยากได “กลองสเขยว” เรากดใน cache กอนวาของเขยวๆ ใชกลองสเขยวทเราตองการหรอไม ถาเจอกหยบไปใช ไมเจอกไปเบกมาใส รปแบบนเปนการเกบแบบอางอง modulo ซงกเปนทใชกนทวไปอยางหนง

Direct-Mapped Cache, and related calculations

การทเราจะเรยกหาขอมลเราจะตองท าเปนกอนละ 32 bits แลวแบงบาง bits ไปใชส าหรบการหา เชน ถาเราม Cache ขนาด 4kB = 212 bytes หากเราเกบ “บรรทด” ละไบต เรากตองมครบ 212 บรรทดไปดวย เพราะฉะนน เรากตองม byte-index อย 12 bits ทเหลอ 32-12 = 20 bits กจะเปน “tag”

Page 13: 204225 Finals

Index (12)Tag (20)

V Data (8)Tag (20)

V Data (8)Tag (20)

V Data (8)Tag (20)

V Data (8)Tag (20)

Index-1

Index

Index+1

Index+2

...

(1) Use Index to see which Cache Line to check

(2) Equal? Yes: HIT (get data), No: MISS (go to DRAM)

ภาพขางตนเปนภาพแสดงโครงสรางขอมล บรรทดบนทลอยออกมาคอการประมวลคาเพอเอาไปหาใน Cache สวนตารางๆ ขางลางคอตว Cache เอง สงเกตการเกบของมนวา Index นนมอยแลวโดยธรรมชาต ไมจ าเปนตองเกบ และแตละบรรทดกเกบคาไว 1 byte

แตจรงๆ แลวเราไมนยมเกบคาทละไบต เรานยมเกบกนทละ Word (4 byte) เพราะฉะนน จ านวน “บรรทด” จะลดลงเหลอ ¼ ท าใหจ านวน address bits ลดลงไป 2 bits… ไมจรง!! เพราะเรากตองเผอ address ไวเรยกต าแหนงไบตอยด

Index (10)Tag (20)

V Data (8)Tag (20)

V Data (8)Tag (20)

V Data (8)Tag (20)

V Data (8)Tag (20)

Index-1

Index

Index+1

Index+2

(1) Use Index to see which Cache Line to check

(2) Equal? Yes: HIT (get data), No: MISS (go to DRAM)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

Data (8)

B

(3) Get by Byte Number

ในสแดงๆ นนเราเพมกอน Data ใหเปน Word (เราจะเรยกตามศพทของ Memory วา Block เพราะตอไปอาจม block ทขนาดไมใช 4 byte) และยก 2 bits จาก index มาให byte address แทน

นอกจากนเรายงเพมจ านวน blocks per tag ไดอก เราจะพดถงในตวอยางตอไป

Associative Cache

เพอลด Cache Miss เราจะเพมจ านวน Tags Per Line ขนมา ถาเราม 2 tags per line กจะเรยกวามนคอ “2-way Association” ปกตเรานยมท า 4-way มากทสดเพราะมความสมดลระหวาง ”ความเรว” กบ “ความชวร”

ทงน L1 Cache ตองการความเรวสงมาก มากขนาดวา 4-way กไมนยมใชเทาทควร เรามาดโจทยกนเลยดกวา

โจทย: ก าหนดให cache ขนาด 4kB เปนแบบ 4-way set associative และใหมจ านวน blocks ตอ 1 set เทากบ 16 จงค านวณหาจ านวน bits ของ address ขนาด 32 bit ทใชส าหรบ tag, byte offset, block offset และ index

Page 14: 204225 Finals

แผนการ:

เราทราบวามขอมล 4096 = 212 bytes ขอมลทเราทราบ

o 212 bytes หมายความวาได 210 blocks ทนท แปลวาจะม index รวมกนไมเกน 10 bits o 16 blocks per set กหารไปอก 24 เหลอ 26 sets หมายความวาเราใช 6 index bits ในการเรยกหา set ทตองการ o ค าวา “4-way set associative” แปลวา 4 tags per line ไมมความหมายในตวเอง แตจะไดวา o 4 blocks per tag (เกดจากการหาร 16/4) ซงแปลวาม block offset ขนาด 2 bit o ทราบอยแลววา 4 bytes per block หมายความวาจะม byte offset ขนาด 2 bit

ตอบ o Byte offset: 2 bits o Block offset: 2 bits o Index: 10-2-2 = 6 bits o Tag: 32-10 = 22 bits

เสรจแลว! นคอโครงสรางการเกบ cache และการจด address ของเรา

Index (6)

Tag (22) Byt

e

Blo

ck

V BlockTag (22)

V Tag (22)

Index-1

Index

Index+1

...

Block Block Block BlockTag (22) Block Block Block

BlockTag (22) Block Block Block BlockTag (22) Block Block Block

Block Block Block Block Tag (22) Block Block Block Block

Tag (22) Block Block Block Block Tag (22) Block Block Block Block

V BlockTag (22) Block Block Block BlockTag (22) Block Block Block

BlockTag (22) Block Block Block BlockTag (22) Block Block Block

...

40

96

Byt

es *

1/1

6 S

ets/

Blo

ck *

1/4

Blo

ck/B

ytes

= 6

4 S

ets

Memory Trade-Off

Large Block Size

แต การโหลดคามาใสตองโหลดมาทละบลอก

Pros o เพม Spatial Locality = Less cache miss โดยเฉพาะใน array

Page 15: 204225 Finals

Cons o ลดขนาดของ entries ใน cache ถาโปรแกรมไมม spatial locality จะท าให miss มากแทน o warm-up นาน ตอง optimize ... o critical-word first คอ เอาของจ าเปนทสดมากอน ทเหลอคอยๆ ตามมา o early restart

Associative vs. Direct-Mapped

Associative ลดการ miss ไดมากกวา direct-mapped

Direct-mapped = 10.3% miss 2-way = 8.6% miss 4-way = 8.3% miss มากกวานเรมไมคมแลว เพราะใชเวลาเทากบจ านวน block

When Cache Misses in MIPS Pipeline เราตอง stall เมอ cache miss ท าใหเสย clock ไปเทากบจ านวน stall cycles ซงแปรผนตาม memory access time (ชามาก ประมาณ 100x cache time)

load/store instruction Cycles

CPI for cache hit = 1 (กถกแลว) CPI for cache miss = 1+stall cycles

Example

กรณ CPU clock rate = 500MHz ถารนโปรแกรมทม ALU 50%, Branch 20%, Load-Store 30% โดยท Load-Store ม miss rate = 5%, miss stall time = 60ns (30 cycles!)

แลว CPI เฉลย = ? (จงหา!)

เรายงไมร CPI ของค าสงแตละชนดเลย เรามาก าหนดกอน

ALU CPI = 1 (เพราะท างายสด ท านายกงาย ค านวณกงาย forward ไปมาไดหมด) Branch CPI = ??? (เกด control hazard ท าใหเสย clock ได เราไมรวา Tekken Taken หรอ Not Taken)

o กรณเตม delay slot ได (เตม Delay slot ดวยค าสงทมประโยชน) -> CPI = 1 o กรณเตม delay slot ไมได (คอใส nop แทน) -> CPI = 2 (เลอกใช 2)

Load/Store CPI o Cache Hit = 1 o Cache Miss = 1 + 60ns-in-cycles = 31 cycles! (ถาไมใช cache เลยกไมได miss อะไรกจะเปน 30 cycles)

CPI ในกรณท hit หมด ! (สดยอดความเรว)

ในกรณท miss หมด (เหมอนกบวาไมม cache เลย ทกอยางตอง load/store ผาน memory หมด)

Page 16: 204225 Finals

สงเกตไดวาตางกนเกอบ 10 เทา !! เมพไหมละ เมพไหมละ !!

CPI กรณทม cache เราตองแยกกรณ hit กบ miss

บรรทดสองกบบรรทดแรกจะเหมอนกน แตเราเขยนยบๆ แคนนเอง

เทยบแบบไมม cache จะได speed-up ประมาณ 6 เทา

Write Through & Write Back Cache

การสง store สงทมอยใน cache จะท าให cache กบ main memory เกบคาไมตรงกน มการแกสองวธคอ

Write Through = เมอ store ก update memory ดวย o ตรงไปตรงมา แตกน bandwidth มหาศาลมาก

Write Back = Update เฉพาะตอนจะถบ entry ออกจาก cache เทานน เชน เวลาทเราตองดง entry ใหมมาทบ (ตรวจจบโดย dirty bit)

o ใชงานไดเพราะการอาง memory ใดๆ มนกตองผาน cache อยแลว ดงนน เรากท าทกอยางใน cache นนแหละ พอจะทงคาออกจาก cache คอย copy กลบไปท main memory

Type of Misses

Cold Miss เกดจากคามนไมมอยในตอนแรก เปน miss ทเลยงไมได

Conflict Miss เกดจากปญหาเรอง indexing บงคบใหคาทบกนไปมา มเฉพาะใน cache ทไมใช fully associative cache Capacity Miss คอ miss ทไมไดเกดจากสองอนแรก เกดเฉพาะใน fully associative cache

Try a Problem!

Consider the following function:

void vec_add (int x[16], int y[16], int s[16])

{

int i;

for(i=0;i<16;i++)

s[i] = x[i]+y[i];

for(i=0;i<16;i++)

s[i] = s[i]+1;

}

Simple direct-mapped cache: 128 byte cache, 16 byte blocks. Miss rate?

แตละ block = 4 words (เพราะ MIPS จะมองคาเปน word เปนหลก)

byte offset 2 bit (4 bytes per word), block offset 2 bit (4 words per block) และเตม address อก 3 bit จะไดอางไดครบ 128 bytes

Page 17: 204225 Finals

Addresses

address of x: 0xc0 (tag = 1, index = 4) 0000 0000 0000 0000 0000 0000 1 : 100 : 00 : 00

y: tag=4, index=0 0000 0000 0000 0000 0000 0010 0 : 000 : 00 : 00

s: tag=5, index=2 0000 0000 0000 0000 0000 0010 1 : 010 : 00 : 00

หลกการท างาน:

โหลด x[0~4] - cold miss (cache วางแตแรกจงเปน compulsory miss) โหลด y[0~4] - cold miss โหลด s[0~4] - cold miss ใชงานไปเรอย จะมา miss อกทตอนใช x[4], y[4], s[4] ก miss สามท แลวมาไลอพคาตอ พอจะใช x[8] กโหลดไปใสใน cache อก ปญหาเกดตอนโหลด y[8] เพราะ index = 0 ท าให y[8] ตองลงท index 2 ซงจะไปทบ s[0~4]

Multiwh… I mean Multicore มทมาจาก Dance-Hall Architecture ($ คอ cache)

p1

$

Interconnect Network

p2

$

p3

$

Mem Mem Mem

p1

$

p2

$

pn

$

Shared Mem

...

Bus

ซาย: Dance-Hall Architecture, ขวา: Bus Architecture

Issues with multicore Cache Coherence

คอปญหาทเกดจากการม shared mem แตทกคนตางโหลด cache ตวเองของใครของมน พอมการเซฟคากลบลงใน cache ท าใหคาทไดไมสมพนธกน

Page 18: 204225 Finals

A: เอาเปนวา x=5 นะ B,C: ออ

2 นาทผานไป...

A: เซฟคาละนะ x=7

อกหองหนง...

B: ออ x=5 สนะ เมอกจดไว C: ตรงน x=1…

3 นาทผานไป

เจานาย: เฮย ท าไมงานพวกแกผดหมดเลยวะ! นมนอะไรกน! A: ผมบอกไอ B,C วา x=5 นะครบ แลวท าไม... B: กตอนท าถงตรงน x มนเปลยนเปน 7 แลวโวยไอฟาย C: เฮย บาแลว 1 ไมใชรไง! เจานาย: พวกแกคยงานยงไงวะ! ไปท ามาใหม!

อารมณประมาณนน ทางแกหนงทนาลองคอ write-through ใหหมดเลย แตปญหาคอไมสามารถไป update cache ของเพอนๆ ไดดวย แลวจะท ายงไงให cache มการ update ไดเหมอนกนทกคน?

Multicore Challenges

1. ใชประโยชนจากหลายๆ core

2. การบรหาร cache และ memory ใหมมมมองเดยวกน 3. Memory Consistency

Page 19: 204225 Finals

Epilogue

Revision: Verilog module whatisme(clk,A,B,r)

input A; input clk, r; output B; reg B; always @ (posedge clk) //start working on positive edge of clk

if (r) B = 0;

else B = A;

endmodule; สรป หนาทของมนคอ ทกๆ clock positive edge ถา r = 0 ให B = 0, otherwise B = A ซงกคอบทบาทเดยวกบ D-Flip-Flop นนเอง เราจะท าโจทยตอไปโดยเอา DFF (ตอไปนเรยก whatisme วา DFF นะ) มาสรางตอ

Q

QSET

CLR

Dclk

D Q

module whatisme2 (out, in, clk, reset); output out; input in, clk, reset; wire q; DFF state(clk, out, q, reset); assign out = in ^ q;

endmodule; ผลทไดคอ ม DFF อนนงอยขางใน ผลลพธ D ทออกมา การท างานของมนคอมนจะเปลยนคา 1-0-1-0 ทกครงทมสญญาณ 1 ใสเขามา (เพราะมน xor กบ memory) เรยกสงนวา Parity Checker

Q

QSET

CLR

D q

in

clk

reset

out

Page 20: 204225 Finals

ตอๆๆ module whatisme3 (clk, enable, reset, out) input clk, reset, enable; output out; reg out; always @ (posedge clk) if(reset) out = 0; else if (enable) out = !out; endmodule;

ถา reset แลว out = 0 ไมเชนนนถา enable ใหกลบคา out ถาสงเกตการท างาน จะพบวามนสลบคาขนลงขนลงเมอเรา enable ไว ความถ output จะลดลงเหลอครงหนง ซงคณสมบตนปรากฏใน T-Flip-Flop และ Divide-by-two counter เราจะเรยกมนวา divby2counter module divby4Counter ( clk, enable, reset, out)

divby2Counter beef (clk, enable, reset, out) //เราหมายถงไอกอนเมอก always @ (posedge out_temp)

if (reset) out = 0;

else if (enable) out = !out_temp;

endmodule;

กคอเราครอบลงไปอกชนอะ

Solutions to Homework 4: Datapath (and Data Hazard)

Problem 1

รปแบบค าสงทเขาตองการพจารณาคอ

lw $2, 4($1) sw $2, 8($1)

เราจะสราง forwarding network มาชวย (ก าจด Stall) ไดหรอไม อยางไร

ตอบ: ได โดยท า forwarding WB -> MEM

Page 21: 204225 Finals

REGIF MEM WB

REGIF MEM WB

lw $2, 4($1)

sw $2, 8($1)

This forwarding is possible!

Clocks

Problem 2

การท างานของ CPU นน สญญาณแตละตวมหนาทตางกนไป

Example RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite add 1 0 0 0 10 0 0 1 lw 0 0 1 1 00 0 1 1 addi 0 0 0 0 10 0 0 1 sw 0 0 0 0 00 1 1 0 beq X 1 0 X 01 0 0 0

Problem 3

สญญาณ control จะกระจายไปตาม state ตางๆ

ถาสญญาณ 1 stuck at zero จะท าใหเขยนลง regfile ไมได มผลกบ

All ALU Instructions load

Cut 2 จะมผลกรณ data hazard ทตองใช forwarding ในการแกไข สวน Cut 3 กระทบกบค าสง branch / jump ทงหมด

ค าสงทท างานได

sw $2, 0($10) sw $3, 4($10) sw $4, 8($10)

ค าสงทมปญหากบ fault 1

lw $2, 10($1) add $3, $2, $4 sub $4, $3, $1

ค าสงทมปญหากบ fault 2

Page 22: 204225 Finals

add $1, $2, $3 add $4, $1, $2 add $5, $4, $4

ค าสงทมปญหากบ fault 3 (อะไรกตามทม branch)

addi subi beq

New Problem!

พจารณาชดค าสงตอไปน

I1 = lw $1, 40($6) I2 = add $2, $3, $1 I3 = add $1, $6, $4 I4 = sw $2, 20($4) I5 = and $1, $1, $4

ถาสงค าสงชดนเขาไปใน MIPS 5-stage pipeline ทไมม hazard detection และไมม forwarding จงใส nop เพอใหชดค าสงนท างานถกตอง (ใสใหนอยทสด)

lw $1, 40($8) nop (no operation) nop add $2, $3, $1 add $1, $6, $4 nop sw $2, 20($4) and $1, $1, $4

add ตองรอให lw วงมาจน WB กอนจงจเขา EXE ได นนคอตองหางกน 2 instruction และ add กบ sw ตองรอให add วงไปถง MEM กอน SW ถงจะเรมได นนคอหางกน 1 instruction

ท าตอ ถาม hazard detection + forwarding จงเตม pipeline diagram และบอกวาจะจบในก cycle

T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11

I1 IF ID EXE MEM WB I2 IF ID STALL EXE MEM WB I3 IF STALL ID EXE MEM WB I4 IF ID EXE MEM WB I5 IF ID EXE MEM WB

Page 23: 204225 Finals

แลวถาไมม hazard detection? กจะเกดปญหาตอน execute I2 ตอจาก I1 ทนท คา $1 จะ forward ไมทน (เพราะมนไมมใครมาควบคมวาตอง stall เมอไหร!)

ทงน MIPS เปน in-order processor จงม data hazard ไดแคแบบเดยวคอ read-after-write (RAW)

Control Hazard เปน Hazard ทจะท าใหประสทธภาพของ pipeline ลดลงเนองจากไมสามารถก าหนดทศทางของค าสงตอไปหลงค าสง Branch ไดแนนอน

การแกไข Control Hazard ใน MIPS มไมกวธ

Delayed Branch

เปนงานของ compiler ทจะเรยงโคดใหสงทไมเกยวกบ branch มาอยตอจาก branch Hardware จะไมท าอะไร

พจารณาชดค าสงตอไปน

L1: lw $1, 40($6) beq $2, $3, L2 ; Taken add $1, $6, $4 L2: beq $1, $2, L1 ; Not Taken sw $2, 20($4) and $1, $1, $4

Case I: add กบ sw ไมใช delayed branch ทถกตอง กตองใส nop หลง branch ทงหมดเลย T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11

I1 IF ID EXE MEM WB I2 IF ID EXE MEM WB nop IF ID EXE MEM WB I4 IF ID EXE MEM WB nop IF ID EXE MEM WB I5 IF ID EXE MEM WB I6 IF ID EXE MEM WB

ตอไปเปน Case II: add กบ sw เปน delayed branch T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11

I1 IF ID EXE MEM WB I2 IF ID EXE MEM WB I3 IF ID EXE MEM WB I4 IF ID EXE MEM WB I5 IF ID EXE MEM WB I6 IF ID EXE MEM WB

ลองมาดเคสตอไปกนดกวา!

Branch Taken!

Delayed Slot!

Page 24: 204225 Finals

lw $1, 8($2) //Stall Warning! add $2, $1, $5 sub $8, $9, $10 //Stall Warning! addi $7, $8, 50 beq $9, $10, tgt lw $10, 8($1) //Stall Warning! tgt; or $12, $10, $10

นเปนโคดทมปญหาเรองการล าดบโปรแกรม เราตองสลบล าดบโปรแกรม หาวธจดการกบปญหา hazards ใหไดมากทสด

ปญหาคอ beq -> lw -> tgt เพราะมนใช $10 หมดเลย แนวคดทปลอดภยทสดคอเราเอาสงทอยกอน branch และเปนสงทยงไงกตองท ามาใช เปนการแก control hazard สวนการแก data hazard ท าไดงายมากโดยการสลบ I2 <-> I3

โปรแกรมใหมจะเปน

lw $1, 8($2) sub $8, $9, $10 add $2, $1, $5 beq $9, $10, tgt addi $7, $8, 50 lw $10, 8($1) //Stall Warning! tgt; or $12, $10, $10

แตกยงมปญหา (อยาคดวามนงาย!) เราตองแกโดยการเอา add มาไวในต าแหนงคน lw กบ or แตวาเราตองท าให add ท างานไมวาจะ taken หรอ not taken เราจงตองยายตว tgt ขนมาไมใหโดนขาม โปรแกรมทถกตองจงเปน

lw $1, 8($2) sub $8, $9, $10 beq $9, $10, tgt addi $7, $8, 50 lw $10, 8($1) tgt: add $2, $1, $5 or $12, $10, $10

ทงน ในบางกรณไมสามารถท าไดจรงๆ กม ตองยอมรบและปลอยให stall ไป

Memory & Cache

Basics of Cache

เราจะอางถง cache กนเปน block (1 block มไดหลาย byte ทอยในรปของ 2^n) ในแตละ block จะมจ านวน byte ทจะถก address ไดเปนก าลงของสอง (1,2,4,8,...)

o ปกตเราจะนยมให byte/block มากกวา 1 เพราะ spatial locality ซงชดเจนมากในระดบไบต เพราะตวแปรมกเปนตวแปรขนาด 4 byte

Page 25: 204225 Finals

ส าหรบ n-way set associative cache ใน 1 set จะม n blocks

An Example

32-bit address, 128kB Direct-mapped cache. 16 bytes per block.

Offset Bits = 4 (because: 16 bytes per block) Index Bits = 17-4 = 13 bits (because 128k / 16 = 213) Tag Bits = 32-4-13 = 15 bits (it’s what remains)

Tag (15) Index (13) Offset(4)

Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 0

Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 1

Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 2

Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte Byte ByteBlock 213-1

...

Byte Byte Byte Byte

แตเอาเขาจรงๆ เรานยมแบงขอมลใหเปน Words มากกวา (เวลาเราท างานสวนใหญก 32-bit) ดงนน เมอเราม 4 bytes มาตดๆ กน เรากจะรวมมนเปน 1 Word ดงนน เราจะตอง ”เสยสละ” Offset ของเรามาเปน “Byte Offset” 2 bit และเรยกทเหลอวา “Word Offset” แทน

Tag (15) Index (13) BW

Block 0

Block 1

Block 213-1

...

Word Word Word Word

Word Word Word Word

Word Word Word Word

New Problem!

Address 32 bits, 8-way set associative

# blocks = 16

# bytes per block = 32

จงหา

Offset bits Index bits Tag bits Size of Cache

Size of Cache ไมยาก ก

Page 26: 204225 Finals

ถามวา offset เทาไหรตอบงายมาก เพราะเราม 32 = 25 bytes per block เราจงตองใช 5 บตในการอางถงทงหมด ตอบ 5 offset bits

มนเรมยาก เพราะนเปน 8-way set associative ค าวา 8-way หมายถงเราม 8 blocks per set ดงนน

เนองจากเรามแค 2 sets เราใชบตเดยวกมากเพยงพอทจะเลอกวาจะเอา set ไหน จงตอบวา 1 bit ส าหรบ index bits และทเหลอจะกลายเปน tag โดยอตโนมต คอ 32-5-1 = 26

มาดโครงสรางทเสรจแลวกนดกวา

Tag (26) I Offset (5)

Block Block Block Block Block Block Block Block

Block Block Block Block Block Block Block Block

Set 0

Set 1

Another problem! Arrrgh!

Address ขนาด 10 บท, Cache ม 4 blocks, จ านวน bytes/block = 4 และเปน 2-way set associative และแทนท block ดวย LRU

Access 0:10001101 1:10110010 2:10111111 3:10001100 4:10011100 5:11101001 6:11111110 7:11101001

Tag 0010001 0010110 0010111 0010001 0010011 0011101 0011111 0011101 Set 1 0 1 1 1 0 1 0 Offset 01 10 11 00 00 01 10 01

Acc. 0 B0 B1 Acc. 2 B0 B1 Acc. 4 B0 B1 Acc. 6 B0 B1 Set 0 Set 0 0010110 Set 0 0010110 Set 0 0010110 0011101

Set 1 0010001 Set 1 0010001 0010111 Set 1 0010001 0010011 Set 1 0011111 0010011

Acc. 1 B0 B1 Acc. 3 B0 B1 Acc. 5 B0 B1 Acc. 7 B0 B1 Set 0 0010110 Set 0 0010110 Set 0 0010110 0011101 Set 0 0010110 0011101

Set 1 0010001 Set 1 0010001 0010111 Set 1 0010001 0010011 Set 1 0011111 0010011

ความหมายของค าทใชคอ

4 bytes per block = 2 offset bits 2-way set associative -> 2 blocks per set = ½ sets per block -> ½ sets per block * 4 blocks = 2 sets ดงนน index 1 bit

Hit Ratio เราอยท 25% เพราะ 8 access เราได hit 2 ครง

Least Recently Used!

Page 27: 204225 Finals

Appendix A: Single-Cycle Datapath and Control

PC

Instr.Memory

Read Address

Registers

MUX

Instr[20:16]

Instr[25:21]

Instr[15:11]

0

Read Reg.1

Read Reg.2

Write Reg.

Write Data

Read data 1

Read data 2

Sign Extend

(16->32)

Instr[15:0]

Control

RegDst

RegWrite

Zero

Result

MUX

0

ALUSrc

ALU Control

ALUOp

Instr[5:0]

Write Data

Address

MemWrite

MUX

0

MemtoReg

Read Data

MemRead

Shift Left 2

ADDADD

4

MUX

0

Branch

Instruction Signals Instruction RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOp2

R-Format 1 0 0 1 0 0 0 1 0 lw 0 1 1 1 1 0 0 0 0 sw X 1 X 0 0 1 0 0 0 beq X 0 X 0 0 0 1 0 1

Instruction Formats

0

35 or 43

4

rs

rs

rs

rt

rt

rt

rd

address

address

shamt funct

15 bits6 bits 5 bits 5 bits

5 bits 5 bits 5 bits

R-Type

Load/Store

Branch

Page 28: 204225 Finals

Appendix B: Division of Regions in Single-Cycle and Pipelined CPU

PC

Instr.Memory

Read Address

Registers

MUX

Instr[20:16]

Instr[25:21]

Instr[15:11]

0

Read Reg.1

Read Reg.2

Write Reg.

Write Data

Read data 1

Read data 2

Sign Extend

(16->32)

Instr[15:0]

Control

RegDst

RegWrite

Zero

Result

MUX

0

ALUSrc

ALU Control

ALUOp

Instr[5:0]

Write Data

Address

MemWrite

MUX

0

MemtoReg

Read Data

MemRead

Shift Left 2

ADDADD

4

MUX

0

Branch

IF ID/REG EXE/ALUMEM WB

MUX

PCInstruction

Memory

4

HazardDetection

Registers

Signed-Extend

<<2

Control

EX

M

WBMUX

0

FLUSH

=

MUX

MUXMUX

MUX

Forwarding Unit

M

WB

Memory

WB

MUX

ค าเตอน: ไมรบประกนความถกตอง ส าหรบ Pipeline Diagram ดไดท Patterson & Hennessy p.370

Page 29: 204225 Finals

Boilerplate เอกสารบนทกนบนทกจากการสอนวชา 01204225 Computer Architecture & Organization เฉพาะชวงหลงสอบกลางภาค โดย อาจารย ดร.ภารจ รตนวรพนธ ภาควชาวศวกรรมคอมพวเตอร มหาวทยาลยเกษตรศาสตร ในภาคปลาย ปการศกษา 2553

ผจดบนทกไมมสทธใดๆ ในเนอหารายวชาและ/หรอสวนประกอบอนใดทมาจากแหลงภายนอก บนทกนมวตถประสงคเพอการศกษาเทานน

แผนภาพสวนใหญวาดใหพอเพยงส าหรบการใชในหองสอบเทานน และอาจไมครบถวนตามแตกรณ

จดบนทกโดย LunaticNeko CPE23 และน าออกสสาธารณะในวนท 27 พฤษภาคม 2554 หากตองการแจงขอผดพลาดใดๆ กรณาอเมลแจงท chawanat.n [at] gmail [dot] com (กรณาอยาใชชองทางอนแมจะทราบ เนองจากไมไดดแลทกชองทาง) จกเปนพระคณยง