2013-02-26 31 views
13

Nếu bạn viết phần mềm mà khách hàng thanh toán cho số lõi CPU mà phần mềm sử dụng, thì cách tốt nhất để đạt được điều này trong mã C++ của bạn là gì? Nghiên cứu của tôi cho đến nay đã dẫn tôi sử dụng SetProcessAffinityMask trên Windows và sched_setaffinity trên các hệ thống POSIX.Đặt hạn ngạch lõi của quá trình bằng C++

+0

câu trả lời True và chi tiết cho câu hỏi của bạn: [1]: http://stackoverflow.com/a/3082553/1848929 – hakiko

+0

@hakiko Đó là câu hỏi về việc tìm ra có bao nhiêu lõi có ... – us2012

+2

On Windows, bạn nên có một cái nhìn tại các đối tượng công việc: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684161(v=vs.85).aspx họ có thể làm nhiều hơn nữa để hạn chế quy trình hơn mối quan hệ. Nhưng chúng cũng có thể giới hạn mối quan hệ: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686216(v=vs.85).aspx –

Trả lời

0

Tôi nghĩ rằng bạn đã tìm thấy tùy chọn tốt nhất. Hạn chế số lượng các chủ đề không phải là một ý tưởng tốt nếu bạn muốn tận dụng khả năng của các bộ vi xử lý đa luồng.

+1

"nơi khách hàng thanh toán cho số lượng lõi CPU" đã ngụ ý rằng bạn KHÔNG muốn tận dụng các khả năng đó, KHÔNG BAO GIỜ khách hàng trả tiền. – MSalters

2

Đó là một câu hỏi thú vị. Tôi không nghĩ rằng tôi có giải pháp hoàn hảo, nhưng vì không có phản hồi cho đến nay, hãy để tôi đề xuất những điều sau đây:

Nếu đoạn chính của chương trình của bạn được thực hiện bởi một loại chuỗi, chỉ cần không sinh ra nhiều chuỗi công nhân hơn giấy phép của khách hàng cho phép. Vì một luồng đơn lẻ không thể được chia để chạy trên nhiều lõi, điều này áp đặt một giới hạn cứng.

(Tôi không nghĩ rằng thiết lập mối quan hệ CPU quá trình là cách để đi vì nó có thể dễ dàng thay đổi khi chạy. Vì nó không yêu cầu bất kỳ kỹ thuật đảo ngược hoặc sửa đổi vĩnh viễn cho hệ thống, tôi sẽ lo lắng rằng circumventing điều này không cảm thấy "xấu" đủ để ngăn chặn ngay cả những khách hàng trung thực khi thử nó.)

+0

Đặt hạn ngạch chuỗi cũng có thể là cách để thực hiện việc này. Khi nói đến những người thay đổi mối quan hệ quá trình trong thời gian chạy, tôi nghĩ rằng đôi khi tôi sẽ kiểm tra mối quan hệ với 'GetProcessAffinityMask' và ném một ngoại lệ cấp phép (thoát) nếu nó đã thay đổi kể từ lần đầu tiên tôi đặt nó trong' main'. –

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