Nếu lõi ảo thứ hai được phép đóng góp khi lõi thứ nhất bị kẹt, thì tốt hơn là không , vì vậy bạn sẽ nhận được (ít nhất) một chút công việc phụ được thực hiện.
Câu hỏi trở thành: khi nào có hai luồng khác nhau khiến một luồng chạy tệ hơn? Dự đoán chi nhánh và sự phụ thuộc giữa các hướng dẫn sẽ không thay đổi. Đang chờ truy cập bộ nhớ ngay bây giờ ... hai luồng cạnh tranh về quyền truy cập bộ nhớ, cả về sử dụng bộ nhớ cache và băng thông.
Nếu bạn có một số CPU chạy với HT và các CPU khác thì không, điều đó cũng có nghĩa là bạn sẽ gán các luồng cụ thể cho loại này hay loại khác? Tôi nghĩ là không: các chương trình của bạn sẽ chạy các luồng của chúng trên các lõi ảo ngẫu nhiên. Vậy làm thế nào để chia cấu hình giúp? Vì mỗi CPU có bộ đệm riêng, ảnh hưởng duy nhất là do băng thông bộ nhớ và gánh nặng của sự kết hợp bộ đệm.
Nói chung, bạn đạt đến một điểm mà việc có nhiều thứ bạn có thể làm sẽ tốn kém hơn là để một số đơn vị thực thi CPU không hoạt động. Điều này không phụ thuộc vào số lượng luồng trực tiếp, mà phụ thuộc vào những gì luồng đang làm , và kiến trúc bộ nhớ chi tiết và sắc thái hiệu suất của các thành phần khác nhau.
Không có câu trả lời đơn giản. Ngay cả với một chương trình cụ thể trong tâm trí, máy có thể khác với những người liên quan đến trải nghiệm của chính họ.
Bạn phải tự mình thử và đo những gì nhanh nhất, với công việc cụ thể đó trên máy chính xác đó. Và thậm chí sau đó, nó có thể thay đổi với các bản cập nhật phần mềm và thay đổi sử dụng theo thời gian.
Hãy xem tập 3 của kiệt tác của Anger . Nếu bạn xem xét kỹ một số bộ xử lý cụ thể, bạn có thể tìm thấy các tài nguyên giới hạn trong số các bước sâu của nhiều bước cần thiết để thực thi mã. Bạn cần tìm một trường hợp trong đó tình trạng quá tải khiến nó hoạt động chậm hơn, trái ngược với việc không đảm nhận nhiều công việc hơn. Nói chung điều đó có nghĩa là một số loại bộ nhớ đệm; và nơi tài nguyên được chia sẻ giữa các chủ đề.
Máy đo CPU có nghĩa là gì: nó báo cáo tất cả thời gian không dành cho việc chạy luồng nhàn rỗi. Cả hai luồng logic được gán cho lõi sẽ không ở chế độ chờ mặc dù công việc thực tế được thực hiện trên một trong số chúng có thể nhỏ. Thời gian dành cho đường ống bị kẹt trong một vài chu kỳ cho đến khi kết quả sẵn sàng, bộ nhớ được tải xuống, các hoạt động nguyên tử được rào lại, v.v., do đó, không làm cho luồng bị tạm dừng là "không sẵn sàng" vì vậy nó sẽ không hoạt động, và thời gian vẫn hiển thị như đang sử dụng. Chờ đợi trên RAM sẽ không hiển thị dưới dạng nhàn rỗi. Chỉ một cái gì đó như I / O sẽ làm cho khối luồng và ngừng sạc thời gian đối với nó. Một mutex hệ điều hành nói chung sẽ làm như vậy, nhưng với sự gia tăng của các hệ thống đa lõi không còn là điều chắc chắn nữa, vì một "spinlock" sẽ không làm cho luồng trở lại trên kệ.
Vì vậy, đồng hồ CPU 100% không có nghĩa là tất cả đều hoạt động trơn tru, nếu CPU thường bị kẹt chờ bộ nhớ. Một số lượng ít hơn các lõi logic cho thấy 90% rất có thể sẽ hoàn thành được nhiều công việc hơn, vì nó hoàn thành số lượng khủng hoảng và hiện đang chờ trên đĩa.
Vì vậy, đừng lo lắng về đồng hồ CPU. Nhìn vào tiến độ thực tế, chỉ .