Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 11: Đường dữ liệu có đường ống của MIPS
Bằng cách nào ta có thể thực hiện
nhanh hơn?
Chia lệnh nhiều chu kỳ thành các bước ngày
càng nhỏ.
Đến một giai đoạn ở đó việc nạp các thanh ghi trạng
thái cũng tiêu phí nhiều thời gian như là thực hiện
công việc.
Bắt đầu việc tìm nạp và thực thi lệnh tiếp theo
trước khi lệnh hiện hành hoàn tất.
Kỹ thuật đường ống – (tất cả?) các bộ xử lý hiện đại
đều có đường ống để tăng hiệu suất.
Tìm nạp (và thực thi) nhiều hơn một lệnh ở một
thời điểm.
Tìm nạp (và thực thi) các lệnh từ nhiều hơn một
luồng lệnh (multithreading (hyperthreading)
nhanh hơn?
Chia lệnh nhiều chu kỳ thành các bước ngày
càng nhỏ.
Đến một giai đoạn ở đó việc nạp các thanh ghi trạng
thái cũng tiêu phí nhiều thời gian như là thực hiện
công việc.
Bắt đầu việc tìm nạp và thực thi lệnh tiếp theo
trước khi lệnh hiện hành hoàn tất.
Kỹ thuật đường ống – (tất cả?) các bộ xử lý hiện đại
đều có đường ống để tăng hiệu suất.
Tìm nạp (và thực thi) nhiều hơn một lệnh ở một
thời điểm.
Tìm nạp (và thực thi) các lệnh từ nhiều hơn một
luồng lệnh (multithreading (hyperthreading)
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 11: Đường dữ liệu có đường ống của MIPS", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_vi_xu_ly_nang_cao_phan_1_thiet_ke_cpu_risc_bai_11.pdf
- Lec11.ppt
Nội dung text: Bài giảng Vi xử lý nâng cao - Phần 1: Thiết kế CPU RISC - Bài 11: Đường dữ liệu có đường ống của MIPS
- Bài giảng “Vi xử lý nâng cao) Phần 1: Thiết kế CPU RISC Bài 11: Đường dữ liệu có đường ống của MIPS 1
- Bằng cách nào ta có thể thực hiện nhanh hơn? Chia lệnh nhiều chu kỳ thành các bước ngày càng nhỏ. Đến một giai đoạn ở đó việc nạp các thanh ghi trạng thái cũng tiêu phí nhiều thời gian như là thực hiện công việc. Bắt đầu việc tìm nạp và thực thi lệnh tiếp theo trước khi lệnh hiện hành hoàn tất. Kỹ thuật đường ống – (tất cả?) các bộ xử lý hiện đại đều có đường ống để tăng hiệu suất. Tìm nạp (và thực thi) nhiều hơn một lệnh ở một thời điểm. Tìm nạp (và thực thi) các lệnh từ nhiều hơn một luồng lệnh (multithreading (hyperthreading)). 3
- Bộ xử lý MIPS có đường ống Độ trễ = thời gian thực thi (thời gian trì hoãn hoặc đáp ứng) – thời gian tổng từ lúc bắt đầu đến lúc kết thúc một lệnh. Đối với các bộ xử lý, đại lượng đo quan trọng là thông lượng (THROUGHPUT) (hoặc băng thông thực thi) – lượng tổng công việc thực hiện được trong khoảng thời gian cho trước. Đối với các bộ nhớ, đại lượng đo quan trọng là băng thông (BANDWIDTH) – lượng thông tin được truyền thông ngang qua một liên kết nối (e.g., bus) mỗi đơn vị thời gian; số thao tác thực hiện được mỗi giây (độ rộng WIDTH của thao tác và tốc độ RATE của thao tác ). 5
- Đơn chu kỳ, đa chu kỳ so với đường ống Slide trước là các giản đồ định thời trình bày những khác nhau giữa thực hiện đơn chu kỳ, thực hiện đa chu kỳ và thực hiện có đường ống. Thí dụ, trong thực hiện có đường ống , ta có thể kết thúc việc thực thi chuỗi lệnh load, store và R-type trong 7 chu kỳ. 7
- Sửa đổi đường dữ liệu có đường ống Lưu ý hai ngoại lệ của luồng từ phải sang trái. 1. WB g hi kết quả ngược trở về tập thanh ghi ở giữa đường dữ liệu. 2. Việc lựa chọn giá trị kế tiếp của PC, một ngõ vào đến từ địa chỉ rẽ nhánh tính được từ tầng MEM. Chỉ có những lệnh sau đó trong đường ống là có thể bị ảnh hưởng bởi hai thao tác di chuyển dữ liệu REVERSE này . Thao tác thứ nhất (WB đến ID) dẫn đến hazard dữ liệu. Thao tác thứ hai (MEM đến IF) dẫn đến hazard điều khiển. Tất cả lệnh đều phải cập nhật trạng thái nào đó trong bộ xử lý–tập thanh ghi , bộ nhớ hoặc PC – do vậy các thanh ghi đường ống riêng rẽ là dư thừa đối với trạng thái được cập nhật (không cần). PC có thể được xem như là một thanh ghi đường ống : Thanh ghi này cung cấp cho tầng IF của đường ống . Không giống như các thanh ghi đường ống khác , PC là phần của trạng thái kiến trúc thấy được – nội dung của PC phải được lưu khi ngoại lệ xảy ra (nội dung của các thanh ghi đường ống khác được bỏ qua ). 9
- Đường ống của ISA MIPS Điều gì tạo thuận lợi mọi lệnh đều có cùng chiều dài (32 bit) - có thể tìm nạp trong tầng 1st và giải mã trong tầng 2nd . vài dạng lệnh (ba) có sự cân đối ngang qua các dạng. - có thể bắt đầu việc đọc tập thanh ghi trong tầng 2nd . các thao tác bộ nhớ chỉ có thể xảy ra trong các lệnh load và store. - có thể sử dụng tầng thực thi để tính các địa chỉ bộ nhớ. mỗi lệnh MIPS ghi tối đa một kết quả (i.e., thay đổi trạng thái của máy ) và cũng ghi ở gần cuối đường ống (MEM và WB). Điều gì tạo khó khăn hazard cấu trúc : nếu ta chỉ có 1 bộ nhớ thì sao ? hazard điều khiển : các rẽ nhánh thì sao ? hazard dữ liệu : nếu các toán hạng đầu vào của lệnh phụ thuộc vào đầu ra của lệnh trước đó thì sao ? 11
- Tại sao sử dụng kỹ thuật đường ống? Cho hiệu suất ! Thời gian (các chu kỳ clock) ALU Một khi đường I Inst 0 IM Reg DM Reg ống đầy , một n lệnh được hoàn s ALU tất mỗi chu kỳ, t Inst 1 IM Reg DM Reg do vậy sẽ hoàn r. tất một lệnh ALU mỗi một chu O Inst 2 IM Reg DM Reg kỳ (CPI = 1) r d ALU e Inst 3 IM Reg DM Reg r ALU Inst 4 IM Reg DM Reg Thời gian làm đầy đường ống 13
- Bộ nhớ đơn sẽ có hazard cấu trúc Thời gian (các chu kỳ clock) lw ALU Đọc dữ liệu từ bộ I Mem Reg Mem Reg nhớ n s ALU t Inst 1 Mem Reg Mem Reg r. ALU O Inst 2 Mem Reg Mem Reg r d ALU e Inst 3 Mem Reg Mem Reg r ALU Inst 4 Đọc lệnh từ bộ Mem Reg Mem Reg nhớ Có thể sửa chữa bằng các bộ nhớ lệnh và dữ liệu riêng biệt. 15
- Sử dụng thanh ghi có thể gây ra hazard dữ liệu Những phụ thuộc ngược theo thời gian gây ra hazard. ALU add $1 , IM Reg DM Reg ALU sub $4, $1 ,$5 IM Reg DM Reg ALU and $6, $1 ,$7 IM Reg DM Reg ALU or $8, $1 ,$9 IM Reg DM Reg ALU xor $4, $1 ,$5 IM Reg DM Reg Đọc trước khi ghi ( hazard dữ liệu ). 17
- Phương pháp “sửa chữa” hazard dữ liệu Có thể sửa ALU add $1 , IM Reg DM Reg chữa hazard I dữ liệu bằng n cách chờ – stall s t stall r. O stall r d ALU e sub $4, $1 ,$5 IM Reg DM Reg r ALU and $6 ,$1 ,$7 IM Reg DM Reg 19
- Phương pháp khác “sửa chữa” hazard dữ liệu Các đường truyền tiếp (forwarding path) chỉ hợp lệ nếu tầng đích chậm hơn (theo thời gian) so với tầng nguồn. Truyền tiếp sẽ khó khăn hơn nếu có nhiều kết quả truyền tiếp mỗi lệnh hoặc nếu ta cần ghi một kết quả sớm hơn (trước) trong đường ống. 21
- Truyền tiếp với hazard dữ liệu Load-use Lưu ý rằng lw chỉ là một thí dụ khác của việc sử dụng thanh ghi (ngoài các thao tác của ALU). Cần stall ngay cả với việc truyền tiếp khi hazard dữ liệu kéo theo việc nạp ( load). 23
- Nhảy gánh chịu một stall Nhảy không được giải mã cho đến ID, nên một flush được cần đến. Để flush, thiết lập IF.Flush để xóa trường lệnh của thanh ghi đường ống IF/ID (làm cho lệnh thành lệnh noop ). ALU Sửa chữa j IM Reg DM Reg I hazard n nhảy bằng s ALU cách chờ – t flush IM Reg DM Reg r. flush ALU O j target IM Reg DM Reg r d e r May mắn thay , nhảy hiếm khi xảy ra – chỉ 3% của hỗn hợp lệnh SPECint. 25
- Phương pháp “sửa chữa” hazard điều khiển rẽ nhánh ALU Sửa chữa I beq IM Reg DM Reg hazard rẽ n nhánh bằng s ALU cách chờ – t flush IM Reg DM Reg flush – r. ALU nhưng ảnh IM Reg DM Reg O flush hưởng đến r CPI ALU d IM Reg DM Reg e flush r ALU beq target IM Reg DM Reg ALU IM Reg DM Inst 3 27
- Phương pháp khác “sửa chữa” hazard điều khiển rẽ nhánh “Giải pháp” khác là thêm vào phần cứng vừa đủ sao cho ta có thể kiểm tra các thanh ghi, tính toán địa chỉ rẽ nhánh và cập nhật PC trong thời gian tầng thứ hai của đường ống. Điều này sẽ làm giảm số stall chỉ còn 1 . Phương pháp thứ ba là dự đoán để quản lý các rẽ nhánh, nghĩa là luôn luôn dự đoán rằng các rẽ nhánh sẽ không được thực hiện. Khi đúng , đường ống tiếp tục ở tốc độ đầy đủ. Khi sai , cần dừng (và đảm bảo không có gì hoàn tất – thay đổi trạng thái máy sẽ không hoàn tất ). Ta sẽ đề cập đến các tùy chọn này trong các bài tiếp theo . Lưu ý, địa chỉ rẽ nhánh là rẽ nhánh tương đối PC đến 4 + 4 + 2*4 = 16. 29
- Hai loại stall Lệnh noop được chèn vào giữa hai lệnh trong đường ống (e.g., các hazard load-use). Giữ cho các lệnh sớm (trước) trong đường ống (sau trong chương trình) không phát triển xuống đường ống trong 1 chu kỳ (“loại bỏ” chúng đúng chỗ bằng các tín hiệu điều khiển ghi ). Chèn lệnh noop bằng cách xóa các bit điều khiển trong thanh ghi đường ống ở tầng thích hợp. Để cho các lệnh sau trong đường ống (trước trong chương trình) phát triển bình thường xuống đường ống. Flush (hoặc sự bóp chết lệnh) là một lệnh trong đường ống được thay thế bằng lệnh noop (cũng thực hiện đối với các lệnh được đặt liên tiếp sau các lệnh j và beq). Xóa các bit điều khiển đối với lệnh cần được flush. 31
- Có nhiều cấu trúc đường ống khác nhau Lưu ý rằng ta không cần đầu ra của MUL cho đến chu kỳ WB, do vậy ta có thể mở rộng hai tầng đường ống đối với phần cứng MUL (nên mạch nhân là mạch nhân hai tầng có đường ống). 33
- Tóm tắt kỹ thuật đường ống Các bộ xử lý hiện đại đều sử dụng đường ống. Đường ống không giúp độ trễ của tác vụ đơn , mà giúp thông lượng của toàn bộ tải làm việc. Tăng tốc tiềm tàng : chu kỳ clock thực sự nhanh và có khả năng hoàn tất một lệnh mỗi chu kỳ clock (CPI). Tốc độ đường ống bị giới hạn bởi tầng chậm nhất của đường ống. Những tầng đường ống không cân bằng sẽ làm giảm hiệu quả. Thời gian “làm đầy ” đường ống và thời gian “làm rỗng ” có thể ảnh hưởng đến sự tăng tốc đối với các đường ống sâu và chạy chương trình ngắn. Phải phát hiện và giải quyết hazard. Việc dừng (s talling) ảnh hưởng tiêu cực đến CPI ( làm cho CPI nhỏ hơn giá trị lý tưởng là 1). 35