Utilizo std::for_each
con std::execution::par
para realizar cálculos complejos en una gran entrada representada como vector de estructuras. El cálculo no necesita retrasos relacionados con el hardware (red o disco IO, por ejemplo), es el cálculo "solo CPU". Para mí, parece lógico que no tenga sentido crear más subprocesos del sistema operativo que los que tenemos en el hardware; sin embargo, Visual C ++ 2019 crea en promedio 50 subprocesos y, a veces, hasta 500, incluso solo hay 12 subprocesos de hardware.
¿Hay una manera de limitar hilos paralelos contar hasta hardware_concurrency
con std::for_each
y std::execution::par
, o la única manera de crear hilos razonables count es para uso con código personalizado std::thread
?
c++
multithreading
Vitalii
fuente
fuente
std::for_each
otros algoritmos del<algorithm>
encabezado. La idea principal detrásstd::execution::par
es hacer que el código paralelo sea casi tan simple como el secuencial, y la paralelización de los algoritmos existentes con cambios mínimos de código y semántica.Respuestas:
No, al menos no en C ++ 17. Sin embargo, hay una propuesta para
executors
un estándar por venir, que básicamente le da la capacidad de influir en el contexto de ejecución (en términos de ubicación y tiempo) para la interfaz del algoritmo STL de alto nivel:Hasta entonces, debe confiar en su proveedor de compiladores para que sepa qué es lo mejor para el rendimiento general, como, por ejemplo, los desarrolladores de Visual Studio afirman :
La otra opción sería renunciar a depender únicamente de la biblioteca estándar y usar implementaciones STL que ya cuentan con la nueva propuesta.
fuente