2. Kiến trúc nộ
AS Tài nguyên
Tài nguyên thực thi AS Tài nguyên thực thi AS AS Tài nguyên thực thi
Hình 2.5 – So sánh bộ xử lý đa nhân và siêu phân luồng
Hiện thời đa số các phương pháp dùng để cải thiện hiệu năng trong các thế hệ CPU là tăng tốc độ xung clock và tăng độ lớn của bộ nhớ đệm (cache). Nhưng cho dù cả hai cách này cùng được sử dụng thì vẫn khơng thực sự sử dụng hết được tài nguyên sẵn cĩ của CPU. Nếu cĩ cách nào đĩ cho phép thực thi được nhiều chuỗi lệnh đồng thời mới cĩ thể tăng hiệu quả sử dụng tài nguyên của CPU. Đĩ chính là cách mà kỹ thuật siêu phân luồng của Intel đã làm được, bản chất của nĩ là chia sẻ tài nguyên để sử dụng hiệu quả hơn các đơn vị thực thi lệnh đã cĩ sẵn trên CPU.
Siêu phân luồng là một kỹ thuật nằm ngồi x86, là một phần nhỏ của SMT. Ý tưởng của SMT rất đơn giản: một CPU vật lý sẽ xuất hiện trên hệ điều hành như là hai CPU logic và hệ điều hành khơng thể phân biệt được. Nhiệm vụ của hệ điều hành là gửi 2 chuỗi lệnh tới 2 CPU và phần cứng sẽ đảm nhiệm những cơng việc cịn lại.
Trong các CPU sử dụng kỹ thuật siêu phân luồng, mỗi CPU logic sở hữu một tập các thanh ghi, kể cả thanh ghi bộ đếm chương trình riêng (separate program counter), CPU vật lý sẽ luân phiên các giai đoạn tìm/giải mã lệnh giữa hai CPU logic và thực thi những thao tác từ hai chuỗi lệnh đồng thời theo cách hướng tới những đơn vị thực thi ít được sử dụng.
Hạn chế của siêu phân luồng Đơn vị thực thi ALU FPU Load/Store 1 2 3 Chu kỳ xung
Giả sử rằng CPU đơn giản trước đây cũng cĩ các đặc tính của siêu phân luồng: Các ơ gạch chéo hiển thị một chỉ dẫn từ chuỗi lệnh thứ nhất đang được thực hiện, trong khi những ơ chấm chấm hiển thị một chỉ dẫn từ chuỗi lệnh thứ hai đang được thực hiện. Các ơ màu xám hiển thị những đơn vị thực hiện khơng được sử dụng, trong khi các ơ màu đen hiển thị xung đột khi mà cả hai chỉ dẫn đều sử dụng cùng một đơn vị thực thi. Rõ ràng là việc thực thi song song hai chuỗi lệnh với kỹ thuật siêu phân luồng lại thực hiện chậm hơn so với một CPU thơng thường. Nguyên nhân thật ra rất đơn giản: CPU đồng thời thực hiện hai chuỗi lệnh quá đơn giản, tất cả đều là trùng lặp với lệnh add, load, store. Nếu thực thi các ứng dụng địi hỏi nhiều phép tốn động cùng với các ứng dụng số nguyên thì kết quả sẽ khác đi. Hiện tại các ứng dụng văn phịng trên máy tính để bàn hầu như chỉ sử dụng số nguyên (và trong tương lai chắc cũng vẫn chỉ sử dụng số nguyên). Vì vậy lợi ích mà cơng nghệ siêu phân luồng đem lại thấp (và đơi khi cịn kém hơn khơng dùng cơng nghệ siêu phân luồng). Trên thực tế, nếu kích hoạt tính năng siêu phân luồng trên desktop, cĩ thể giảm tốc độ tới 10%. Tuy nhiên người dùng các ứng dụng tính tốn phức tạp thì sẽ được hưởng lợi rất nhiều từ kỹ thuật này. Ngồi ra kỹ thuật này cũng tăng tốc đáng kể cho các máy chủ, nhất là các máy chủ web server.
Lợi ích của siêu phân luồng
Intel đã tạo ra siêu phân luồng khơng chỉ để cho các CPU máy chủ. Thực ra kiến trúc NetBurst của P4 và Xeon hiện nay hồn chỉnh với lõi SMT. Xét ví dụ ở trên, ta cho thêm một ALU thứ 2 và thực hiện hai chuỗi lệnh trên.
Với một ALU thứ 2, xung đột duy nhất gặp phải là lần lưu trữ cuối cùng. Ta biết rằng CPU P4 được thiết kế với ba đơn vị số nguyên (hai ALU và một đơn vị xử lý số nguyên khác chậm hơn cho phép dịch/quay). Quan trọng hơn nữa là mỗi ALU của P4 cĩ thể thực hiện hai vi lệnh trong cùng một xung clock, nghĩa là trong hai chỉ dẫn add (phép cộng) mỗi chỉ dẫn cĩ thể từ hai chuỗi lệnh khác nhau, được thực hiện đồng thời trong một xung clock duy nhất trên P4/Xeon.
Đơn vị thực thi ALU ALU FPU Load/Store 1 2 3 Chu kỳ xung
Nhưng điều đĩ vẫn chưa giải quyết được vấn đề, do việc tăng thêm các đơn vị xử lý để tăng hiệu quả với kỹ thuật siêu phân luồng lại tốn kém đứng từ quan điểm vật lý (làm cho CPU cĩ nhiều transistor hơn, tiêu tốn nhiều điện năng hơn; hoặc phải giảm kích thước CPU với các cơng nghệ chế tạo mới). Thay vào đĩ, Intel đang khuyến khích các nhà phát triển tối ưu hố kỹ thuật siêu phân luồng. Chẳng hạn sử dụng lệnh dừng (HALT) một trong các bộ xử lý logic sẽ tối đa được tốc độ cho các ứng dụng khơng sử dụng được kỹ thuật siêu phân luồng, CPU cịn lại chỉ hoạt động như là hệ thống một CPU. Khi một ứng dụng cĩ thể sử dụng lợi ích từ siêu phân luồng, bộ xử lý logic thứ hai lại tiếp tục được hoạt động.