Articulo de referencia

Multiprocesamiento (arquitectura de computadoras)

Un proceso con dos hilos de ejecución, que se ejecuta en un único procesador. En arquitectura informática , el multihilo es la capacidad de una unidad central de procesamiento (...

Un proceso con dos hilos de ejecución, que se ejecuta en un único procesador. El hilo n.° 1 se ejecuta primero, inicia el hilo n.° 2 y espera una respuesta. Cuando el hilo n.° 2 finaliza, le indica al hilo n.° 1 que reanude su ejecución hasta completarla y, a continuación, finaliza.
Un proceso con dos hilos de ejecución, que se ejecuta en un único procesador.

En arquitectura informática , el multihilo es la capacidad de una unidad central de procesamiento (CPU) (o un solo núcleo en un procesador multinúcleo ) para proporcionar múltiples hilos de ejecución .

Descripción general

El paradigma de multihilo se ha popularizado a medida que los esfuerzos por aprovechar aún más el paralelismo a nivel de instrucciones se estancaron desde finales de la década de 1990. Esto permitió que el concepto de computación de alto rendimiento resurgiera del campo más especializado del procesamiento de transacciones . Si bien es muy difícil acelerar aún más un solo hilo o programa, la mayoría de los sistemas informáticos realizan multitarea entre múltiples hilos o programas. Por lo tanto, las técnicas que mejoran el rendimiento de todas las tareas resultan en mejoras generales del desempeño.

Dos técnicas principales para la computación de alto rendimiento son el procesamiento multihilo y el procesamiento paralelo .

Ventajas

Si un hilo experimenta muchos fallos de caché , los demás hilos pueden seguir aprovechando los recursos informáticos no utilizados, lo que puede acelerar la ejecución general, ya que estos recursos habrían permanecido inactivos si solo se ejecutara un hilo. Asimismo, si un hilo no puede utilizar todos los recursos informáticos de la CPU (debido a que las instrucciones dependen de los resultados de los demás), la ejecución de otro hilo puede evitar que dichos recursos queden inactivos.

Desventajas

Los hilos múltiples pueden interferir entre sí al compartir recursos de hardware como cachés o búferes de traducción anticipada (TLB). Como resultado, los tiempos de ejecución de un solo hilo no mejoran e incluso pueden empeorar, aunque solo se esté ejecutando un hilo, debido a frecuencias más bajas o etapas de canalización adicionales necesarias para dar cabida al hardware de conmutación de hilos.

La eficiencia general varía; Intel afirma una mejora de hasta el 30 % con su tecnología Hyper-Threading , [ 1 ] mientras que un programa sintético que simplemente realiza un bucle de operaciones de punto flotante dependientes no optimizadas obtiene una mejora de velocidad del 100 % cuando se ejecuta en paralelo. Por otro lado, los programas en lenguaje ensamblador ajustados manualmente que utilizan extensiones MMX o AltiVec y realizan precargas de datos (como lo haría un buen codificador de vídeo) no sufren fallos de caché ni recursos de computación inactivos. Por lo tanto, dichos programas no se benefician del multihilo por hardware y, de hecho, pueden experimentar una degradación del rendimiento debido a la contención por recursos compartidos.

Desde el punto de vista del software, la compatibilidad del hardware con el procesamiento multihilo es más evidente para el software, lo que requiere más cambios tanto en los programas de aplicación como en los sistemas operativos que el procesamiento multiproceso. Las técnicas de hardware utilizadas para soportar el procesamiento multihilo suelen ser similares a las técnicas de software utilizadas para la multitarea informática . La planificación de hilos también representa un problema importante en el procesamiento multihilo.

La fusión de datos de dos procesos a menudo puede generar costos significativamente más altos en comparación con el procesamiento de los mismos datos en un solo hilo, potencialmente en dos o más órdenes de magnitud debido a gastos generales como la comunicación y la sincronización entre procesos. [ 2 ] [ 3 ] [ 4 ]

Tipos

El tipo más simple de multihilo ocurre cuando un hilo se ejecuta hasta que se bloquea por un evento que normalmente provocaría una pausa prolongada. Dicha pausa podría deberse a un fallo de caché que requiere acceder a memoria externa, lo que podría tardar cientos de ciclos de CPU en recuperar los datos. En lugar de esperar a que se resuelva la pausa, un procesador multihilo cambiaría la ejecución a otro hilo que estuviera listo para ejecutarse. Solo cuando los datos del hilo anterior hayan llegado, este se volvería a incluir en la lista de hilos listos para ejecutarse .

Por ejemplo:

  1. Ciclo i : se emite la instrucción j desde el hilo A.
  2. Ciclo i + 1 : se emite la instrucción j + 1 del hilo A.
  3. Ciclo i + 2 : se emite la instrucción j + 2 del hilo A , que es una instrucción de carga que no se encuentra en ninguna de las cachés.
  4. Ciclo i + 3 : se invoca el planificador de subprocesos, cambia al subproceso B.
  5. Ciclo i + 4 : se emite la instrucción k del hilo B.
  6. Ciclo i + 5 : se emite la instrucción k + 1 del hilo B.

Conceptualmente, es similar a la multitarea cooperativa utilizada en los sistemas operativos en tiempo real , donde las tareas ceden voluntariamente tiempo de ejecución cuando necesitan esperar algún tipo de evento. Este tipo de multihilo se conoce como multihilo por bloques, cooperativo o de grano grueso.

El objetivo del soporte de hardware para multihilo es permitir el cambio rápido entre un hilo bloqueado y otro listo para ejecutarse. Cambiar de un hilo a otro implica que el hardware cambie de un conjunto de registros a otro. Para lograrlo, se replica el hardware de los registros visibles para el programa, así como algunos registros de control del procesador (como el contador de programa). Por ejemplo, para cambiar rápidamente entre dos hilos, el procesador está diseñado con dos conjuntos de registros.

La compatibilidad adicional con hardware para el procesamiento multihilo permite que el cambio de hilo se realice en un solo ciclo de CPU, lo que mejora el rendimiento. Además, este hardware adicional permite que cada hilo se comporte como si se ejecutara de forma independiente, sin compartir recursos de hardware con otros hilos, lo que minimiza la cantidad de cambios de software necesarios en la aplicación y el sistema operativo para admitir el procesamiento multihilo.

Muchas familias de microcontroladores y procesadores embebidos cuentan con múltiples bancos de registros para permitir un cambio de contexto rápido para las interrupciones. Estos esquemas pueden considerarse un tipo de multihilo por bloques entre el hilo del programa de usuario y los hilos de interrupción.

Multiprocesamiento de grano fino

El objetivo del multihilo de grano fino es eliminar todas las pausas por dependencia de datos en la canalización de ejecución . Dado que un hilo es relativamente independiente de los demás, hay menos probabilidades de que una instrucción en una etapa de la canalización necesite la salida de una instrucción anterior. Conceptualmente, es similar a la multitarea preventiva utilizada en los sistemas operativos; una analogía sería que el intervalo de tiempo asignado a cada hilo activo es un ciclo de CPU.

Por ejemplo:

  1. Ciclo i + 1 : se emite una instrucción desde el hilo B.
  2. Ciclo i + 2 : se emite una instrucción desde el hilo C.

Este tipo de multihilo se denominó inicialmente procesamiento en barril, donde las duelas de un barril representan las etapas de la tubería y sus hilos de ejecución. La terminología más moderna incluye multihilo intercalado, preventivo, de grano fino o con división temporal.

Además de los costos de hardware mencionados en el multihilo de tipo bloque, el multihilo entrelazado tiene un costo adicional debido a que cada etapa de la tubería rastrea el ID del hilo de la instrucción que está procesando. Asimismo, dado que se ejecutan más hilos simultáneamente en la tubería, los recursos compartidos, como las cachés y las TLB, deben ser más grandes para evitar la sobrecarga entre los diferentes hilos.

Multiprocesamiento simultáneo

El tipo más avanzado de multihilo se aplica a los procesadores superescalares . Mientras que un procesador superescalar normal emite múltiples instrucciones desde un solo hilo en cada ciclo de CPU, en el multihilo simultáneo (SMT) un procesador superescalar puede emitir instrucciones desde múltiples hilos en cada ciclo de CPU. Al reconocer que cualquier hilo individual tiene una cantidad limitada de paralelismo a nivel de instrucción , este tipo de multihilo intenta aprovechar el paralelismo disponible entre múltiples hilos para disminuir el desperdicio asociado con las ranuras de emisión no utilizadas.

Por ejemplo:

  1. Ciclo i : las instrucciones j y j + 1 del hilo A y la instrucción k del hilo B se emiten simultáneamente.
  2. Ciclo i + 1 : la instrucción j + 2 del hilo A , la instrucción k + 1 del hilo B y la instrucción m del hilo C se emiten simultáneamente.
  3. Ciclo i + 2 : la instrucción j + 3 del hilo A y las instrucciones m + 1 y m + 2 del hilo C se emiten simultáneamente.

Para distinguir otros tipos de multihilo de SMT, se utiliza el término " multihilo temporal " para indicar cuándo solo se pueden emitir instrucciones de un hilo a la vez.

Además de los costos de hardware mencionados para el multihilo entrelazado, SMT tiene el costo adicional de que cada etapa de la tubería rastrea el ID del hilo de cada instrucción que se procesa. Nuevamente, los recursos compartidos, como las cachés y las TLB, deben dimensionarse para la gran cantidad de hilos activos que se procesan.

Las implementaciones incluyen DEC (más tarde Compaq ) EV8 (no completada), tecnología Intel Hyper-Threading , IBM POWER5 / POWER6 / POWER7 / POWER8 / POWER9 , IBM z13 / z14 / z15 , Sun Microsystems UltraSPARC T2 , Cray XMT y las microarquitecturas AMD Bulldozer y Zen .

Detalles de la implementación

Un área importante de investigación es el planificador de hilos, que debe seleccionar rápidamente entre la lista de hilos listos para ejecutarse el siguiente, además de mantener actualizadas las listas de hilos listos para ejecutarse y los hilos bloqueados. Un subtema importante son los diferentes esquemas de prioridad de hilos que puede utilizar el planificador. El planificador de hilos puede implementarse completamente en software, completamente en hardware o como una combinación de ambos.

Otra área de investigación es qué tipo de eventos deberían provocar un cambio de hilo: fallos de caché, comunicación entre hilos, finalización de DMA , etc.

Si el esquema de multihilo replica todo el estado visible para el software, incluidos los registros de control privilegiados y las TLB, permite crear máquinas virtuales para cada hilo. Esto posibilita que cada hilo ejecute su propio sistema operativo en el mismo procesador. Por otro lado, si solo se guarda el estado del modo de usuario, se requiere menos hardware, lo que permitiría que más hilos estuvieran activos simultáneamente con la misma área de chip o al mismo costo.

Véase también

Referencias

  1. "Tecnología Intel Hyper-Threading, Guía técnica del usuario" (PDF) . pág.  13. Archivado del original (PDF) el 21 de agosto de 2010.
  2. Silberschatz, Abraham; Galvin, Peter B.; Gagne, Greg (29 de julio de 2008). Conceptos de sistemas operativos . Wiley. ISBN 978-0470128725.
  3. Organización y diseño de computadoras, edición MIPS: La interfaz hardware/software (Serie Morgan Kaufmann de arquitectura y diseño de computadoras) . Morgan Kaufmann. 2013. ISBN 978-0124077263.
  4. Programación paralela: técnicas y aplicaciones con estaciones de trabajo en red y ordenadores paralelos . Pearson. 2005. ISBN 978-0131405639.
  • Un estudio sobre procesadores con multihilo explícito , ACM , marzo de 2003, por Theo Ungerer, Borut Robi y Jurij Silc.
  • Sistema operativo | Diferencia entre multitarea, multihilo y multiprocesamiento GeeksforGeeks, 6 de septiembre de 2018.