Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
1,45 MB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH ƠN TẬP Kiến trúc máy tính - CO2008 Binh Tran-Thanh thanhbinh.hcmut@gmail.com January, 2019 Tieu luan Nội dung Kiểu lệnh 1.1 Bài tập 3 Single clock processor 2.1 Single clock processor 2.2 Kiến trúc single cycle 2.2.1 Phần cứng 2.2.2 Data-path 2.3 Bài tập 2.4 Đáp án/Gợi ý 4 4 5 Pipeline processor 3.1 Pipeline processor 3.1.1 Các bước pipeline 3.1.2 Hiệu suất 3.2 Hazard 3.2.1 Structural hazard 3.2.2 Data hazards 3.2.3 Phương pháp giải data hazard 3.3 Control hazard 3.4 Bài tập 3.5 Đáp án/gợi ý 10 10 11 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 Thời gian truy xuất nhớ trung bình 4.5 Bài tập 4.6 Đáp án/Gợi ý 4.7 Virtual Memory Tieu luan 13 13 13 13 13 14 15 15 15 16 17 17 19 Kiểu lệnh R-type Op6 Rs5 Kiểu I-type Op6 Rs5 Kiểu J-type Op6 Rt5 Rd5 Shamt5 Rt5 F unction6 Immediate16 Immediate26 • Op (opcode) Mã lệnh, dùng để xác định lệnh thực thi (trong kiểu R, Op = 0) • Rs, Rt, Rd (register): Trường xác định ghi (trường ghi bit tương ứng với 32 ghi) • Shamt (shift amount): Xác định số bits dịch lệnh dịch bit • Function: Xác định tốn tử(operator hay cịn gọi lệnh) kiểu lệnh R • Immediate: Đại diện cho số trực tiếp, địa chỉ, offset 1.1 Bài tập Bài 1.1 Cho đoạn code hợp ngữ MIPS sau: addi $a0, $zero, 100 addi $a1, $zero, add $a2, $zero, $zero loop: beq add addi j # upper threshold # count variable # sum initialization $a0, $a1, exit $a2, $a2, $a1 $a1, $a1, loop exit: (a) Xác định loại lênh lệnh đoạn code (b) Xét lệnh beq $a0, $a1, exit, xác định khoảng cách rẽ nhánh tối đa (đơn vị tính theo byte, theo lệnh) lệnh beq (c) Giả sử địa bắt đầu đoạn chương trình 0x1000_0000 Xác định mã máy lệnh j loop (d) Giả sử lệnh j loop có mã máy 0x0809_0A0B, PC 0x4000_0080 Sau thực thi lệnh j loop giá trị PC Tieu luan Single clock processor 2.1 Single clock processor • Ưu điểm: Một lệnh thực thi chu kỳ Máy tính đơn giản, dễ hiểu, dễ thực • Nhược điểm: Một chu kỳ tốn nhiều thời gian, lệnh dù nhanh hay chậm thực thi chu kỳ → hiệu suất thấp 2.2 2.2.1 Kiến trúc single cycle Phần cứng Hình 1: Kiến trúc xử lý MIPS single clock cycle • Thanh PC: Trỏ đến lệnh thực thi • Instruction memory: Chứa code, chương trình thực thi (phần text) • Registers file: Gồm 32 ghi, cần bit để xác định ghi (25 = 32) Để xác định chi tiết ghi, ta tham khảo Bảng • Sign-extend: Bộ mở rộng dấu, mở rộng dấu 16 bits → 32 bits • Bộ chọn (MUX): Dùng để chọn input cho output tương ứng Tín hiệu select đưa lựa chọn • ALU: Thực tính tốn • Data memory: Là vùng nhớ liệu (phần data) Chỉ có lệnh LOAD STORE truy xuất vào khối Data Memory Tieu luan • Control: Khối điều khiển, sinh tín hiệu điều khiển dựa vào mã lệnh Opcode 2-3 4-7 8-15 16-23 24-25 26-27 28 29 30 31 zero at v0-v1 a0-a3 t0-t7 s0-s7 t8-t9 k0-k1 gp sp fp/s8 Bảng 1: Danh sách 32 ghi REGISTERS 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 Bảng 2: Ý nghĩa tín hiệu điều khiển Ta giả sử tín hiệu tích cực mức cao (HIGH) Tín hiệu Ý nghĩa RegDest RegWrite ALUSrc Chọn ghi kết Ghi kết vào ghi Chọn toán hạng cho ALU:thanh ghi số (immediate) Ghi vào data memory Cho phép ghi Đọc từ data memory Cho phép đọc Dùng để chọn đường từ data mem- Dữ liệu từ data memory ory đến ghi → ghi (lệnh load) Dùng cho lệnh rẽ nhánh có Lệnh branch điều kiện Dùng cho lệnh nhảy khơng có Lệnh jump điều kiện Chú ý: Không quan tâm đến RegDst, MemtoReg Memwrite MemRead MemtoReg Branch Jump 2.2.2 trị KHÔNG tích cực Chọn Rt để ghi kết Khơng cho phép Chọn ghi Không cho phép Không cho phép Dữ liệu từ ALU → ghi Không phải lệnh branch Khơng phải lệnh jump tín hiệu RegWrite = Data-path ALU Load Store Branch Jump 2.3 Giá Tích cực Chọn Rd để ghi kết Cho phép ghi Chọn số Bảng 3: Các bước thực thi lệnh MIPS Instruction Decode Execute Write Back Fetch Instruction Memory Decode Execute Fetch Read Instruction Memory Decode Execute Fetch Write Instruction Decode Execute Fetch Instruction Decode Fetch Bài tập Dùng lại kiến trúc miêu tả Hình để trả lời câu hỏi bên dưới: Tieu luan Write Back Cho bảng delay khối phần cứng Bảng bên dưới: I-MEM 200ps ADDER 10ps MUX 30ps ALU 180ps REG 150ps D-MEM 200ps Control 10ps Bài 2.1 Xác định đường có độ trễ lâu lệnh and, load tính độ trễ đó? Bài 2.2 Xác định tín hiệu khối control thực thi lệnh beq $8, $9, label Với $8 = x00FF, $9 = 0x00FE Bài 2.3 Thành phần phần cứng không sử dụng ta thực thi lệnh slti, lệnh j Bài 2.4 Bỏ qua delay khối adder, mux, control Xác định data path thời gian loại lệnh sau • ALU • Load • Store • Branch • Jump Bài 2.5 Xác định thời gian single cycle multi-cycle Bài 2.6 Giả sử có chương trình gồm 40% ALU, 20% Loads, 10% Stores, 20% Branches, 10% Iumps Tính CPI trường hợp single cycle, multi cylce Bài 2.7 Tính speed up hệ thống Multi cycle hệ thống single clock cycle 2.4 Đáp án/Gợi ý Bài 2.1 Critical path • and: 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 hiệu điều khiển Xét lệnh beq $8, $9, label Với $8 = 0x00FF, $9 = 0x00FE Tín hiệu RegDest RegWrite ALUSrc Memwrite MemRead MemtoReg Branch J ALUop Giá trị x 0 x x 10 Giải thích don’t care Khơng ghi kết vào ghi Chọn ghi để so sánh với ghi $8 Không truy xuất vào vùng data don’t care Lệnh rẽ nhánh Không phải lệnh jump Tham khảo Bảng ?? Bài 2.3 Hoạt động khối phần cứng Lệnh slti dùng để set giá trị ghi đích lên ghi đem so sánh nhỏ số cho trước, ngược lại reset giá trị ghi đích xuống ghi đem so sánh lớn số cho trước Ví dụ: slti $t1, $t2, 100 Khi ghi $t2 < 100 $t1 = 1, ngược lại $t2 >= 100 $t1 = Từ ta xét khỗi‘ phần cứng mà lệnh slti qua sau: PC (lệnh qua PC) → I-MEM (lệnh qua I-MEM) → control unit, Reg files, MUX (2x), Sign extend, (không qua cộng PC) → ALU → (không qua D-MEM) → MUX → Reg files Bài 2.4 Data path, thời gian thực thi lệnh Tieu luan Instruction Instruction class memory ALU 200 Load 200 Store 200 Branch 200 Jump 200 Register read 150 150 150 150 150 ALU Operation 180 180 180 180 Data memory 200 200 Total 500 730 730 530 350 ps ps ps ps ps Bài 2.5 Thời gian chu kỳ hệ thống single cycle hệ thống multi cycle • Thời gian chu kỳ hệ thống single cycle = max(thời gian thực thi tất lệnh) Lệnh load lệnh có thời gian thực thi lâu 730 ps → thời gian chu kỳ single cycle = 730 ps • Thời gian hệ thống multi cycle = max IF (InstructionM emory), ID(RegisterF iles), EXE(ALU ), M EM (D max(200, 150, 180, 200, 150) = 200 → thời gian multi cycle = 200ps Bài 2.6 CPI (Cycle per instruction: số chu kỳ lệnh) • CPI hệ thống single cycle = (1 chu thi lnh) ã CPI ca multi cycle = 0.4 ì + 0.2 × + 0.1 × + 0.2 × + 0.1 × = 3.8 (ALU cycles; Load cycles; Store cycles; Branch cycles; Jump cycles) Bài 2.7 Thời gian thực thi Thời gian chạy chương trình = IC × CP I× thời gian chu kỳ = IC × CP I/f • IC: số lệnh • CPI: số chu kỳ lệnh • f: tần số Thời gian chạy hệ thống single cycle: IC × × 730 Thời gian chạy hệ thống multi cycle: IC × 3.8 × 200 Speedup = (1 × 730)/(3.8 × 200) = 730/760 = 0.96 Trong trường hợp ta thấy hệ thống Multi clock cycle lại không hiệu hệ thống Single clock cycle vì: • Các bước thực thi có thời gian khơng • Những lệnh nhiều bước (load, store) chiếm phần lớn chương trình • Trong hệ thống single clock cycle q trình write back thực thi chu kỳ nên cycle time hệ thống single clock cycle giảm Tieu luan Pipeline processor 3.1 Pipeline processor 3.1.1 Các bước pipeline Bộ xử lý Pipeline chia trình thực thi lệnh thành bước, bước thực thi trong chu kỳ IF: Lấy lệnh (khối Instruction Memory), 32bits lệnh chứa thông tin lệnh lấy từ instruction memory ID: Giải mã lệnh (khối Registers Control), xác định toán tử, tín hiệu điều khiển, nội dung ghi, giá trị immediate EXE: Thực thi tác vụ lệnh (khối ALU) MEM: Truy xuất vùng nhớ (khối Data Memory) - dùng cho lệnh load/store WB: Ghi kết vào ghi (khối Registers) 3.1.2 Hiệu suất Ta chia trình thực lệnh thành k bước (tổng quát) • Thời gian thực thi N lệnh hệ thống single cycle = N × single cycle • Thời gian thực thi N lệnh hệ thống pipeline = (k + N -1) × pipeline cycle Lệnh đầu tiên: k chu kỳ, n -1 lệnh lại, lại lệnh chu kỳ Trường hợp lý tưởng: single cycle = k × pipeline cycle Khi speedup = k × n × pipelinecycle (k + n − 1) × pipelinecycle Khi chương trình đủ lớn n → ∞ speedup → k (pipeline nhanh tối đa gấp k lần single cycle) Chú ý: • Pipeline không rút ngắn thời gian thực thi lệnh, mà tăng hiệu suất lên cách tăng thơng (through-put) máy • Khi bước lệnh có thời gian thực thi khác (các bước khơng nhau) làm giảm speed up • Thời gian fill drain đồng thời làm giảm speed up • Để thực pipeline người ta dùng ghi để lưu kết lại bước – Tín hiệu từ khối control unit (main control) – Tất tín hiệu điều khiển sinh bước ID – Mỗi bước dùng số tín hiệu điều khiển – RegDst dùng bước ID – ExtOp, ALUSrc, ALUCtrl, J, Beq, Bne, zero dùng bước EXE – MemRead, MemWrite, MemtoReg dùng bước MEM – RegWrite dùng bước WB 3.2 Hazard Khi thực pipeline gây loại hazards: structural, data, control 3.2.1 Structural hazard Xảy có tranh chấp tài nguyên phần cứng, lệnh dùng chung phần cứng chu kỳ Tieu luan 3.2.2 Data hazards Xảy có phụ thuộc liệu kiểu Read After Write (RAW) Các kiểu phụ thuộc liệu • Read After Write – RAW Hazard add $s1, $s2, $s3 sub $s4, $s1, $s3 Pipeline c1 c2 IF ID IF c3 EXE ID #thanh ghi $s1 duoc ghi #thanh ghi $s1 duoc doc c4 c5 c6 MEM WB EXE MEM WB Data hazard xuất lệnh (2) đọc nội dung $s1 bước ID (chu kỳ 3), lệnh (1) lại cập nhập kết $s1 bước WB (chu kỳ 5) • Write After Read: Name Dependence sub $t4, $t1, $t3 # $t1 duoc doc truoc add $t1, $t2, $t3 # $t1 duoc ghi sau Không có phụ thuộc liệu đây, có phụ thuộc tên biến $t1 Để loại bỏ phụ thuộc tên biến, ta đổi tên ghi sub $t4, $t1, $t3 add $t5, $t2, $t3 • Write After write: Name Dependence sub $t1, $t4, $t3 # $t1 duoc ghi add $t1, $t2, $t3 # $t1 duoc ghi lan nua Khơng có phụ thuộc liệu đây, có phụ thuộc tên biến Kết phụ thuộc vào lệnh (2) Để loại bỏ phụ thuộc tên biến, ta đổi tên ghi sub $t1, $t4, $t3 add $t5, $t2, $t3 • Read After Read: khơng gây phụ thuộc 3.2.3 Phương pháp giải data hazard Chèn stall (aka bubble, delay) Chèn stall để đảm bảo lệnh trước cập nhập kết lệnh sau (phụ thuộc vào kết đó) đọc kết chu kỳ Phương pháp khơng tốn tài nguyên phần cứng (giá thành), tạo delay cho chương trình (giảm hiệu suất) Dùng kỹ thuật forwarding (xúc tiến sớm) • Phương pháp cần thêm tài nguyên phần cứng (giá thành tăng) để thực kết hợp với chèn stall cần thiết • Khi xảy data hazard lệnh load lệnh kề tiếp nó, cho dù ta có dùng kỹ thuật forward phải tốn stall để giải chúng • Để thực forward, người ta thêm mux cho việc lựa chọn input cho ALU Các lệnh (ngoại trừ lệnh load) kết cho bước ALU (EXE) nên ta dùng kỹ thuật forward khơng cịn stall Chú ý: Tieu luan • Các forwarding forward vị trí EXE ALU nơi bắt đầu tính tốn → cần đưa input trước ALU • Forward kết chu kỳ n từ chu kỳ n-1 (là chu kỳ trước n) Sắp xếp lại code xếp lại code (phần mềm) giúp giảm thiểu stalls việc xếp phải đảm bảo thứ tự trước sau có phụ thuộc đảm bảo tính đắn chương trình 3.3 Control hazard Xét đoạn chương trình bên label: beq $t1, addi $t1, addi $t2, j exit addi $t1, addi $t2, $t2, label $zero, 100 $zero, 100 $zero, 10 $zero, 10 exit: Sau IF (lấy lệnh) beq, chu kỳ ta giải mã beq lấy lệnh Câu hỏi lệnh sau lệnh branch lệnh nào? • Khi $t1 = $t2, lúc điều kiện lệnh beq thỏa nên rẽ nhánh đến label lệnh lệnh dịng thứ • Khi $t1 != $t2, lúc điều kiện lệnh beq khơng thỏa nên thực lệnh tiếp theo, lệnh lệnh dòng thứ Hiện tượng control hazard Để giải control hazard ta dùng phương pháp chèn stall tiên đoán kết hợp chèn stall Ta biết bước EXE bước thực việc so sánh điều kiện, sau bước MEM cập nhập ghi PC Đó sau bước MEM ta biết xác lệnh sau lệnh branch lệnh Nên ta cần phải chèn stall (khi bước IF nằm sau bước MEM lệnh branch) để loại bỏ control hazard Trong trường hợp có thêm phần cứng để so sánh trước ghi bước ID, tính tốn địa rẽ nhánh lúc đó, ta cần chu kỳ (1 stall) để giải control hazard Ngoài ta dùng tiên đốn để tăng hiệu suất chương trình Tiên đốn bit tiên đốn bit 3.4 Bài tập Thời gian delay khối cho bảng bên I-MEM ALU REG D-MEM 200ps 150ps 200ps 200ps Bài 3.1 Bỏ qua độ trễ khối ADD, MUX, Control Tính thời gian chu kỳ hệ thống single cycle, pipeline clock? Bài 3.2 Tính thời gian thực thi chương trình gồm 150 line code single cycle pipeline Từ tính speed up để so sánh single cycle pipeline (không có stall) Bài 3.3 Giả sử chương trình khơng có stall thống kê có ALU 50%, Beq 25%, lw 15%, sw10% Tính speed up multi cycle pipeline Dùng đoạn code sau để trả lời câu hỏi bên addi addi add lw lw and sw $t1, $t2, $t3, $t4, $t5, $t6, $t6, $zero, 100 $zero, 100 $t1, $t2 0($a0) 4($a0) $t4, $t5 8($a0) 10 Tieu luan Bài 3.4 Xác định phụ thuộc RAW (read after write) lệnh ghi gây phụ thuộc Bài 3.5 Chèn stall để giải hazard trên, cần stall? Bài 3.6 Sắp xếp lại thứ tự lệnh cho chạy đoạn code stall mà chương trình giữ tính đắn Bài 3.7 Dùng kỹ thuật forward để giải hazard cịn stall 3.5 Đáp án/gợi ý Bài 3.1 Thời gian chu kỳ single cycle, pipeline Single cycle = thời gian thực thi lệnh dài (lệnh 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 Thời gian thực thi chương trình, speed up single cycle pipeline CP Isingleclockcycle = CP Ipipeline = T imesinglecycle = 150 × 750 = 112500ps T imeP ipeline = (5 + 150 − 1) × 200 = 30800ps 142500 = 3.65 Speed up = 30800 Bài 3.3 Thời gian thực thi chương trình, speed up multi cycle pipeline CP IM ultiCycle = 50%×4 + 25%×3 + 15%×5 + 10%×4= 3.9 CP IP ipeline = Time = Số lệnh × CPI × thời gian chu kỳ T imeM ultiCycle = 150×3.9×200 T imeP ipeline = (5 + 150 - 1)×1×200 Speed up = 3.80 Bài 3.4 Phụ thuộc liệu Read After Write addi addi add lw lw and sw $t1, $t2, $t3, $t4, $t5, $t6, $t6, $zero, 100 $zero, 100 $t1, $t2 0($a0) 4($a0) $t4, $t5 8($a0) Lệnh (3) phụ thuộc lệnh (2) (1) Lệnh (6) phụ thuộc lệnh (5) (4) Lệnh (7) phụ thuộc lệnh (6) Bài 3.5 Giải data hazard cách chèn stall stall stall (2) (3) stall (5) (6) stall (6) (7) Lúc chèn stall vào đảm bảo chỗ cần giải mã giá trị ghi (ID) phải chu kỳ ghi kết (WB) Bài 3.6 Sắp xếp lại lệnh Một cách xếp làm giảm stall (4) → (5) → (1) → (2) → (6) → (3) → (7) 11 Tieu luan lw lw addi addi add add sw $t4, $t5, $t1, $t2, $t6, $t3, $t6, 0($a0) 4($a0) $zero, 100 $zero, 100 $t4, $t5 $t1, $t2 8($a0) #4 #5 #1 #2 #6 #3 #7 Còn lại stall Bài 3.7 Giải data hazard forwarding Cịn stall lệnh (5) (6) Hình ảnh so sánh hệ thống single cycle, multi cycle pipeline cycle Single clock cycle Load Add IF ID EXE MEM WB MEM WB IF MEM EXE ID IF WB MEM EXE ID IF WB MEM EXE ID Multi cycle Load IF ID EXE IF ID Jump EXE MEM ID EXE WB WB MEM EXE WB MEM WB Add WB IF ID Store EXE Jump Store IF IF ID ID MEM WB EXE MEM IF ID Branch EXE MEM WB IF ID EXE MEM WB Branch IF ID EXE Pipeline IF ID IF EXE ID IF • Single Clock Cycle: Một lệnh thực thi chu kỳ Ví dụ lệnh load thực thi chu kỳ(màu xanh), lệnh store thực thi chu kỳ( màu vàng) Thời gian màu xanh vàng • Multi Clock Cycle: lệnh thực thi nhiều chu kỳ Ví dụ lệnh Load thực thi chu kỳ (5 chu kỳ nhỏ tương ứng với chu kỳ lớn bên single clock cycle), lệnh Store thực thi chu kỳ (màu vàng) • Pipeline Lệnh thực thi chu kỳ, lệnh lại sau chu kỳ hoàn thành xong lệnh Các yếu tố ảnh hưởng đến hiệu suất hệ thống: • Độ dài chương trình (instruction count) • Số chu kỳ lệnh (CPI) • Thời gian chu kỳ (clock cycle time) 12 Tieu luan Memory 4.1 Memory SRAM DRAM (xem slide) 4.2 Cache Nguồn gốc Cache: tốc độ phát triển CPU nhanh so với Memory nên CPU truy xuất Memory tạo delay lớn, cần có cache để làm đệm ALU MEM Cache thường làm SRAM nên truy xuất nhanh, dụng lượng nhỏ giúp giảm giá thành Bảng 4: Tốc độ thời gian truy xuất loại memory Type Size Access time Registers size < KB < 0.5 ns Level Cache size – 64 KB ns Level Cache 512KB – 8MB – 10 ns Main Memory – 16 GB 50 – 100 ns Disk Storage > 200 GB – 10 ms Temporal Locality: (tính cục thời gian) biến, thực thể truy xuất truy xuất lần Thường xuất vòng lặp, hay gọi hàm/thủ tục nhiều lần Đối với truy xuất theo thời gian xu hướng thường giữ block cache nhằm truy xuất lại lần sau Spatial Locality: (tính cục không gian) lệnh/data vùng nhớ truy xuất lệnh/data gần truy xuất Thường xuất khai báo mảng, thực thi Đối với truy xuất theo khơng gian xu hướng thường chuẩn bị trước block 4.2.1 Block placement Phương pháp đặt block vào cache Direct mapped Mỗi block xác định vị trí đặt Cho N số set (= số block) cache Block ID M nhớ (RAM) đặt vào vị trí set M % N cache Fully associative Block đặt vào vị trí trống cache K-way set associative Một set bao gồm K blocks (K có dạng 2x ) Trong set có K lựa chọn Cho N số set (K block tạo thành set) cache, Block thứ M nhớ (RAM) đặt vào vị trí set M % N cache 4.2.2 Block identification Để xác định địa người ta chia địa làm phần Tag, Index, block offset Tag Index Block Offset 13 Tieu luan Hình 2: Hình ảnh so sánh cấu hình Direct map, k-way associative, full associative Với k =2 Block offset Xác định thành phần block truy xuất Để xác định block offset có bit, ta xác định block có phần tử Xác định số phần tử cách lấy (size of block)/(size of đơn vị truy xuất) Byte-offset Xác định byte block Half-word-offset Xác định bytes block Word-offset Xác định word block Index Dùng để xác định số set nhớ đệm • Direct mapped: block set • K-way Set Associative: k block tạo thành set • Fully Associative: toàn block thành set Index lúc bit – không cần xác định set Xác định số block cách lấy (size of cache)/(size of block) Tag Để xác định block nằm cache kết hợp với index để xác định block ID RAM Tag bit = không gian địa – index – bytes offset Trong trường hợp khơng đề cập đến khơng gian địa ta dùng không gian 32 bit 4.2.3 Block replacement Khi block vào mà khơng cịn chỗ trống để đặt vào cần phải thay block cũ block Dưới số giải thuật thay thể • Trong trường hợp direct mapped, set có block nên có block vào block cũ bị thay khơng có sách thay trường hợp • FIFO: đặt vào trước lấy trước • Ramdom • LRU: (least recently used) dùng thay trước • FILO: vào trước sau 14 Tieu luan 4.2.4 Write strategy Chiến lược ghi ngược lại cache, memory Write Through Updata cache memory, cần bit valid để xác định block có valid hay khơng • Đơn giản, dễ thực • Tốn lưu lượng băng thơng hệ thống phải update nhiều Write Back Chỉ updata cache, có u cầu hay cần thay update giá trị sau xuống memory Cần bit valid để xác định block có valid hay khơng bit modified để xác định block có update chưa • Khó thực • Ít tốn lưu lượng băng thơng hệ thống 4.2.5 Miss/hit • Miss: cần truy xuất mà tìm khơng thấy cache Do phải đưa block chứa địa cần truy xuất vào cache, sau truy xuất lại • Hit: cần truy xuất tìm thấy muốn truy xuất cache • Ngồi liệu, nhớ đệm cịn thêm trường thơng tin: – Valid: xác định có block tồn set hay không – Tag: xác định block ID chứa block Cache • Miss Penalty: số chu kỳ để xử lý cache miss • Hit_rate = M it_times Hit_times + M iss_times • M iss_rate = M isstimes = − Hit_rate Hit_times + M iss_times • I-Cache Miss Rate = Miss rate lúc truy xuất I-MEM • D-Cache Miss Rate = Miss rate lúc truy xuất D-MEM Ví dụ 1: Chương trình có 1000 lệnh có 25% load/store Biết 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ố lần miss instruction / số lần truy xuất I-MEM = 150/1000 = 15% • D-Cache Miss Rate = số lần miss data/ số lần truy xuất D-MEM = 50/(1000×25%) = 50/250 = 20% 4.3 CPI Khi cache miss gây stall Để xác định stall, ta tìm thơng s sau: ã Memory stall cycles = Combined Misses ì Miss Penalty • Miss Penalty: số chu kỳ để giải việc 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 15 Tieu luan • 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: Tổng số lệnh – LS-count: Số lệnh Load/Store – LS Frequency: Tỉ lệ lệnh Load/Store chương trình Ví dụ 2: Cho chương trình có 106 lệnh, 30% lệnh loads/stores D-cache miss rate 5% I-cache miss rate 1% Miss penalty 100 chu kỳ Tính combined misses per instruction and memory stall cycles • 1% + 30% * 5% = 0.025 combined misses Mỗi lệnh tương đương 25 misses 1000 lệnh • Memory stall cycles = 0.025 * 100 (miss penalty) = 2.5 stalled 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 khơng có stall, Cache miss rate 2% instruction 5% data Lệnh loads stores chiếm 20% Miss penalty 100 chu kỳ I-cache D-cache Tính CPI hệ thống? • Mem stalls cho lệnh = 0.02*100 + 20%*0.05*100 =3 • CPI Memory Stalls = 1.5 + = 4.5 cycles 4.4 Thời gian truy xuất nhớ trung bình Average Memory Access Time (AMAT) AMAT = Hit time + Miss rate × Miss Penalty Do để giảm thời gian truy xuất: • Ta giảm Hit time: cách dùng nhớ cache nhỏ (tăng miss rate :D), đơn giản • Giảm Miss Rate: cách dùng nhớ cache lớn , block size lớn (tăng Hit time) k-way set associativity với k lớn • Giảm Miss Penalty cách dùng cache nhiều mức Ví dụ 4: Tìm thời gian truy xuất trung bình biết hit time chu kỳ, miss penalty 20 chu kỳ, miss rate 0.05 % Biết máy tính chạy với tần số 0.5Ghz • AMAT (cycles) = + 0.05 ì 20 = cycles ã 0.5 Ghz → chu kỳ 2ns • AMAT (time) = 2×2 = 4ns Ví dụ 5: Tìm thời gian truy xuất trung bình biết thời gian truy xuất cache L1 chu kỳ, thời gian truy xuấtcache L2 10 chu kỳ, thời gian truy xuất nhớ 100 chu kỳ, miss rate L1 5%, miss rate L2 10% Biết máy tính chạy với tần số 1Ghz • AMAT (cycles) = + 5% x 20 + 10%ì100 = 20 cycles ã 1Ghz chu k 1ns ã AMAT (time) = 20ì1= 20 ns 16 Tieu luan 4.5 Bài tập Bài 4.1 Cho nhớ cache có dung lượng 256KB, block size word, lần truy xuất byte Xác định số bit trường tag, index, block offset trường hợp • Direct mapped • Fully associcative • 2-Way set associcative Bài 4.2 Cho nhớ có dung lượng 1G, nhớ cache có dung lượng 1MB, block size 256B, lần truy xuất word Xác định số bit trường tag, index, block offset trường hợp • Direct mapped • Fully associcative • 4-Way set associcative Bài 4.3 Trong cache có blocks, block words Xác định số lần miss/hit hệ thống truy xuất vào địa (dạng byte) theo thứ tự sau: 0x0001_002A 0x0001_0020 0x0002_006A 0x0002_0066 0x0002_0022 0x0001_002B Trong trường hợp: • Direct mapped • Fully associcative • 2-Way set associcative 4.6 Đáp án/Gợi ý Byte-offset: xác định byte block Word-offset: xác định word block index: xác định set block Tag: xác định block cache Tag + index: xác định block nhớ Direct mapped: block set k-Way Set Associative: k block (k = 2x ) set Fully associative: Tấc block set Bài 4.1 Xác định tag, index, byte-offset Số phần tử block = (size of block)/(size of phần tử truy xuất) = word /1 byte = 4x4 bytes/ byte = 16 = 24 Số block cache = (size of cache) / (size of block) = 256 KB / words = 28 ∗ 210 /4 ∗ = 214 blocks Không gian địa 32 bit • Direct mapped: byte-offset bits, index = 14 bits, tag = 32 – - 14 = 14 bits • Fully associcative: byte-offset bits, index = bits, tag = 32 – = 28 bits • 2-Ways set associative: block tạo thành set mà có 214 blocks nên có 213 sets, byte-offset bits, index = 13 bits, tag = 32 -4 - 13 = 15 bits Bài 4.2 Xác định tag, index, word-offset Số phần tử block = (size of block)/(size of phần tử truy xuất) = 256B / bytes = 26 Số block cache = size of cache / size of block = 1MB / 256B = 210 x210 /28 = 212 blocks Khơng gian địa 1G, ta dùng ghi 30 bit tính theo byte-offset 17 Tieu luan • Direct mapped: word-offset bits, index = 12 bits, tag = 30 – – 12 – = 10 bits • Fully associcative: word-offset bits, index = bits, tag = 30 – – = 22 bits • ways set associative: block tạo thành set mà có 212 blocks nên có 210 sets, word-offset bits, index = 10 bits, tag = 30 – - 10 - = 12 bits Chú ý: khơng gian tính theo byte phải chuyển byte-offset để tính: số bit địa = số bit tag, index, byte-offset Bài 4.3 HIT/MISS Ta tính có bits byte-offset, bits index Do ta phân tích địa bên dưới: Cách 1: Direct map Address 0x0001002A 0x00010020 0x0002006A 0x00020066 0x00020022 0x0001002B 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0001 0010 0010 0010 0001 0000 0000 0000 0000 0000 0000 Tag 0000 0000 0000 0000 0000 0000 Fully associative Address 0x0001002A 0000 0x00010020 0000 0x0002006A 0000 0x00020066 0000 0x00020022 0000 0x0001002B 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0001 0010 0010 0010 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ways set associative, cần bit index Address 0x0001002A 0000 0000 0000 0001 0x00010020 0000 0000 0000 0001 0x0002006A 0000 0000 0000 0010 0x00020066 0000 0000 0000 0010 0x00020022 0000 0000 0000 0010 0x0001002B 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 Tag 0000 00 0000 00 0000 01 0000 01 0000 00 0000 00 Index 010 010 110 110 010 010 Tag 0010 0010 0110 0110 0010 0010 Offset 1010 0000 1010 0110 0010 1011 Offset 1010 0000 1010 0110 0010 1011 Index 10 10 10 10 10 10 Miss/Hit M H M H M M Miss/hit M H M H M H Offset 1010 0000 1010 0110 0010 1011 Giải thích First access First access Khác tag Khác tag Giải thích First access First access First access Miss/hit M H M H M M Giải thích First access First access Khác tag Khác tag Cách 2: • Lấy địa chia cho kích thước block kết (A) dùng để xác định block RAM • Lấy kết (A) modulo số set kết index • Lấy kết (A) chia số set kết tag blocks cache → block words Direct map sets block 16 bytes Address Address/block size = A Tag = A / 0x0001002A 4098 512 0x00010020 4098 512 0x0002006A 8198 1024 0x00020066 8198 1024 0x00020022 8194 1024 0x0001002B 4098 512 18 Index = A % 2 6 2 Tieu luan Miss/Hit M H M H M M Giải thích First access First access Khác tag Khác tag Fully associative 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 2-way set associative, cần bit index Address Address/block size = A 0x0001002A 4098 0x00010020 4098 0x0002006A 8198 0x00020066 8198 0x00020022 8194 0x0001002B 4098 Tag = A / 1024 1024 2049 2049 2048 1024 4.7 Miss/hit M H M H M H First access First access Index = A % 2 2 2 Virtual Memory Xem sách 19 Giải thích First access Tieu luan Miss/Hit M H M H M M Giải thích First access First access Khác tag Khác tag ... kỳ Máy tính đơn giản, dễ hiểu, dễ thực • Nhược điểm: Một chu kỳ tốn nhiều thời gian, lệnh dù nhanh hay chậm thực thi chu kỳ → hiệu suất thấp 2.2 2.2.1 Kiến trúc single cycle Phần cứng Hình 1: Kiến. .. 1.1 Bài tập 3 Single clock processor 2.1 Single clock processor 2.2 Kiến trúc single cycle 2.2.1 Phần cứng 2.2.2 Data-path 2.3 Bài tập ... Branch Jump 2.2.2 trị KHƠNG tích cực Chọn Rt để ghi kết Không cho phép Chọn ghi Không cho phép Không cho phép Dữ liệu từ ALU → ghi Không phải lệnh branch Khơng phải lệnh jump tín hiệu RegWrite