- Kiến trúc single cycle o Thanh PC trỏ đến lệnh đang thực thi o Instruction memory: chứa code thực thi, khối này chỉ cho phép đọc o Registers file chứa 32 thanh ghi, do đó cần 5 bit để
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH
Ôn tập cuối kỳ
Môn: Kiến Trúc Máy Tính - 504002
TP HCM 11/2013
Trang 2Nội dung
I Single clock processor 3
I.1 Single clock processor 3
I.2 Bài tập 6
I.3 Đáp án/Gợi ý 7
II Pipeline processor 9
II.1 Pipeline processor 9
II.2 Bài tập 11
II.3 Đáp án/gợi ý 12
III Memory 14
III.1 Memory 14
III.2 Bài tập: 19
III.3 Đáp án/Gợi ý 20
Trang 3Thực hành kiến trúc máy tính Ôn tập ktmt CS 2013
3
Các yếu tố ảnh hưởng đến hiệu xuất của hệ thống
- Độ dài của chương trình (instruction count)
- Số chu kỳ trên 1 lệnh (CPI)
- Thời gian của 1 chu kỳ (clock cycle
time) Các kiểu format của tập lệnh trong MIPS
- Op: opcode của lệnh
- Rs, Rt, Rd: thanh ghi
- Sa: dùng trong lệnh shift
- Immediate: đại diện cho số
- Funct: 6 bit function
I Single clock processor
I.1 Single clock processor
- Ưa điểm: một clock một chu kỳ
- Nhược điểm: một chu kỳ tốn nhiều thời gian, mỗi lệnh dù nhanh hay chậm đều thực thi trong một chu kỳ
- Kiến trúc single cycle
o Thanh PC trỏ đến lệnh đang thực thi
o Instruction memory: chứa code thực thi, khối này chỉ cho phép đọc
o Registers file chứa 32 thanh ghi, do đó cần 5 bit để xác định thanh ghi nào
(25=32)
Để xác định chi tiết thanh ghi ta tham khảo bảng thanh ghi dưới
o Bộ mở rộng dấu: mục đích cơ bản là mở rộng dấu từ con số 16bit 32bits
o Bộ chọn (MUX): dùng để chọn ngõ vào trong trường hợp có nhiều ngõ vào và 1ngõ ra, hoăc chọn ngõ ra trong trường hợp có 1 ngõ vào và nhiều ngõ ra Tín hiệuselect quyết định sự lựa chọn đó
o ALU: thực hiện tính toán
o Data memory: là vùng nhớ để chứa dữ liệu trong phần data Chỉ có lệnh LOAD vàSTORE mới có thể truy xuất vào khối này
Trang 4Hình 1: Kiến trúc single cycle processor
- Bảng thanh ghi:
- Bảng giá trị của ALUop
encoding
Trang 5R-type Sub SUB 0010
- Ý nghĩa của các tín hiệu điều khiển
Ta mặc định hiểu tín hiệu tích cực là bằng 1, tín hiệu không tích cực là 0
Tín hiệu Ý nghĩa Giá trị = 1 Giá trị = 0
RegDest Chọn thanh ghi đích Rd làm thanh ghi đích Rt làm thanh ghi đích
RegWrite Cho phép ghi kết quả ngược Cho phép Không cho phép
vào thanh ghi
ExtOp Dùng cho phần mở rộng dấu Mở rộng dấu Không quan tâm, output của
của khi dùng con số khối này là zero
ALUSrc Chọn kiểu thực thi dựa vào kiểu Thanh ghi với số Thanh ghi với thanh ghi
lệnh như hình xxx
Memwrite Cho phép ghi vào vùng data Cho phép ghi Không cho phép ghi
memory(dùng cho lệnh store)
MemRead Cho phép đọc từ vùng data
memory Cho phép đọc Không cho phép đọc(dùng cho lệnh load)
MemtoReg Dùng để chọn đường từ data Chọn đường từ data Chọn đường từ kết quả của
memory đến thanh ghi memory đến thanh ALU đến thanh ghi(lệnh load) ghi(lệnh load) (dùng cho các lệnh tính toán
xong kết quả và lưa kết quả
đó vào thanh ghi)
Beq, Bne Dùng cho các lệnh nhảy có điều
kiện Nếu điều kiện nhảy thỏamãn, PC sẽ dời 1 đoạn Khi điều kiện không thỏa,khi đó PC = PC + 4 ( thực thi
Trang 6Chú ý:
Mình sẽ không quan tâm đến RegDest,Memread, MemtoReg khi tín hiệu RegWrite = 0
Khi ALUSrc = 0 thì ta không quan tâm đến Extop
Tham khảo thêm bộ tính hiệu của lệnh cụ thể ở slide “Main Control Signal Values” silde
45
- Bảng liệt kê đường đi có độ trễ lâu nhất của các lệnh (bỏ qua độ trễ của bộ mở rộng dấu,
MUX, ADDER, dây, PC)
Kiểu lệnh Data path
Fetch DecodePC Write
I.2 Bài tập
1) Dùng lại kiến trúc được miêu tả ở hình 1 để giải các câu
sau: Cho bảng delay của các khối như sau:
a) Xác định đường đi có độ trễ lâu nhất của lệnh AND, LOAD, và tính độ trễ đó?
ALU (trong ALU có nhiều bộ, bộ cộng, nhân, OR, AND …) Vì có nhiều hơn 2 bộ nên cần dùng nhiều hơn 1 bitTham khảo bảng dưới
Trang 7b) Xác định các tín hiệu của khối control unit (main Unit) khi thực thi lệnh BEQ $1, $2,ABC Với $1 = 0x00FF, $2 = 0x00FE
c) Thành phần phần cứng nào không sử dụng khi ta thực thi lệnh SLTI, lệnh J
2) Bỏ qua delay của các khối add, mux, control
a) Xác định data path và thời gian của các kiểu lệnh
c) Giả sử có 1 chương trình gồm 40% ALU, 20% Loads, 10% stores, 20% branches, & 10% jumps
a Tính CPI trong trường hợp single cycle , multi cylce
Bne 0 Không phải lệnh BNE
J 0 Lệnh branch không phải lệnh jump
Trang 8PCSrc 0 Điều kiện nhảy không xảy ra
1c)
2a)
2b)
2c)
- lệnh SLTI dùng để set giá trị thanh ghi đích lên 1 nếu thanh ghi đem so sánh nhỏ hơn 1
số cho trước, ngược lại nó sẽ reset giá trị thanh ghi đích xuống 0 nếu nếu thanh ghi đem
so sánh lớn hơn 1 số cho trước
Ví dụ SLTI $1, $2, 100 thì thanh ghi $1 = 1 khi $2 < 100, ngược lại $1 = 0 khi $2 >= 100
từ đó ta xét đường đi của lệnh như sau:
Qua I-MEM (lệnh nào cũng qua I-MEN) -> qua control unit, reg files, không dùng bộ mở rộng dấu, không dùng bộ công cho PC, dùng mux qua ALU không dùng D-MEM
qua MUX , Reg files
Instruction
class
Instruction memory
Register
Data memory
- CPI là số chu kỳ trên lệnh
o CPI của single cycle = 1
o CPI của multi cycle = 0.4×4 + 0.2×5 + 0.1×4+ 0.2×3 + 0.1×2 = 3.8
- Speed up = thời gian chạy của single cycle / thời gian chạy của multi cycle = (1 * 880) / (3.8 * 200) = 880/760 = 1.16
Thời gian chạy của 1 chương trình = CPI * thời gian của một cycle
Trang 9II Pipeline processor
II.1 Pipeline processor
- Pipe line chia lệnh thực thi ra thành 5 bước, mỗi bước thực thi trong trong một chu kỳ
o IF: lấy lệnh từ I-MEM lên
o ID: giải mã lệnh đó là lệnh gì, đọc giá trị thanh ghi, biết được địa chỉ cho lệnh nhảy, rẻ nhánh
o EX: thực thi lệnh hay là tính toán địa chỉ cho lệnh load/store
o MEM: truy xuất data đối với lệnh load/store
o WB: ghi ngược kết quả lại thanh ghi
- Hiệu suất của pipe line với single cycle
Ta chia lệnh ra thành k bước
o Thời gian thực thi n lệnh của single cycle = n * single cycle
o Thời gian thực thi n lệnh của pipe line = (k + n -1) * pipeline clock cycle
Ta giả sử single cycle = k* pipeline clock cycle
o Khi đó speedup = (n* k* pipeline clock cycle)/ ((k + n -1) * pipeline clock cycle) Khi n lớn thì speedup tiến đến k (tức là 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 của một lệnh, mà nó chỉ tăng hiệu xuất lênbằng cách tăng thông năng của máy Khi mà các bước của một lệnh có thời gian thực thikhác nhau thì sẽ làm giảm speed up
Thời gian fill và drain cũng đồng thời làm giảm speed up
Để hiện thực pipeline người ta dùng thanh ghi để lưa kết quả lại ở mỗi bước
- Tín hiệu từ khối control unit ( main control)
o Tất cả tín hiệu điều khiển được sinh ra ở bước ID
- Mỗi bước dùng 1 số tín hiệu điều kiển
o RegDst được dùng trong bước ID
o ExtOp, ALUSrc, ALUCtrl ,J, Beq, Bne, zero được dùng trong bước EXE
o MemRead, MemWrite, MemtoReg dùng trong bước MEM
o RegWrite dùng trong bước WB
- Khi hiện thực pipe line sẽ sinh ra một số trường hợp hazard, tức là những trường hợp mà
ta thực thi theo đúng nguyên tắc của pipe line thì sẽ gây ra sai chương trinh, có 3 loạihazard
o Structural hazards: xảy ra khi có sự tranh chấp tài nguyên phân cứng, 2 lệnh cùng dùng chung phần cứng trong cùng chy kỳ
o Data hazards: xảy ra khi có sự phụ thuộc dữ liệu
o Control hazards: xảy ra đối với các lệnh nhảy có điều kiện
Trang 10I: add $s1, $s2, $s3 #thanh ghi $s1 được ghi
J: sub $s4, $s1, $s3 #thanh ghi $s1 được đọc
o Đưa tất cả bước WB qua chu kỳ thứ 5 của lệnh
o Hoặc thêm phần cứng cho WB ( thêm 1 cổng đọc/ghi nữa cho register file)
b) Data Hazards
Sự phụ thuộc giữa các lệnh: là hiện tượng xảy ra khi lệnh sau lấy kết quả của lệnh phía trước trước khi lệnh phía trước đưa ra kết quả
- Read After Write – RAW Hazard
Khi đó data hazard xuất hiện khi lệnh J đọc $s1 mà lệnh I lại chưa tính xong kết quả của
$1
Phương pháp giải quết data hazard
o Chèn stall vào để đảm bảo lệnh trước trả kết quả về mà lệnh sau có thể đọc đượckết quả đó trong chu kỳ kế tiếp( phương pháp này không tốn tài nguyên phầncứng, chỉ tạo ra delay cho chương trình giảm hiệu xuất)
o Dùng kỹ thuật forward (phương pháp này cần thêm tài nguyên phần cứng để hiệnthực) + chèn stall khi cần thiết
Khi xảy ra hazard đối với lệnh load cho dù ta có dùng kỹ thuật forward thì cũng phải tốn 1 stall để giải quyết chúng
Để hiện thực forward người ta thêm bộ mux cho việc lựa chọn input cho ALU Các lệnh khác (khác lệnh load) thì kết quả được cho ra ở bước ALU (EXE) nên khi ta dùng kỹ thuật forward sẽ không còn stall nữa
Giả sử có sự phụ thuộc giữa các lệnh như sau
o Lệnh 2 phụ thuộc 1,
o Lệnh 3 phụ thuộc 1,
o Lệnh 4 phụ thuộc 1
Khi dùng kỹ thuật forward cho lệnh
o lệnh 2 thì tao forward từ EXE EXE (cách nhau 1 lệnh)
Trang 11I: sub $t4, $t1, $t3 # $t1 được đọc trướcJ: add $t1, $t2, $t3 # $t1 được ghi sau
I: sub $t4, $t1, $t3 J: add $t5, $t2, $t3
I: sub $t1, $t4, $t3 J: add $t5, $t2, $t3
o lệnh 3 thì tao forward từ MEM EXE (cách nhau 2 lệnh)
o lệnh 4 thì tao forward từ WB EXE (cách nhau 3 lệnh)
- Write After Read: Name Dependence
Rõ ràng là ta thấy không có sự phụ thuộc dữ liệu ở đây, chỉ có phụ thuộc tên biến Để loai
bỏ sự phụ thuộc về tên biến thì ta đổi tên thanh ghi
- Write After write: Name Dependence
Rõ ràng là ta thấy không có sự phụ thuộc dữ liệu ở đây, chỉ có phụ thuộc tên biến kết quảchỉ phụ thuộc vào lệnh J sau Để loai bỏ sự phụ thuộc về tên biến thì ta đổi tên thanh ghi
- Read After Read: không gây ra sự phụ thuộc
II.2 Bài tập:
1) Cho sơ đồ và các thông số của bộ xử lý “single clock” như hình bên dưới.
Thời gian delay của mỗi khối cho như hình bên dưới.
I: sub $t1, $t4, $t3 # $t1 được ghi
J: add $t1, $t2, $t3 # $t1 được ghi lại lần nữa
Trang 122) Cho đoạn code sau:
a) Xác định sự phụ thuật giữa các lệnh và thanh ghi nào gây ra sự phụ thuộc đó
b) Chèn stall để giải quyết hazard trên, cần bao nhiêu stall?
c) Sắp xếp lại thứ tự các lệnh sao cho khi chạy đoạn code đó thì ít stall nhất mà tính logic của chương trình vẫn không đổi
d) Dùng kỹ thuật forward để giải quyết hazard thì khi chạy sẽ có bao nhiêu stall.
- Pipeline clock = max (I-Mem, Regs, ALU, D-Mem, Regs) = 200
- Thời gian thực thi 150 của single cycle = 150 * 950 = 142500 ps
- Thời gian thực thi 150 của pipeline = (5 + 150 - 1)* 200 =30800 ps
- Speed up = 142500/30800 = 4.62
Trang 13- CPI của multi cycle = (50%* 4 + 25%*3 + 15%*5 + 10%*4) = 3.9
- CPI của pipeline khi không có stall là = 1
- Thời gian thực thi = CPI * số lệnh * thời gian 1 chu kỳ
- Speed up = thời gian mutli cycle /thời gian pipeline = (3.9 * số lệnh * 200)/( 1 *số lệnh * 200)
Lệnh nào mà các toán hạng được tô màu đậm thể hiện sự phụ thuộc qua thanh ghi đó
Trang 14load add jump store branch
Pipe line
III Memory
III.1 Memory
Gồm các bus cơ bản sau
- Address:n bit dùng để xác định địa chỉ trong ram, không gian địa chỉ 2n
- Data: m bits dùng để xuất/ nhập dữ liệu, độ rộng của ram là mbits
- OE: output enable , khi tín hiệu này tích cực tương ứng với việc đọc dữ liệu từ RAM
- WE: write enable , khi tín hiệu này tích cực tương ứng với việc ghi dữ liệu vào RAMCác điểm khác nhau cơ bản giữa SRAM và DRAM
Trang 15o Thường được làm bằng SRAM
o Mục đích làm giảm thời gian truy xuất memory
- Tốc độ và thời gian truy xuất của memory được xếp theo thứ tự sau ( chỉ mang tính chất tham khảo)
Trang 16Đối với truy xuất theo thời gian thì xu hướng là thường giữ block đó trong cache Nhằmtruy xuất lần sau
- Spatial Locality (không gian) lệnh/ data trong vùng nhớ khi được truy xuất thì có thể cáclệnh/data gần nó sẽ được truy xuất thường xuất hiện trong khai báo mãng, thực thi tuầntự…
Đối với truy xuất theo không gian thì xu hướng là thường chuẩn bị trước block kế tiếp
- Block placement ( phương pháp đặt block vào cache)
o Direct mapped
Mỗi block được xác định một vị trí đặt duy nhất
n là số block trong cache thì block thứ m trong bộ nhớ (RAM) sẽ được đặtvào vị trí m%n trong cache
Trong K- way Set associative thì k block sẽ gộp thành 1 set, ở ví dụ trên k = 2
- Block identification (xác định block)
Để xác định địa chỉ người ta chia địa chỉ ra làm 3 phần (Tag, Index, block offset)
o Block offset
Trang 17 Xxác định thành phần nào trong block được truy xuất để xác định bockoffset có bao nhiêu bit thì ta đi xác định trong block đó có bao nhiều phầntử
Xác định số phần tử bằng cách lấy (size of block)/(size of đơn vị truyxuất)
o Index:
xác định số block trong cache trong trường hợp Direct mapped,
Xác định số block bằng cách lấy (size of cache)/(size of block)
Xác định số set trong cache trong trường hợp k-way set associative
Xác định số set bằng cách xác định số block sau đó lấy số block đóchia cho k
Bằng 0 trong trường hợp full associative
o Tag
Để xác định block nào đang nằm trong cache
Tag bit = 32 – index bits – block offset bits ( trong kiến trúc 32 bits)
- Block replacement (thay thế block):
Khi một block vào mà không còn chổ trống để đặt vào thì cần phải thay block cũ bằng block mới
o Trong trường hợp direct mapped, tại vì mỗi block chỉ có 1 chổ đặt nên ta không nhắc đến ở đây
o FIFO ( cái nào được đặt vào trước thì sẽ được lấy ra trước)
o Ramdom
o LRU ( cái nào ít dùng nhất thì được thay thế trước)
- Write strategy (chiến lược ghi ngược lại cache, memory)
o Write Back: chỉ updata cache, khi có yêu cầu hay cần thay thế thì mới update giá trị sau cùng xuống memory
Cần bit valid (để xác định block đó có valid hay không) và bit modified (để xác định block đó có update chưa)
Khó hện thực
Ít tốn lưa lượng băng thông của hệ thống
o Write Through: updata cả cache và memory
Cần bit valid (để xác định block đó có valid hay không)
Đơn giản dễ hiện thực
Tốn lưa lượng băng thông của hệ thống vì phải update nhiều
- Miss/hit
o Miss: cần truy xuất mà tìm không thấy trong cache Do đó phải
Đưa block chứa cái ta muốn truy xuất vào cache sau đó truy xuất nó
o Hit: cần truy xuất và tìm thấy cái muốn truy xuất trong cache
- Miss penaly: số chu kỳ để xử lý cache miss
- Hit rate = hit/(hit + miss)
Trang 18- Miss rate = miss /(hit + miss) = 1 – hit rate
- I-Cache Miss Rate = Miss rate trong lúc truy xuất I-MEM
- D-Cache Miss Rate = Miss rate trong lúc truy xuất D-MEM
Ví dụ: chương trình có 1000 lệnh trong đó có 25% là 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
o I-Cache Miss Rate = số lần miss / số lần truy xuất I-MEM = 150/1000 = 15%
o I-Cache Miss Rate = số lần miss / số lần truy xuất D-MEM = 50/(1000*25%)
=50/250 = 20%
- 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
o Memory stall cycles = Combined Misses * Miss Penalty
Miss Penalty: clock cycles to process a cache 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
o LS-Count (Load & Store) = I-Count × LS Frequency
o 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 + LSFrequency × D-Cache Miss Rate × Miss Penalty
Ví dụ: Instruction count (I-Count) = 106 lệnh, 30% lệnh loads/stores, D-cachemiss rate là 5% và I-cache miss rate là 1%, cho Miss penalty là 100 chu kỳ, tínhcombined misses per instruction and memory stall cycles
1% + 30% * 5% = 0.025 combined misses mỗi lệnh tương đương 25 misses per 1000 instructions
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
CPIMemoryStalls = CPIPerfectCache + Mem Stalls per Instruction
Ví dụ: cho CPI = 1.5 khi không có stall, Cache miss rate là 2% đối với instruction và 5%đối với data Lệnh loads và stores chiếm 20% Cho trước miss penalty là 100 chu kỳ đốivới I-cache và D-cache Tính CPI của hệ thống?
Mem stalls cho mỗi lệnh = 0.02*100 + 20%*0.05*100 =3
CPIMemoryStalls = 1.5 + 3 = 4.5 cycles
- Average Memory Access Time (AMAT) thời gian truy xuất bộ nhớ trung bình
o AMAT = Hit time + Miss rate * Miss penalty
Do đó để giảm thời gian truy xuất thì
Ta giảm Hit time: bằng cách dùng bộ nhớ cache nhỏ, đơn giản