CPU làm việc như thế nào ( phần 3 ) - Pdf 32

CPU làm việc như thế nào ( phần 3 )
[10/07/2006 03:06]
(Phần 2)

(Phần 3)

Quá trình phân nhánh

Như đã đề cập phần trước , một vấn đề chính của CPU là có quá nhiều Cache "miss" , bởi vì Fetch Unit phải truy cập trực
tiếp tới bộ nhớ hệ thống RAM chậm , như vậy sẽ làm hệ thống chậm đi .
Thông thường sử dụng bộ nhớ Cache để tránh vấn đề trên , nhưng có một tình huống hay xảy ra ở đó phần điều khiển
Cache sẽ bị "miss" : bị phân nhánh . Nếu trong khoảng giữa của chương trình có lệnh gọi là JMP ( lệnh Jump hoặc Go to )
gửi chương trình tới một vị trí hoàn toàn khác . trong tình huống này không thể tải ở trong bộ nhớ Cache L2 , nó làm cho
Fetch Unit phải truy cập trực tiếp vào bộ nhớ hệ thống RAM . Trong lệnh để giải quyết tình huống này , phần điều khiển
Cache của CPU phân tích khối bộ nhớ mà nó tải về để tìm xem lệnh JMP nằm ở đâu và nó sẽ tải khối bộ nhớ đó vào trong
Cache L2 trước khi CPU yêu cầu lệnh những JMP .này .

Hình dưới đây mô tả tình huống rẽ nhánh không điều kiệnĐây là vấn đề dễ giải quyết , còn một vấn đề là kh ichương trình rẽ nhánh có điều kiện , có nghĩa là chương trình sẽ chạy
tuỳ thuộc vào điều kiện có hay không biết trước . Lấy ví dụ : nếu a=<b thì chạy tới địa chỉ 1 hoặc nếu a>b chạy tới địa chỉ 2 .

Chúng ta sẽ xem hình dưới đây:

Trong tình huống trên dễ xảy ra tình trạng Cache "miss" bởi vì giá trị a , b chưa biết trước mà phần điều khiển Cache chỉ tìm
được lệnh JMP .
Giải pháp như sau : phần điều khiển Cache sẽ tải cả hai điều kiện vào trong bộ nhớ Cache . Sau cùng khi CPU xử lí lệnh rẽ
nhánh nó sẽ đơn giản huỷ bỏ một điều kiện không được chọn tới . Đó là tốt nhất để tải bộ nhớ Cache còn hơn là truy cập
trực tiếp dữ liệu bên trong bộ nhớ hệ thống RAM .



Một đặc điểm cần quan tâm khác mà tất cả bộ vi xử lí có một thời gian dài gọi là "pipeline" , khả năng có vài lệnh khác nhau
ở những tầng ( stage ) khác nhau của CPU trong cùng một thời gian .

Sau khi Fetch Unit gửi lệnh tới Decode Unit , nó sẽ tạm nghỉ không làm gì có phải không ? Do đó nó sẽ phải làm gì để thay
thế thời gian không làm gì , có yêu cầu Fetch Unit lấy lệnh tiếp theo không ? . Khi lệnh đầu tiên tới Execute Unit , Fetch Unit
có thể gửi lệnh tiếp theo tới Decode Unit và tiếp tục lấy tiếp lệnh thứ ba , cứ như thế .

Trong kiểu CPU có 11 stage ( stage là tên khác của mỗi thành phần - unit - bên trong CPU ) , có sẽ có thể có 11 lệnh bên
trong liên tục trong cùng một lúc . Trên thực tế tất cả kiểu CPU đều có cấu trúc Superscalar , có nhiều lệnh thực hiện liên tục
bên trong CPU .

Như trên đã nói CPU có Pipeline 11-stage , thì một lệnh để thực hiện đầy đủ sẽ phải qua 11 phần ( unit) . Số tầng càng cao
thì thời gian trễ để thực hiện một lệnh đầy đủ càng lớn .

Có một vài mẹo nhỏ được sử dụng trong một vài kiểu CPU để tăng hiệu suất . Chúng ta sẽ giải thích hai trong số chúng đó
là Out-Of-Order execution (OOO) và thực hiện suy đoán Speculative Execution.


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status