2012-06-07 17 views
7

Tôi đã nhận thấy rằng một số tính toán đa luồng của tôi chạy nhanh hơn nếu tôi vô hiệu hóa siêu phân luồng trong BIOS.Vô hiệu hóa siêu phân luồng so với việc thay đổi ProcessorAffinity?

Tôi cũng đã học được rằng tôi có thể lập trình vô hiệu hóa (logic) CPU: s bằng cách sửa đổi ái lực xử lý cho quá trình hiện tại, ví dụ như thế này trong C#:

// using System.Diagnostics; 
var current = Process.GetCurrentProcess(); 
var affinity = current.ProcessorAffinity.ToInt32(); 
current.ProcessorAffinity = new IntPtr(affinity & 0x5555); 

Ít nhất từ ​​một điểm hiệu suất xem, sẽ vô hiệu hóa mỗi giây (logic) CPU bằng cách thay đổi ái lực bộ vi xử lý có tác dụng tương tự như vô hiệu hóa siêu phân luồng hoàn toàn?

+1

Hmm, vấn đề quan trọng là: bạn sẽ gửi máy tính dev của bạn cùng với phần mềm của bạn? –

+2

Một xem xét khác có thể là các quy trình của hệ điều hành. Nếu bạn vô hiệu hóa siêu phân luồng trong BIOS và phần mềm của bạn cố gắng sử dụng tất cả các lõi, khi quá trình hệ điều hành (hoặc nền khác) cố gắng chạy, nó sẽ cạnh tranh với phần mềm của bạn để truy cập bộ vi xử lý. Đặt cược tốt nhất có thể là chỉ cần thử và điểm chuẩn cả hai tùy chọn và xem những gì khác biệt bạn tìm thấy trong thời gian quy trình; sự khác biệt có thể không quan trọng để cho phép dễ dàng không vô hiệu hóa siêu phân luồng. LƯU Ý: Nếu bạn không có điều khiển phần cứng, hãy kiểm tra bộ vi xử lý AMD có lõi chuyên dụng mà không cần siêu phân luồng. –

+0

Cảm ơn, Chris, một câu trả lời rất hữu ích. Tôi sẽ làm một số điểm chuẩn hơn để xem liệu có bất kỳ tùy chọn nào sẽ tạo sự khác biệt thực sự trong môi trường người dùng thông thường hay không. –

Trả lời

2

Bạn có thể thử sử dụng các API NUMA hoặc khám phá cấu trúc liên kết CPU theo cách thủ công với lệnh CPUID ... Nhưng giải pháp tốt nhất của IMHO là thực hiện một số cài đặt mặc định và cho phép người dùng cuối điều chỉnh cài đặt luồng. Trừ khi bạn có một mục tiêu phần cứng cụ thể, bạn có thể có một số trường hợp có thể xử lý - lõi logic và vật lý, siêu phân luồng hay không, hệ thống đơn và đa ổ cắm, cấu trúc liên kết bộ nhớ đệm và bộ nhớ.

+0

Cảm ơn, snemarch. Thú vị khi tìm hiểu về [NUMA] (http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access), điều này là mới đối với tôi. Bạn chắc chắn là đúng, nó có lẽ là tốt nhất để cung cấp một giải pháp chung và để lại hiệu suất tinh chỉnh lên đến người dùng cuối. Tuy nhiên, từ quan điểm chính, bạn có thể nói rằng có _is_ không có câu trả lời "có hoặc không" cho câu hỏi ban đầu của tôi? –

+0

Nó phụ thuộc vào bản chất mã của bạn cũng như phần cứng chạy trên :) - nếu mã của bạn chiến đấu cho các đơn vị thực thi, sau đó không chạy trên lõi HT (mà không * nhất thiết * phải là mọi thứ 2) có thể trợ giúp . Nhưng có khá nhiều sự khác biệt giữa P4, Core2 và những gì AMD đang làm. – snemarch

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