Uso std::for_each
con std::execution::par
per eseguire calcoli complessi su immensi input rappresentati come vettore di strutture. Il calcolo non richiede alcun ritardo relativo all'hardware (ad esempio IO di rete o del disco), è un calcolo "solo CPU". Per me sembra logico che non abbia senso creare più thread del sistema operativo di quelli hardware; tuttavia, Visual C ++ 2019 crea in media 50 thread e, talvolta, fino a 500 thread, anche se sono presenti solo 12 thread hardware.
Esiste un modo per limitare il conteggio dei thread paralleli hardware_concurrency
con std::for_each
e std::execution::par
, o l'unico modo per creare un conteggio di thread ragionevole è utilizzare il codice personalizzato con std::thread
?
std::for_each
e con altri algoritmi dall'intestazione <algorithm>
. L'idea principale alla base std::execution::par
è rendere il codice parallelo quasi semplice come quello sequenziale e parallelizzare gli algoritmi esistenti con modifiche minime al codice e alla semantica.