Al ejecutar trabajos multinúcleo, ¿perderé rendimiento si la carga promedio del sistema es superior a la cantidad de núcleos?

Al ejecutar trabajos multinúcleo, ¿perderé rendimiento si la carga promedio del sistema es superior a la cantidad de núcleos?

Hago muchos análisis estadísticos con R y utilizo en gran medida grandes instancias multinúcleo en AWS. Principalmente para búsquedas de hiperparámetros, validación cruzada y arranque.

Digamos que tengo una instancia con cnúcleos y un trabajo con r >= créplicas, que se distribuyen en cnúcleos a la vez. Ahora, debido al proceso del sistema (como la ejecución de mi cliente ssh htop), hay trabajos además de mis créplicas en ejecución.

Esto significa, hasta donde yo entiendo el funcionamiento del sistema operativo, que hay algún proceso que está cerrando mis trabajos para que htop(y cualquier otra cosa) pueda acceder a los procesadores. Después de dejar estos diversos procesos un tiempo al sol, mis trabajos se reanudan.

Cuando miro htop, veo mucho rojo mezclado con verde. ¿Es correcto decir que el verde es mi trabajo y el rojo es material de fondo hecho para permitir mi trabajo?

Intuitivamente, parece que este tipo de mezcla no sería óptima. Así que aquí está mi pregunta directa: si tengo acceso a clos núcleos, ¿debería asignar mis trabajos replicados a todos cellos, o tal vez c-1o algo así?

También imagino que hay muchos detalles sobre cómo se asignan los recursos informáticos a los trabajos que no entiendo y estoy pasando por alto. ¿Qué implicaría que todos mis trabajos vayan a c-1los núcleos y todos los procesos del sistema vayan al cthnúcleo? ¿Eso pondría todo mi htop en verde, excepto una barra? ¿Y esto tendría algún sentido?

Supongo que podría hacer experimentos de evaluación comparativa, pero esto sería difícil con instancias y conjuntos de datos enormes, y no estoy seguro de lo que aprendería dada la cantidad de cosas que serán específicas de la aplicación. Por eso quiero entender mejor cómo funcionan las cosas.

Respuesta1

Es difícil saber el efecto exacto en una aplicación en particular sin experimentar, PERO la regla general es que exceder el número de núcleos en una pequeña cantidad es beneficioso (por ejemplo, la mayoría de las guías de compilación sugieren llamar a make con el número de núcleos/hilos + 1), pero excederlo en gran medida probablemente sea contraproducente debido a los gastos generales adicionales. La razón de esto es que si una (o un par) de las tareas está inactiva esperando E/S o temporizadores o lo que sea, los otros subprocesos aún pueden continuar.

La distribución del trabajo (programación del sistema operativo) ocurre en todos los sistemas operativos modernos y es algo con lo que deberíamos trabajar, en lugar de luchar contra ello. Si parece que hay algo que no está relacionado compitiendo, puede abandonar el buen nivel de su proceso, pero en una instancia de AWS dedicada... Es difícil imaginar que eso sea necesario.

información relacionada