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 http://www.behardware.com/articles/623-2/intel-core-2-duo-test.html 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