Tôi đang viết một ứng dụng sử dụng thư viện của bên thứ ba để thực hiện tính toán nặng.Giảm chuyển đổi ngữ cảnh giữa các chủ đề có cùng mức độ ưu tiên
Thư viện này triển khai thực hiện song song nội bộ và sinh ra các chuỗi số nhất định. Tôi muốn chạy một số (dynamic count) trường hợp của thư viện này và do đó kết thúc với khá nhiều oversubscribing cpu.
Có cách nào tôi có thể tăng "lượng tử thời gian" của tất cả các chuỗi trong quá trình sao cho ví dụ: tất cả các chủ đề có mức độ ưu tiên bình thường hiếm khi chuyển đổi ngữ cảnh (lợi nhuận) trừ khi chúng được mang lại một cách rõ ràng thông qua ví dụ: semaphores?
Bằng cách đó, tôi có thể tránh được hầu hết chi phí hoạt động của việc oversubscribing CPU. Lưu ý rằng trong trường hợp này, tôi không quan tâm nếu một chuỗi bị bỏ đói trong vài giây.
EDIT:
Một cách phức tạp để thực hiện việc này là thực hiện lập lịch trình theo cách thủ công.
- Liệt kê tất cả các chuỗi có mức độ ưu tiên cụ thể (ví dụ: bình thường).
- Tạm dừng tất cả.
- Tạo vòng lặp tiếp tục/tạm dừng các chủ đề, ví dụ: 40 ms và đảm bảo không có luồng mor nào hơn số cpu hiện tại đang chạy.
Bất kỳ hạn chế lớn nào với phương pháp này? Bạn không chắc chắn chi phí của việc tiếp tục/đình chỉ một chủ đề là gì?
Các cá thể lib có phụ thuộc lẫn nhau không? Nếu không, tại sao bạn không thể tránh quá tải các lõi có sẵn bằng cách chạy như nhiều chủ đề như lõi theo cách của một hồ bơi thread? –
Cũng vì số lượng các cá thể thay đổi động rất khó. Tôi sẽ cần phải khởi tạo/reinitialize thư viện nhiều lần để thay đổi số lượng chủ đề phụ thuộc vào tải hiện tại. – ronag
Nếu bạn sử dụng một threadpool, số lượng các cá thể thư viện chạy cùng một lúc sẽ giống như số lượng các chủ đề trong nhóm. Các thể hiện thư viện khác sẽ chỉ xếp hàng cho đến khi các chủ đề của pool có sẵn để xử lý chúng. Có vẻ như không có điểm trong việc áp dụng CPU cho một thể hiện nếu kết quả là quá tải? –