Tải bản đầy đủ (.pdf) (5 trang)

Tutorials Vbook v0.1-Thủ Thuật UDS part 51 ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (316.37 KB, 5 trang )

stage của kiến trúc này đơn giản hơn mỗi stage của kiến trúc pipeline ngắn rất
nhiều. Do đó mà nó có thể có được clockspeed cao hơn kiến trúc pipeline ngắn rất
nhiều (ít nhất là trên lý thuyết).
5. Cái này chắc ko sai , mình có đọc được trong 1 bài trên net


pipeline càng nhiều tầng thì độ trễ khi truy xuất vào cache hoặc vào Ram càng lớn ,
từ đó dẫn đến xét tổng quát thì số IPC giảm đi. Có thể đó chỉ là 1 trong các lí do
nhưng mình nghĩ IPC giảm là đúng , vì nếu kiến trúc pipeline dài mà số IPC lại
tăng nữa thì ko logic > cứ việc tăng stage pipeline lên là giải quyết vẫn đề

cái này chắc là do sự tiên đoán rẽ nhánh (hay predilection gì đó ) trở nên phức tạp
khi pipeline dài như bro ThangMMM vừa nói , cũng chính vì thế mà với netburst
cache L2 lúc nào cũng quan trọng , xeon còn có cả L3
6. Trong việc tiên đoán lệnh, AMD K8 mạnh hơn P4 vì nhiều lí do. Lí do đầu tiên
chính là từ "phong cách" làm việc của CPU K8. CPU K8 làm việc ở xung rất thấp
so với P4 nên để có hiệu năng ngang ngửa, hiệu suất trên mỗi xung của K8 phải
lớn hơn so với P4. Để đạt đựơc hiệu suất cao, AMD đã đầu tư rất nhiều để cải tiến
và nâng cấp bộ tiên đoán nhánh. Còn intel cũng có BPU, nhưng khả năng của BPU
intel kém xa AMD do intel chủ trương tăng clock lên để khắc phục nhược điểm
của BPU

Nói chi tiết hơn một chút về BPU thì như sau:

Cơ chế xử lý lệnh của CPU: lệnh được tìm và nạp vào hệ thống đường ống của đơn
vị thực hiện lệnh từ bộ đệm lệnh ( L1 Instruction Cache ). Lệnh này thông qua các
bước như nhận lệnh, giải mã lệnh 1, giải mã lệnh 2 v.v trong đường ống ( hệ
thống đường ống có bao nhiêu "bậc" thì sẽ có bấy nhiêu tiến trình mà lệnh cần phải
được thực hiện) sẽ đến đơn vị thực hiện lệnh ( Execute Unit), chính là các ALUs.
Sau khi ALU đã thực hiện xong lệnh, kết quả của lệnh này sẽ được nạp vào bộ đệm
dữ liệu (L1 Data Cache). Có hai loại lệnh chính, đó là lệnh độc lập và các lệnh phụ


thuộc. Lệnh độc lập là những lệnh mà kết quả của chúng sau khi xử lý xong có thể
được xuất ngay ra đơn vị khác, còn các lệnh phụ thuộc thì kết quả của lệnh trước
sau khi được xử lý xong lại được nạp lại vào hệ thống đường ống một lần nữa,
đóng vai trò chỉ thị/dữ liệu của lệnh tiếp theo. Mặt khác, bộ xử lý AMD64 có kiến
trúc thực thi lệnh song song-liên tiếp (superscalar architechture), nghĩa là đơn vị
thực hiện lệnh của nó bao gồm nhiều ALU ( 3 ALUs), và trong các đường ống thì
các quá trình xảy ra kế tiếp nhau đối với các lệnh ( tức là khi lệnh thứ nhất đang
trong công đoạn x thì lệnh thứ hai đã được nạp vào và thực hiện trong công đoạn x-
1 ). Chính vì các ALU thực thi lệnh song song, tức là đồng thời với nhau, nên
chúng chỉ có thể thực thi đồng thời các lệnh độc lập chứ không thể thực thi đồng
thời các lệnh phụ thuộc. Hãy thử tưởng tượng: lệnh x và lệnh y là hai lệnh phụ
thuộc, trong đó lệnh y cần phải có kết quả của lệnh x mới có thể tiến hành thực
hiện, nhưng chúng lại được đồng thời nạp vào hai ALU khác nhau của Execute
Unit. Như vậy đối với ALU thực hiện lệnh x sẽ không có vấn đề gì, nhưng với
ALU thực hiện lệnh y thì nó sẽ phải chờ kết quả của lệnh x được thực hiện bởi
ALU kia gửi sang, và điều đó có nghĩa trong khi ALU thứ nhất đang làm việc với
lệnh x thì ALU thứ hai lại "nghỉ ngơi" để chờ kết quả từ ALU kia (nếu xét kỹ hơn
thì ALU thứ hai ko hề "nghỉ ngơi" mà nó vẫn làm việc. Nó sẽ cất lệnh y này lại tại
một vùng đệm đặc biệt, sau đó nó tìm và nạp vào một lệnh khác để xử lý, sau khi
đã có kết quả của lệnh x từ ALU thứ nhất thì nó lại nạp lệnh y này lại và tiến hành
xử lý, tuy nhiên điều này cũng làm giảm tốc độ của hệ thống rất nhiều vì ALU phải
xoá toàn bộ lệnh đã nạp trong đường ống và tiến hành nạp lại từ đầu 1 lệnh khác).
Hơn thế nữa, thời gian để kết quả của lệnh x đi từ ALU thứ nhất sang ALU thứ hai
cũng lâu hơn để nó quay trở lại chính ALU thứ nhất, nên tóm lại, khi các lệnh phụ
thuộc nhau lại được tiến hành đồng thời trong các ALU độc lập nhau thì tốc độ sẽ
giảm đi rất nhiều. Để có thể tránh hiện tượng này, điều quan trọng là trong bộ xử lý
phải có một đơn vị phân tích các lệnh đang được lưu trữ trong bộ đệm lệnh, xem
lệnh nào là lệnh độc lập, lệnh nào là lệnh phụ thuộc. Các lệnh độc lập sẽ được bố
trí để chúng có thể cùng một lúc đi vào các ALU khác nhau, còn các lệnh phụ
thuộc thì lại được bố trí để đi vào cùng 1 ALU, và các lệnh cần phải có kết quả từ

lệnh trước sẽ được xếp ở sau. Đơn vị phân tích này chính là bộ tiên đoán nhánh -
Branch Prediction Unit. Có hai điểm cần lưu ý đối với bộ tiên đoán nhánh trong bộ
xử lý AMD64, thứ nhất: mặc dù đã được cải tiến nhiều, nhưng bản chất của bộ tiên
đoán nhánh vẫn là "tiên đoán" (do trong giai đoạn lệnh đang ở trong bộ đệm lệnh
chúng vẫn chưa được giải mã chính xác nên việc phân loại lệnh độc lập- lệnh phụ
thuộc và sắp xếp lệnh chỉ mang tính chất tương đối) nên không thể tránh khỏi hoàn
toàn hiện tượng nêu trên, và thứ hai là do bộ tiên đoán lệnh được cải tiến, nên
chúng cần phải phân tích rất nhiều lệnh mới đạt được hiệu suất tối ưu, và do đó bộ
đệm lệnh ( L1 Instruction Cache) cũng như bộ đệm dữ liệu ( L1 Data Cache) được
thiết kế lớn hơn nhiều so với các bộ đệm L1 ở thế hệ AMD K7 và P4

Các thế hệ CPU AMD

Thu thập thông tin từ net

AM286






AM386





AM486






K6





K7

×