6

Tôi đang sử dụng mã số OpenMP trên CPU HyperThreaded.Siêu phân luồng ảnh hưởng đến song song như thế nào?

Nếu mọi thứ khác bằng nhau, hiệu suất sẽ thay đổi như thế nào trên CPU không phải là HyperThreaded?

Tôi nhận thấy việc sử dụng bộ xử lý 100%, cho dù tôi chạy bao nhiêu chủ đề, nhưng việc thay đổi số lượng chủ đề sẽ tăng hiệu suất. Làm sao có thể?

Câu chuyện có giống với CPU đa luồng không INTEL không?

Trả lời

3

Cải thiện hiệu suất (nếu có) từ siêu phân luồng khó dự đoán.

Siêu phân luồng có nghĩa là nếu một luồng dừng (hầu hết) bất kỳ lý do gì, CPU sẽ có một nhóm hướng dẫn từ một luồng khác đến (cố gắng) thực thi. Ví dụ: nếu mã phụ thuộc nhiều vào độ trễ bộ nhớ chính (ví dụ: các mẫu đọc không thể đoán trước không có tìm nạp trước), siêu phân luồng có thể tăng hiệu suất đáng kể.

Theo một hướng khác, nếu mã được viết cẩn thận để che độ trễ bằng cách sử dụng bộ nhớ cache cẩn thận, tìm nạp trước, v.v., nó có thể có ít hoặc không có gì từ siêu phân luồng. Đặc biệt với các hệ điều hành cũ không cố gắng tính toán siêu phân luồng trong quá trình lập lịch trình luồng của chúng, các chuỗi phụ có thể thực sự dẫn đến các công tắc ngữ cảnh bổ sung, do đó làm chậm việc thực thi tổng thể.

Giả sử bạn đang bắt đầu với mã đơn luồng hoàn toàn và thêm một số chỉ thị OpenMP, trải nghiệm của riêng tôi là Hyperthreading thường tốt để cải thiện hiệu suất theo thứ tự hoặc 10%. Nếu mã làm cho hầu như bất kỳ nỗ lực nào trong quá trình phát triển hoặc tương tự, hầu hết (nếu không phải tất cả) lợi thế đó sẽ bốc hơi gần như ngay lập tức.

+0

Tôi vừa phát hiện ra bạn có thể tắt siêu phân luồng trong BIOS. Đây có phải là cách bạn đang xác định sự cải thiện? – roro

+0

@roro: Tôi đã thực hiện kiểm tra cả hai bằng cách vô hiệu hóa siêu phân luồng trong BIOS và bằng cách giới hạn số lượng chuỗi theo cách thủ công đối với số lõi vật lý mà tôi biết có sẵn và điều chỉnh mối quan hệ luồng theo cách thủ công. –

+0

Tôi đồng ý rằng việc cải thiện hiệu suất của HT rất khó dự đoán. Tuy nhiên, tất cả các tài nguyên thực hiện không được sử dụng cho đến khi một gian hàng. Thay vào đó các tài nguyên thực thi (cổng, bộ nhớ cache, ...) được chia sẻ giữa các chuỗi siêu. Vì vậy, một add-out cho HT 1 có thể thực hiện trên cổng Haswell 0 trong khi một dòng lệnh cho HT 2 thực hiện trên cổng 5 trong cùng một chu kỳ đồng hồ. Trích dẫn từ Intel, "Từ góc nhìn kiến ​​trúc vi mô, điều này có nghĩa là các lệnh từ cả hai bộ xử lý logic sẽ tồn tại và thực hiện đồng thời trên các tài nguyên thực thi được chia sẻ." http://www.cs.virginia.edu/~mc2zk/cs451/vol6iss1_art01.pdf – Olsonist

Các vấn đề liên quan