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