TRƯNG ĐI HC BÁCH KHOA KHOA KHOA HC & K THUT MÁY TÍNH
Kin trúc máy tính - CO2008 ÔN TP
[email protected]
Tp.HCM 11/2016
Ni dung 1 Kiu lnh
1.1 Bài tp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Single clock processor
2.1 Single clock processor 2.2 Kin trúc single cycle 2.2.1 phn cng . . . 2.2.2 Datapath . . . 2.3 Bài tp . . . . . . . . 2.4 Đáp án/Gi ý . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
3 Pipeline processor
3.1 Pipeline processor . . . . . . . . . . . . . . . 3.1.1 Các bưc trong pipeline . . . . . . . . 3.1.2 Hiu sut. . . . . . . . . . . . . . . . . 3.2 Hazard . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Structural hazard . . . . . . . . . . . . 3.2.2 Data hazards . . . . . . . . . . . . . . 3.2.3 Phương pháp gii quyt data hazard. . 3.3 Control hazard . . . . . . . . . . . . . . . . . 3.4 Bài tp . . . . . . . . . . . . . . . . . . . . . 3.5 Đáp án/gi ý . . . . . . . . . . . . . . . . . .
4 Memory
4.1 Memory . . . . . . . . . . . . . . . . . . 4.2 Cache . . . . . . . . . . . . . . . . . . . 4.2.1 Block placement . . . . . . . . . 4.2.2 Block identification . . . . . . . . 4.2.3 Block replacement . . . . . . . . 4.2.4 Write strategy . . . . . . . . . . 4.2.5 Miss/hit . . . . . . . . . . . . . . 4.3 CPI . . . . . . . . . . . . . . . . . . . . 4.4 Thi gian truy xut b nh trung bình . 4.5 Bài tp . . . . . . . . . . . . . . . . . . 4.6 Đáp án/Gi ý . . . . . . . . . . . . . . . 4.7 Virtual Memory . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .. .. .. . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
3
3
3
3 4 4 6 6 6
8
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.. . . . . . . . . . . .. . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.. . . . . . . . . . . .. . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.. . . . . . . . . . . . . . . . . .. . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.. . . . . . . . . . . .. . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. 8 . 8 . 8 . 8 . 8 . 8 . 9 . 10 . 10 . 11
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .. . . . . . . . . . . .. .. .. . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
2
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
12
12 12 12 13 14 14 14 15 15 16 16 18
Ôn Tp 1 Kiu lnh R-type Op6
Rs5
Rt5
Rd5
Rs5
Rt5
Shamt5 Function6
Kiu I-type Op6
Immediate16
Kiu J-type Op6
•
Immediate26
Op (operation code) Mã lnh, dùng đ xác đnh kiu lnh, và lnh thc thi (Kiu R thì Op = 0).
•
Rs, Rt, Rd (register): Trưng xác đnh thanh ghi (trưng thanh ghi 5 bit tương ng vi 32 thanh ghi).
•
Shamt (shift amount): Xác đnh s bits dch trong các lnh dch bit.
•
Function: Xác đnh toán t(operator hay còn gi là lnh) trong kiu lnh R.
•
Immediate: S trc tip, đa ch.
1.1 Bài tp Bài 1.1. Cho đon code hp ng MIPS sau: addi $a0, $zero, 100 addi $a1, $zero, 0 add $a2, $zero, $zero
1 2 3 4
loop: beq $a0, $a1, exit add $a2, $a2, $a1 addi $a1, $a1, 1 j loop
5 6
7 8 9
// upper threshold // count variable // sum initialization
exit:
(a) Xác đnh loi lênh ca tng lnh trong đon code trên. (b) Xét lnh 5, xác đnh khong cách r nhánh ti đa ca lnh beq (c) Gi s đa ch bt đu ca đon chương trình trên là 0x 10 00 00 00. Xác đnh mã máy ca lnh j loop
2 Single clock processor 2.1 Single clock processor •
•
Ưu đim: Mt lnh mt chu kỳ, đơn gin. Nhưc đim: Mt chu kỳ tn nhiu thi gian, mi lnh dù nhanh hay chm đu thc thi trong mt chu kỳ, hiu sut thp.
3
2.2 Kin trúc single cycle 2.2.1 phn cng
Hình. 1: Kin trúc b x lý MIPS single clock cycle •
•
•
•
•
•
•
•
Thanh PC: Tr đn lnh đang thc thi. Instruction memory: Cha code thc thi, khi này ch cho phép đc. Registers file: Cha 32 thanh ghi, do đó cn 5 bit đ xác đnh thanh ghi (25 = 32). Đ xác đnh chi tit thanh ghi, ta tham kho Bng 1. Sign-extern: B m rng du, m rng du 16 bits
→
32 bits.
B chn (MUX): Dùng đ chn input cho output tương ng. Tín hiu select đưa ra s la chn. ALU: Thc hin tính toán. Data memory: Là vùng nh đ cha d liu trong phn data. Ch có lnh LOAD và STORE mi truy xut vào khi Data Memory này . Control: Khi điu khin, sinh ra tín hiu điu khin da vào mã lnh Opcode.
4
Bng. 1: Danh sách 32 thanh ghi REGISTERS
0 zero 1 at 2-3 v0-v1 4-7 a0-a3 8-15 t0-t7 16-23 s0-s7 24-25 t8-t9 26-27 k0-k1 28 gp 29 sp 30 fp/s8 31 ra
Always equal to zero Assembler temporary; used by the assembler Return value from a function call First four parameters for a function call Temporary variables; need not be preserved Function variables; must be preserved Two more temporary variables Kernel use registers; may change unexpectedly Global pointer Stack pointer Stack frame pointer or subroutine variable Return address of the last subroutine call
Bng. 2: Giá tr ALUop Input output 4 bit encoding Op[6bit] funct[6bit] ALUCtrl R-type Add ADD 0000 R-type Sub SUB 0010 R-type And AND 0100 R-type Or OR 0101 R-type Xor XOR 0110 R-type Slt SLT 1010 Addi X ADD 0000 Slti X SLT 1010 Andi X AND 0100 Ori X OR 0101 Xori X XOR 0110 Lw X ADD 0000 Sw X ADD 0000 Beq X SUB 0010 Bne X SUB 0010 J X X xxxx
Bng. 3: Ý nghĩa ca các tín hiu điu khin. Ta gi s tín hiu tích cc mc cao (HIGH).
Tín hiu RegDest RegWrite ALUSrc Memwrite MemRead MemtoReg Branch Jump
Ý nghĩa Chn thanh ghi kt qu Cho phép ghi kt qu ngưc vào thanh ghi Chn thanh ghi hoc s đ đưa vào ALU Cho phép ghi vào vùng data memory Cho phép đc t vùng data memory Dùng đ chn đưng t data memory đn thanh ghi Dùng cho các lnh nhy/r nhánh có điu kin Dùng cho các lnh nhy/r nhánh không có điu kin
Giá tr (tích cc) Chn Rd đ ghi kt qu Cho phép
Giá tr (không tích cc) Chn Rt đ ghi kt qu Không cho phép
Chn input là s
Chn input là thanh ghi
Cho phép ghi
Không cho phép ghi
Cho phép đc
Không cho phép đc
Chn đưng t data memory đn thanh ghi (lnh load) Khi điu kin tha mãn, PC s r nhánh 1 đon đn nhãn Nhy đn nhãn cn
Chn đưng t kt qu ca ALU đn thanh ghi Khi điu kin không tha, PC thc thi lnh tip theo PC ch đn lnh tip theo
5
Chú ý: Không quan tâm đn RegDst, Memread, MemtoReg khi tín hiu RegWrite = 0 2.2.2 Datapath
Bng lit kê các bưc thc thi ca các lnh.
ALU
Load
Store
Branch Jump
Bng. 4: Các bưc ca lnh MIPS. Instruction Decode Execute Write Back Fetch Instruction Decode Execute Memory Fetch Read Instruction Memory Decode Execute Fetch Write Instruction Decode Execute Fetch Instruction Decode Fetch
Write Back
2.3 Bài tp Dùng li kin trúc đưc miêu t Hình 1 đ tr li các câu hi bên dưi: Cho bng delay ca các khi phn cng như Bng bên dưi: I-MEM ADDER MUX ALU REG D-MEM Control 200ps 10ps 30ps 180ps 150ps 200ps 10ps Bài 2.1. Xác đnh đưng đi có đ tr lâu nht ca lnh AND, LOAD, và tính đ tr đó? Bài 2.2. Xác đnh các tín hiu ca khi control khi thc thi lnh BEQ $8, $9, LABEL. Vi $8 = 0x00FF, $9 =
0x00FE
Bài 2.3. Thành phn phn cng nào không s dng khi ta thc thi lnh SLTI , lnh J . Bài 2.4. B qua delay ca các khi adder, mux, control. Xác đnh data path và thi gian ca các loi lnh sau.
ALU • LOAD • STORE • BRANCH • JUMP •
Bài 2.5. Xác đnh thi gian ca single cycle và multi-cycle Bài 2.6. Gi s có 1 chương trình gm 40% ALU, 20% Loads, 10% stores, 20% branches, và 10% jumps. Tính CPI
trong trưng hp single cycle , multi cylce.
Bài 2.7. Tính speed up ca h thng Multi cycle đi vi h thng single clock cycle.
2.4 Đáp án/Gi ý Bài 2.1. Critical path.
ADD: I-MEM(200) → REGs(150) → MUX(30) → ALU(180) → MUX(30) = 590 • LOAD: I-MEM (200) → REGs(150) → ALU(180) → D-MEM(200) → MUX(30) = 760 •
Bài 2.2. Xác đnh tín hiu điu khin.
Xét lnh beq $8, $9, lable . Vi $8 = 0x00FF, $9 = 0x00FE. Lnh này xét so sánh giá tr 2 thanh ghi: nu thanh ghi $8 mà bng thanh ghi $9 thì nó s nhy đn nhãn label. Nu $8 khác $9 thì h thng s thc hin lnh tip theo. Ta thy ni dung thanh ghi $8 và $9 khác nhau nên lnh BEQ không thc hin nhy đn nhãn label. T đó, ta đưa ra tín hiu cho lnh B beq $8, $9, lable như sau:
6
Tín hiu RegDest RegWrite ALUSrc Memwrite MemRead MemtoReg Branch J ALUop
Giá tr Gii thích x don’t care 0 Không ghi kt qu vào thanh ghi 0 Chonj thanh ghi đ so sánh vi thanh ghi $8 0 Không truy xut vào vùng data x don’t care x don’t care 1 Lnh r nhánh 0 Lnh branch không phi lnh jump 10 Tham kho Bng 2
Bài 2.3. Hot đng khi phn cng.
Lnh slti dùng đ set giá tr thanh ghi đích lên 1 nu thanh ghi đem so sánh nh hơn s cho trưc, ngưc li nó s reset giá tr thanh ghi đích xung 0 nu thanh ghi đem so sánh ln hơn s cho trưc. Ví d: slti $t1, $t2, 100 Khi thanh ghi $t2 < 100 thì $t1 = 1, ngưc li khi $t2 >= 100 thì $t1 = 0. T đó ta xét các khi‘ phn cng mà lnh slti đi qua như sau: Qua I-MEM (lnh nào cũng qua I-MEM) → control unit, Reg files, MUX (2x), Sign extend, không đi qua b cng PC → ALU → không qua D-MEM → MUX → Reg files. Bài 2.4. Data path, thi gian thc thi lnh.
Instruction class ALU Load Store Branch Jump
Instruction memory 200 200 200 200 200
Register read 150 150 150 150 150
ALU Operation 180 180 180 180
Data memory 200 200
Total 500 ps 730 ps 730 ps 530 ps 350 ps
Bài 2.5. Thi gian chu kỳ ca h thng single cycle và h thng multi cycle
Tính thi gian ca h thng single cycle = max(thi gian thc thi ca tt c các lnh). Lnh LOAD là lnh có thi gian thc thi lâu nht 880 ps → thi gian ca single cycle = 730 ps. • Tính thi gian ca h thng multi cycle = max{ca 5 bưc} = max{IF (Instruction Memory), ID (Register Files), EXE (ALU), MEM (Data Memory), WB (Register Files)} = max{200, 150, 180, 200, 150} = 200 → thi gian ca multi cycle = 200ps. •
Bài 2.6. CPI (Cycle per instruction: s chu kỳ trên lnh).
CPI ca h thng single cycle = 1 (1 chu kỳ thc thi 1 lnh). • CPI ca multi cycle = 0.4 × 4 + 0.2 × 5 + 0.1 × 4 + 0.2 × 3 + 0.1 × 2 = 3.8 •
(ALU 4 cycles; Load 5 cycles; Store 4 cycles; Branch 3 cycles; Jump 2 cycles) Bài 2.7. Thi gian thc thi.
Thi gian chy ca 1 chương trình = I C × CP I × thi gian 1 chu kỳ = I C × CPI/f . IC: s lnh. • CPI: s chu kỳ trên mt lnh. • f: tn s. •
Thi gian chy trên h thng single cycle: IC × 1 × 730. Thi gian chy trên h thng multi cycle: IC × 3.8 × 200. Speedup = (1 × 730)/(3.8 × 200) = 730/760 = 0.96. Trong trưng hp này ta thy h thng Multi clock cycle li không hiu qu bng h thng Single clock cycle vì: Các bưc thc thi có thi gian không đu. • Nhng lnh nhiu bưc (load, store) chim phn ln trong chương trình • Trong h thng single clock cycle quá trình write back đưc thc thi chu kỳ tip theo nên cycle time ca h thng single clock cycle gim. •
7
3 Pipeline processor 3.1 Pipeline processor 3.1.1
Các bưc trong pipeline
Pipeline chia lnh thc thi ra thành 5 bưc, mi bưc thc thi trong trong mt chu kỳ •
IF: Ly lnh, 32bits lnh cha các thông tin ca 1 lnh đưc ly ra t instruction memory.
•
ID: Gii mã lnh, xác đnh loi lnh, toán t, các tín hiu điu khin, ni dung các thanh ghi, giá tr
immediate ...
•
EXE: Thc thi tác v lnh.
•
MEM: Truy xut vùng nh - ch dùng cho lnh load/store.
•
WB: Ghi kt qu vào thanh ghi.
3.1.2 Hiu sut.
Ta chia quá trình thc hin lnh ra thành k bưc. •
Thi gian thc thi N lnh trên h thng single cycle = N × single cycle.
•
Thi gian thc thi N lnh trên h thng pipeline = (k + N -1) × pipeline cycle. Lnh đu tiên: mt k chu kỳ, n -1 lnh còn li: còn li mi lnh 1 chu kỳ.
Trưng hp lý tưng: single cycle = k × pipeline cycle. Khi đó speedup =
k × n × pipelinecycle (k + n − 1) × pipelinecycle
Khi n → ∞ thì speedup → k (tc là pipeline nhanh ti đa gp k ln single cycle) Chú ý: •
•
Pipeline không rút ngn thi gian thc thi ca mt lnh, mà ch tăng hiu sut lên bng cách tăng thông năng (through-put) ca máy. Khi các bưc ca mt lnh có thi gian thc thi khác nhau thì s làm gim speed up. Thi gian fill và drain cũng đng thi làm gim speed up.
•
•
Đ hin thc pipeline ngưi ta dùng thanh ghi đ lưu kt qu li mi bưc. – Tín hiu t khi control unit (main control) – Tt c tín hiu điu khin đưc sinh ra bưc ID – Mi bưc dùng 1 s tín hiu điu khin – RegDst đưc dùng trong bưc ID – ExtOp, ALUSrc, ALUCtrl, J, Beq, Bne, zero đưc dùng trong bưc EXE – MemRead, MemWrite, MemtoReg dùng trong bưc MEM – RegWrite dùng trong bưc WB
3.2 Hazard Khi hin thc pipeline s gây ra các loi hazard: structural hazard, data hazard, control hazard. 3.2.1
Structural hazard
Xy ra khi có s tranh chp tài nguyên phn cng, 2 lnh cùng dùng chung phn cng trong cùng chu kỳ. 3.2.2 Data hazards
Xy ra khi có s ph thuc d liu kiu Read After Write (RAW). 8
S ph thuc d liu •
Read After Write – RAW Hazard I. add $s1, $s2, $s3 J. sub $s4, $s1, $s3
1 2
#thanh ghi $s1 duoc ghi #thanh ghi $s1 duoc doc
Pipeline c1 c2 c3 c4 c5 c6 IF ID EXE MEM WB IF ID EXE MEM WB Data hazard xut hin khi lnh J đc ni dung $s1 bưc ID chu kỳ th 3 mà lnh I li đưa ra kt qu ca $s1 bưc WB chu kỳ th 5. •
Write After Read: Name Dependence I: sub $t4, $t1, $t3 # $t1 duoc doc truoc J: add $t1, $t2, $t3 # $t1 duoc ghi sau
1 2
Không có s ph thuc d liu đây, ch có ph thuc tên bin $t1. Đ loi b s ph thuc v tên bin, ta đi tên thanh ghi. I: sub $t4, $t1, $t3 J: add $t5, $t2, $t3
1 2
•
Write After write: Name Dependence I: sub $t1, $t4, $t3 # $t1 duoc ghi J: add $t1, $t2, $t3 # $t1 duoc ghi lan nua
1 2
Không có s ph thuc d liu đây, ch có ph thuc tên bin. Kt qu ch ph thuc vào lnh J sau. Đ loi b s ph thuc v tên bin, ta đi tên thanh ghi. I: sub $t1, $t4, $t3 J: add $t5, $t2, $t3
1 2
•
Read After Read: không gây ra s ph thuc.
3.2.3
Phương pháp gii quyt data hazard.
Chèn stall
Chèn stall đ đm bo lnh trưc tr kt qu v mà lnh sau có th đc đưc kt qu đó trong cùng chu kỳ. Phương pháp này không tn tài nguyên phn cng (giá thành), ch to ra delay cho chương trình (gim hiu sut). Dùng k thut forwarding xúc tin sm.
Phương pháp này cn thêm tài nguyên phn cng (giá thành tăng) đ hin thc kt hp vi chèn stall khi cn thit. Khi xy ra hazard đi vi lnh load và lnh nm k sau nó, cho dù ta có dùng k thut forward thì cũng phi tn 1 stall đ gii quyt chúng. Đ hin thc forward, ngưi ta thêm b mux cho vic la chn input cho ALU. Các lnh (ngoi tr lnh load) thì kt qu đưc cho ra bưc ALU (EXE) nên khi ta dùng k thut forward s không còn stall na. Chú ý: •
•
Các forwarding đu forward v v trí EXE vì ALU là nơi bt đu tính toán → cn đưa input trưc ALU. Forward kt qu v chu kỳ n t chu kỳ n-1 (là chu kỳ trưc n).
Sp xp li code
Vic sp xp phi đm bo th t trưc sau khi có s ph thuc và đm bo tính đúng đn ca chương trình. 9
3.3 Control hazard Xét đon lnh sau Dùng đon code sau đ tr li các câu hi bên dưi 1 2 3 4 5 6 7
beq $t1, addi $t1, addi $t2, j exit label: addi $t1, addi $t2, exit:
$t2, label $zero, 100 $zero, 100 $zero, 10 $zero, 10
Sau khi IF (ly lnh) beq, chu kỳ tip theo ta gii mã beq và ly lnh tip theo. Lnh tip theo sau lnh branch là lnh nào? •
•
Khi $t1 = $t2, lúc đó điu kin lnh beq tha nên nó r nhánh đn label thì lnh tip theo là lnh dòng th 5. Khi $t1 != $t2, lúc đó điu kin lnh beq không tha nên nó thc hin lnh tip theo, khi đó lnh tip theo là lnh dòng th 2.
Hin tưng trên là control hazard. Đ gii quyt control hazard ta có th dùng phương pháp chèn stall hoc tiên đoán kt hp chèn stall. Ta bit bưc EXE là bưc hin thc vic so sánh điu kin, sau đó bưc MEM s cp nhp thanh ghi PC. Đó đó sau bưc MEM ta mi bit chính xác là lnh tip theo sau lnh branch là lnh nào. Nên ta cn phi chèn 3 stall (khi đó bưc IF nm sau bưc MEM ca lnh branch) đ loi b control hazard. Ngoài ra ta có th dùng tiên đoán đ tăng hiu sut ca chương trình. Tiên đoán 1 bit và tiên đoán 2 bit
3.4 Bài tp Thi gian delay ca mi khi cho như bng bên dưi. I-MEM ALU REG D-MEM 200ps 150ps 200ps 200ps Bài 3.1. B qua đ tr ca khi ADD, MUX, Control. Tính single cycle, pipeline clock? Bài 3.2. Tính thi gian thc thi ca chương trình gm 150 line code đi vi single cycle và pipeline. T đó tính
speed up đ so sánh single cycle và pipeline (không có stall)
Bài 3.3. Gi s chương trình không có stall và thng kê đưc là có ALU 50%, Beq 25%, lw 15%, sw10%. Tính
speed up gia multi cycle và pipeline. Dùng đon code sau đ tr li các câu hi bên dưi
1 2 3 4 5 6 7
addi $t1, addi $t2, add $t3, lw $t4, $t5, lw and $t6, $t6, sw
$zero, 100 $zero, 100 $t1, $t2 Label_4 Label_5 $t4, $t5 Label_KQ
Bài 3.4. Xác đnh s ph thuc RAW (read after write) gia các lnh và thanh ghi nào gây ra s ph thuc đó. Bài 3.5. Chèn stall đ gii quyt hazard trên, cn bao nhiêu stall? Bài 3.6. Sp xp li th t các lnh sao cho khi chy đon code đó thì ít stall nht mà chương trình vn gi tính
đúng đn.
Bài 3.7. Dùng k thut forward đ gii quyt hazard khi đó còn bao nhiêu stall.
10
3.5 Đáp án/gi ý Bài 3.1. Thi gian chu kỳ single cycle, pipeline.
Single cycle = thi gian thc thi lnh dài nht (lnh load). = I-Mem → Regs → ALU → D-Mem. = 200 + 200 + 150 + 200 = 750ps Pipeline clock = max (I-Mem, Regs, ALU, D-Mem, Regs) = 200ps Bài 3.2. Thi gian thc thi chương trình, speed up gia single cycle và pipeline. CP I singleclockcycle = 1. CP I pipeline = 1. Timesinglecycle = 150 × 750 = 112500 ps TimeP ipeline= (5 + 150 - 1)×200 = 30800 ps 142500 Speed up = = 3.65 30800
Bài 3.3. Thi gian thc thi chương trình, speed up gia multi cycle và pipeline CP I MultiCycle = 50%×4 CP I P ipeline = 1.
+ 25%×3 + 15%×5 + 10%×4= 3.9
Time = S lnh × CPI × thi gian 1 chu kỳ. TimeMultiCycle = 150×3.9×200. TimeP ipeline = (5 + 150 - 1) ×1×200. Speed up = 3.80. Bài 3.4. Ph thuc d liu Read After Write 1 2 3 4 5 6 7
addi $t1, addi $t2, add $t3, lw $t4, lw $t5, and $t6, $t6, sw
$zero, 100 $zero, 100 $t1, $t2 Lable_4 Lable_5 $t4, $t5 Lable_KQ
Lnh (3) ph thuc lnh (2) và (1). Lnh (6) ph thuc lnh (5) và (4). Lnh (7) ph thuc lnh (6). Bài 3.5. Gii quyt data hazard bng cách chèn stall
6 stall 2 stall gia (2) và (3). 2 stall gia (5) và (6). 2 stall gia (6) và (7). Lúc chèn stall vào đm bo là nhng ch cn gii mã giá tr thanh ghi (ID) phi cùng chu kỳ ghi kt qu (WB)
Bài 3.6. Sp xp li lnh.
Mt trong nhng cách sp xp làm gim stall (4) → (5) → (1) → (2) → (6) → (3) → (7)
1 2 3 4 5 6 7
lw $t4, $t5, lw addi $t1, addi $t2, add $t6, add $t3, $t6, sw
Label_4 Label_5 $zero, 100 $zero, 100 $t4, $t5 $t1, $t2 Label_KQ
#4 #5 #1 #2 #6 #3 #7
Còn li 1 stall gia 6 và 3 11
Bài 3.7. Gii quyt data hazard bng forwarding.
Còn 1 stall gia lnh (5) và (6).
Hình nh so sánh h thng single cycle, multi cycle và pipeline cycle Single clock cycle Load IF
ID
EXE
Multi cycle Load IF
ID
EXE
Add
MEM
WB
IF
MEM
WB
IF
MEM
WB
Add
Jump ID
EXE
MEM
WB
ID
EXE
WB
IF
IF
Jump
ID
ID
Store EXE
Store
IF
ID
MEM
WB
IF
EXE
MEM
IF
ID
Branch ID
Branch EXE
MEM
WB
IF
ID
EXE
EXE
Pipeline IF
ID
EXE
IF
ID
EXE
IF
ID
EXE
MEM
IF
ID
EXE
MEM
WB
IF
ID
EXE
MEM
MEM
WB WB WB
Các yu t nh hưng đn hiu sut ca h thng: •
Đ dài ca chương trình (instruction count)
•
S chu kỳ trên 1 lnh (CPI)
•
Thi gian ca 1 chu kỳ (clock cycle time).
4 Memory 4.1 Memory SRAM và DRAM (updated later)
4.2 Cache Ngun gc Cache: do tc đ phát trin ca CPU quá nhanh so vi Memory nên khi CPU truy xut Memory
s to ra delay khá ln, do đó cn có cache đ làm b đm gia ALU và MEM. Cache thưng đưc làm bng SRAM. Mc đích làm gim thi gian truy xut memory t CPU.
Bng. 5: Tc đ và thi gian truy xut ca các loi memory Type Size Access time Registers size < 1 KB < 0.5 ns Level 1 Cache size 8 – 64 KB 1 ns Level 2 Cache 512KB – 8MB 3 – 10 ns Main Memory 4 – 16 GB 50 – 100 ns Disk Storage > 200 GB 5 – 10 ms Temporal Locality (tính cc b v thi gian) mt bin, thc th đưc truy xut thì có th nó s đưc
truy xut ln na. Thưng xut hin trong nhng vòng lp, hay gi hàm/th tc nhiu ln. Đi vi truy xut theo thi gian thì xu hưng thưng gi block đó trong cache nhm truy xut li ln sau. Spatial Locality (tính cc b v không gian) lnh/data trong vùng nh khi đưc truy xut có th các lnh/data gn nó s đưc truy xut. Thưng xut hin trong khai báo mng, thc thi tun t. . . Đi vi truy xut theo không gian thì xu hưng thưng chun b trưc block k tip. 4.2.1
Block placement
Phương pháp đt block vào cache. Direct mapped
Mi block đưc xác đnh mt v trí đt duy nht. Cho N là s block trong cache. Block th M trong b nh (RAM) s đưc đt vào v trí set M % N trong cache. Full associative
Block đưc đt vào bt kỳ v trí nào còn trng trong cache. 12
MEM
WB
K-way set associative
Mt set bao gm K blocks (K có dng 2 x ). Trong set đó có K s la chn. Cho N là s set trong cache, Block th M trong b nh (RAM) s đưc đt vào v trí set M % N trong cache. Hình nh so sánh 3 cu hình Direct map, k-way associative, full associative. ví d trên k = 2.
Hình. 2: Directed map – 2-way set associative – Full set associative. 4.2.2
Block identification
Đ xác đnh đa ch ngưi ta chia đa ch ra làm 3 phn Tag, Index, block offset. Tag Index
Block Offset
Block offset
Xác đnh thành phn trong block đưc truy xut. Đ xác đnh block offset có bao nhiêu bit, ta đi xác đnh trong block đó có bao nhiêu phn t. Xác đnh s phn t bng cách ly (size of block)/(size of đơn v truy xut). Byte-offset Xác đnh byte trong block. Half-word-offset Xác đnh 2 bytes trong block. Word-offset Xác đnh word trong block. Index
Dùng đ xác đnh s set trong b nh đm. •
Direct mapped: 1 block là 1 set.
•
K-way Set Associative: k block to thành 1 set.
•
Full Associative: toàn b block thành 1 set. Index lúc này là 0 bit – không cn xác đnh set.
Xác đnh s block bng cách ly (size of cache)/(size of block). Tag
Đ xác đnh block nào đang nm trong cache hoc kt hp vi index đ xác đnh block ID trong RAM. Tag bit = không gian đa ch – index – bytes offset. Trong trưng hp không đ cp đn không gian đa ch thì ta dùng không gian 32 bit.
13
4.2.3
Block replacement
Khi mt block vào mà không còn ch trng đ đt vào thì cn phi thay block cũ bng block mi. •
Trong trưng hp direct mapped, vì mi set ch có 1 block nên khi nào có block mi vào thì block cũ b thay th do đó không có chính sách thay th trong trưng hp này.
•
FIFO: cái nào đưc đt vào trưc thì s đưc ly ra trưc.
•
Ramdom
•
LRU: cái nào ít dùng nht thì đưc thay th trưc.
•
FILO: vào trưc ra sau.
4.2.4
Write strategy
Chin lưc ghi ngưc li cache, memory Write Through
Updata c cache và memory, cn bit valid đ xác đnh block đó có valid hay không. •
•
Đơn gin, d hin thc Tn lưu lưng băng thông ca h thng vì phi update nhiu.
Write Back
Ch updata cache, khi có yêu cu hay cn thay th thì s update giá tr sau cùng xung memory. Cn bit valid đ xác đnh block đó có valid hay không và bit modified đ xác đnh block đó có update chưa. •
Khó hin thc
•
Ít tn lưu lưng băng thông ca h thng.
4.2.5 Miss/hit •
•
•
Miss: cn truy xut mà tìm không thy trong cache. Do đó phi đưa block cha đa ch cn truy xut vào cache, và sau đó truy xut li. Hit: cn truy xut và tìm thy cái mun truy xut trong cache. Ngoài d liu, b nh đm còn thêm các trưng thông tin: – Valid: xác đnh có block tn ti trong set hay không. – Tag: xác đnh block ID nào đang cha trong block ca Cache.
•
Miss Penalty: s chu kỳ đ x lý cache miss.
•
Hit rate =
•
Miss rate =
•
Miss rate + hit rate = 1.
hit . hit + miss miss . hit + miss
•
I-Cache Miss Rate = Miss rate trong lúc truy xut I-MEM.
•
D-Cache Miss Rate = Miss rate trong lúc truy xut D-MEM
Ví d 1: Chương trình có 1000 lnh trong đó có 25% là load/store. Bit lúc đc I-MEM b miss 150, D-MEM
b miss 50. Tìm I-Cache Miss Rate, D-Cache Miss Rate. •
•
I-Cache Miss Rate = s ln miss / s ln truy xut I-MEM = 150/1000 = 15%. D-Cache Miss Rate = s ln miss / s ln truy xut D-MEM = 50/(1000×25%) =50/250 = 20%.
14
4.3 CPI Khi cache miss thì s gây ra stall. Đ xác đnh bao nhiêu stall, ta đi tìm các thông s sau: • Memory stall cycles = Combined Misses × Miss Penalty. • Miss Penalty: s chu kỳ đ gii quyt vic miss. • Combined Misses = I-Cache Misses + D-Cache Misses. • I-Cache Misses = I-Count × I-Cache Miss Rate. • D-Cache Misses = LS-Count × D-Cache Miss Rate. • LS-Count (Load & Store) = I-Count × LS Frequency. • Memory Stall Cycles Per Instruction = Combined Misses Per Instruction × Miss Penalty. • Combined Misses Per Instruction = I-Cache Miss Rate + LS Frequency × D-Cache Miss Rate • Memory Stall Cycles Per Instruction = I-Cache Miss Rate × Miss Penalty + LS Frequency × D-Cache Miss Rate × Miss Penalty. Trong đó: – I-count: tng s lnh. – LS-count: s lnh Load/Store. – LS Frequency: t l lnh Load/Store trong chương trình. Ví d 2: Cho chương trình có 106 lnh, trong đó 30% lnh loads/stores. D-cache miss rate là 5% và I-cache miss rate là 1%. Miss penalty là 100 chu kỳ. Tính combined misses per instruction and memory stall cycles. • 1% + 30% * 5% = 0.025 combined misses. Mi lnh tương đương 25 misses trên 1000 lnh. • Memory stall cycles = 0.025 * 100 (miss penalty) = 2.5 stall cycles per instruction. • Total memory stall cycles = 106 * 2.5 = 2,500,000 • CPI Memory Stalls = CPI Perfect Cache + Mem Stalls per Instruction Ví d 3: Cho CPI = 1.5 khi không có stall, Cache miss rate là 2% đi vi instruction và 5% đi vi data. Lnh loads và stores chim 20%. Miss penalty là 100 chu kỳ đi vi I-cache và D-cache. Tính CPI ca h thng? • Mem stalls cho mi lnh = 0.02*100 + 20%*0.05*100 =3 • CPI Memory Stalls = 1.5 + 3 = 4.5 cycles
4.4 Thi gian truy xut b nh trung bình Average Memory Access Time (AMAT). AMAT = Hit time + Miss rate × Miss Penalty Do đó đ gim thi gian truy xut: • Ta gim Hit time: bng cách dùng b nh cache nh (tăng miss rate :D), đơn gin. • Gim Miss Rate: bng cách dùng b nh cache ln , block size ln (tăng Hit time) và k-way set associativity vi k ln. • Gim Miss Penalty bng cách dùng cache nhiu mc. Ví d 4: Tìm thi gian truy xut trung bình khi bit hit time 1 chu kỳ, miss penalty 20 chu kỳ, miss rate 0.05 %. Bit máy tính chy vi tn s 0.5Ghz • AMAT (cycles) = 1 + 0.05 × 20 = 2 cycles • 0.5 Ghz → 1 chu kỳ 2ns • AMAT (time) = 2 ×2 = 4ns Ví d 5: Tìm thi gian truy xut trung bình khi bit thi gian truy xut cache L1 là 1 chu kỳ, thi gian truy xutcache L2 là 10 chu kỳ, thi gian truy xut b nh chính là 100 chu kỳ, miss rate L1 5%, miss rate L2 10%. Bit máy tính chy vi tn s 1Ghz. • AMAT (cycles) = 1 + 5% x 20 + 10% ×100 = 20 cycles • 1Ghz → 1 chu kỳ 1ns • AMAT (time) = 20×1= 20 ns 15
4.5 Bài tp Bài 4.1. Cho b nh cache có dung lưng 256KB, block size là 4 word, mi ln truy xut 1 byte. Xác đnh s bit
ca các trưng tag, index, block offset trong các trưng hp. Direct mapped • Full associcative • 2-Way set associcative •
Bài 4.2. Cho b nh chính có dung lưng 1G, b nh cache có dung lưng 1MB, block size là 256B, mi ln truy
xut 1 word. Xác đnh s bit ca các trưng tag, index, block offset trong các trưng hp. Direct mapped • Full associcative • 4-Way set associcative •
Bài 4.3. Trong cache có 8 blocks, mi block là 4 words. Xác đnh s ln miss/hit khi h thng truy xut vào các
đa ch (dng byte) theo th t sau: 0x0001002A 0x00010020 0x0002006A 0x00020066 0x00020022 0x0001002B Trong các trưng hp: Direct mapped • Full associcative • 2-Way set associcative •
4.6 Đáp án/Gi ý Byte-offset: xác đnh byte trong block. Word-offset : xác đnh word trong block. index: xác đnh set trong block. Tag: xác đnh block trong cache. Tag + index: xác đnh block trong b nh chính. Direct mapped: mt block 1 set. k-Way Set Associative : k block (k = 2 x ) mt set. Full: Tc c block 1 set. Bài 4.1. Xác đnh tag, index, byte-offset.
S phn t trong 1 block = (size of block)/(size of phn t truy xut) = 4 word /1 byte = 4x4 bytes/ 1 byte = 16 = 2 4 . S block trong cache = (size of cache) / (size of block) = 256 KB / 4 words = 2 8 ∗ 210 /4 ∗ 4 = 214 blocks. Không gian đa ch là 32 bit. Direct mapped: byte-offset 4 bits, index = 14 bits, tag = 32 – 4 - 14 = 14 bits • Full associcative: byte-offset 4 bits, index = 0 bits, tag = 32 – 4 = 28 bits. 14 blocks nên có 213 sets, byte-offset 4 bits, • 2-Ways set associative: 2 block to thành 1 set mà có 2 index = 13 bits, tag = 32 -4 - 13 = 15 bits •
Bài 4.2. Xác đnh tag, index, word-offset.
S phn t trong 1 block = (size of block)/(size of phn t truy xut) = 256B / 4 bytes = 2 6 . S block trong cache = size of cache / size of block = 1MB / 256B = 2 10 x210 /28 = 212 blocks. Không gian đa ch là 1G, do đó ta dùng thanh ghi 30 bit tính theo byte-offset. Direct mapped: word-offset 6 bits, index = 12 bits, tag = 30 – 6 – 12 – 2 = 10 bits. • Full associcative: word-offset 6 bits, index = 0 bits, tag = 30 – 6 – 2 = 22 bits. 12 blocks nên có 210 sets, word-offset 6 bits, • 4 ways set associative: 4 block to thành 1 set mà có 2 index = 10 bits, tag = 30 – 6 - 10 - 2 = 12 bits. •
16
Chú ý: không gian tính theo byte thì phi chuyn v byte-offset đ tính: s bit ca đa ch = s bit ca
tag, index, và byte-offset. Bài 4.3. HIT/MISS
Ta tính đưc có 4 bits byte-offset, 3 bits index. Do đó ta phân tích đa ch như bên dưi: Cách 1: •
Direct map
Address 0x0001002A 0x00010020 0x0002006A 0x00020066 0x00020022 0x0001002B •
Index 010 010 110 110 010 010
Offset 1010 0000 1010 0110 0010 1011
Miss/Hit M H M H M M
Gii thích First access First access Khác tag Khác tag
Full associative
Address 0x0001002A 0x00010020 0x0002006A 0x00020066 0x00020022 0x0001002B •
Tag 0000 0000 0000 0001 0000 0000 0 0000 0000 0000 0001 0000 0000 0 0000 0000 0000 0010 0000 0000 0 0000 0000 0000 0010 0000 0000 0 0000 0000 0000 0010 0000 0000 0 0000 0000 0000 0001 0000 0000 0
Tag 0000 0000 0000 0001 0000 0000 0010 0000 0000 0000 0001 0000 0000 0010 0000 0000 0000 0010 0000 0000 0110 0000 0000 0000 0010 0000 0000 0110 0000 0000 0000 0010 0000 0000 0010 0000 0000 0000 0001 0000 0000 0010
Offset 1010 0000 1010 0110 0010 1011
Miss/hit Gii thích M First access H M First access H M First access H
2 ways set associative, cn 2 bit index
Address 0x0001002A 0x00010020 0x0002006A 0x00020066 0x00020022 0x0001002B
Tag 0000 0000 0000 0001 0000 0000 00 0000 0000 0000 0001 0000 0000 00 0000 0000 0000 0010 0000 0000 01 0000 0000 0000 0010 0000 0000 01 0000 0000 0000 0010 0000 0000 00 0000 0000 0000 0001 0000 0000 00
Index 10 10 10 10 10 10
Offset 1010 0000 1010 0110 0010 1011
Miss/hit M H M H M M
Gii thích First access First access Khác tag Khác tag
Cách 2: Ly đa ch chia cho kích thưc ca block đưc kt qu (A) dùng đ xác đnh block trong RAM • Ly kt qu (A) modulo s set đưc kt qu là index. • Ly kt qu (A) chia s set đưc kt qu là tag •
8 blocks cache → mi block là 4 words. •
Direct map 8 sets và mi block 16 bytes.
Address Address/block size = A 0x0001002A 4098 0x00010020 4098 0x0002006A 8198 0x00020066 8198 0x00020022 8194 0x0001002B 4098 •
Tag = A / 8 512 512 1024 1024 1024 512
Full associative
17
Index = A mod 8 2 2 6 6 2 2
Miss/Hit M H M H M M
Gii thích First access First access Khác tag Khác tag
Address Address/block size = A 0x0001002A 4098 0x00010020 4098 0x0002006A 8198 0x00020066 8198 0x00020022 8194 0x0001002B 4098 •
Tag = A 4098 4098 8198 8198 8194 4098
Miss/hit M H M H M H
Gii thích First access First access First access
2 ways set associative, cn 2 bit index
Address Address/block size = A 0x0001002A 4098 0x00010020 4098 0x0002006A 8198 0x00020066 8198 0x00020022 8194 0x0001002B 4098
Tag = A / 4 1024 1024 2049 2049 2048 1024
4.7 Virtual Memory
18
Index = A mod 4 2 2 2 2 2 2
Miss/Hit M H M H M M
Gii thích First access First access Khác tag Khác tag