¿Qué es el robo de trabajo?

click fraud protection

Las computadoras modernas tienen múltiples núcleos de procesamiento. Suponiendo que haya suficiente procesamiento para que cada núcleo pueda permanecer continuamente ocupado. se les asignará una cola de elementos de trabajo computacionales. O subprocesos para completar por el planificador.

Durante la ejecución de estos subprocesos, es posible generar nuevos subprocesos o elementos de trabajo. Estos son subprocesos separados que se pueden procesar simultáneamente. Es posible que necesiten enviar los resultados a los programas de desove o permanecer completamente separados por tiempo indefinido. Por lo general, estos subprocesos secundarios se asignan al mismo núcleo de procesamiento que el principal.

Todo esto supone que todos los núcleos se mantienen ocupados. Esto sucederá si no finaliza ningún subproceso o si se generan nuevos subprocesos al mismo ritmo o más rápido que el final de los subprocesos existentes. Sin embargo, en el mundo real, la carga de trabajo a largo plazo rara vez es tan simple, especialmente en los dispositivos informáticos del usuario final. Eventualmente, un núcleo de procesamiento probablemente completará todas las tareas asignadas. Cuando esto sucede, en lugar de permanecer inactivo y desperdiciar el rendimiento potencial, verifica las colas de trabajo de los otros núcleos de procesamiento y les roba un elemento de trabajo.

Beneficios y desventajas

El robo de trabajo significa que un núcleo de procesamiento inactivo buscará activamente trabajo para completarlo. Esto evita que una fracción potencialmente grande del procesador general permanezca inactiva, lo cual es útil. Sin embargo, el robo de trabajo puede tener algunos costos. Por ejemplo, el nuevo núcleo de procesamiento probablemente tendrá que cargar todos los datos relevantes en su memoria caché.

Esto puede llevar tiempo, especialmente si debe solicitarse desde la RAM del sistema en lugar de ser atendido por un nivel de caché compartido. Es posible que el procesador original hubiera podido reanudar ese elemento de trabajo en ese período de tiempo, lo que condujo a una ejecución general más rápida. Este puede ser incluso el caso si el núcleo de procesamiento del que se robó el elemento de trabajo nunca había comenzado a procesarlo. Algunos valores almacenados en caché pueden ser idénticos entre subprocesos principales y secundarios.

Implementaciones

Varios lenguajes de programación tienen tiempos de ejecución que pueden programar el trabajo directamente en procesadores dedicados. Por ejemplo, el lenguaje de programación Cilk, el tiempo de ejecución Rust Tokio y la biblioteca paralela de tareas .Net pueden hacer esto. Alternativamente, el sistema operativo puede estar a cargo de programar el tiempo real del procesador. Con el programa simplemente agregando tareas a un grupo de "subprocesos de trabajo", que son programados por el sistema operativo.

Esto sucede en sistemas donde el programa no tiene acceso directo dedicado a los núcleos de procesamiento, pero debe compartir el acceso con otros procesos. Se debe tener especial cuidado en este escenario para garantizar que un subproceso no sea robado repetidamente mientras permanece inactivo.

Hay varios enfoques sobre cómo se seleccionan los elementos de trabajo para ser robados. En el concepto original, el enfoque consistía en elegir otro núcleo aleatorio. Si tenía uno o más elementos de trabajo en su cola, tome el último. Dependiendo de la preferencia de si el procesador de origen ejecuta inmediatamente un proceso secundario. O, si se envía a la cola del procesador y el proceso principal continúa ejecutándose, se robará el subproceso principal o secundario.

Todo se puede resumir como Robo de trabajo, una técnica de equilibrio de carga que garantiza que la carga de palabras se distribuya de manera uniforme entre los procesadores disponibles. De esa manera, todos los procesadores están haciendo algo para ayudar.

Conclusión

El robo de trabajo es un proceso que ocurre automáticamente en las CPU multinúcleo. Cada núcleo tiene una cola de tareas para realizar. Cuando un procesador completa sus tareas, roba otra tarea de la cola de otro núcleo de procesamiento. Esto ayuda a evitar que el procesador tenga algunos núcleos inactivos mientras que otros todavía tienen una cola de tareas por realizar.