Я використовую std::for_each
з std::execution::par
для виконання складних обчислень на величезному вході представлений в вигляді вектора структур. Для обчислення не потрібні затримки, пов'язані з обладнанням (наприклад, мережевий або дисковий IO), це "просто CPU". Для мене виглядає логічним, що немає сенсу створювати більше потоків ОС, у яких є апаратні; однак Visual C ++ 2019 створює в середньому 50 потоків, а іноді до 500, навіть є лише 12 апаратних потоків.
Чи є спосіб обмежити паралельні потоки розраховувати на hardware_concurrency
з std::for_each
і std::execution::par
, або єдиним способом створити розумні теми підраховувати є використання призначеного для користувача коду з std::thread
?
std::for_each
та інші алгоритми з <algorithm>
заголовка. Основна ідея std::execution::par
- створення паралельного коду настільки ж просто, як послідовний, і паралелізація існуючих алгоритмів з мінімальними змінами коду та семантики.