Tôi sử dụng std::for_each
với std::execution::par
để thực hiện tính toán phức tạp trên đầu vào lớn được biểu diễn dưới dạng vector của các cấu trúc. Việc tính toán không cần bất kỳ độ trễ nào liên quan đến phần cứng (ví dụ IO mạng hoặc đĩa), đó là tính toán "chỉ CPU". Đối với tôi có vẻ hợp lý rằng không có ý nghĩa để tạo ra nhiều luồng hệ điều hành mà chúng ta có các phần cứng; tuy nhiên, Visual C ++ 2019 tạo ra trung bình 50 luồng và đôi khi lên tới 500 luồng thậm chí chỉ có 12 luồng phần cứng.
Có cách nào để hạn chế số luồng song song được tính hardware_concurrency
với std::for_each
và std::execution::par
, hoặc cách duy nhất để tạo số lượng luồng hợp lý là sử dụng mã tùy chỉnh với std::thread
?
std::for_each
các thuật toán khác từ <algorithm>
tiêu đề. Ý tưởng chính đằng sau std::execution::par
là tạo mã song song gần như đơn giản như tuần tự và song song hóa các thuật toán hiện có với các thay đổi mã và ngữ nghĩa tối thiểu.