stringtranslate.com

Multihilo (arquitectura informática)

Un proceso con dos hilos de ejecución, ejecutándose en un solo procesador. El hilo n.° 1 se ejecuta primero, finalmente inicia el hilo n.° 2 y espera una respuesta. Cuando finaliza el subproceso n.º 2, le indica al subproceso n.º 1 que reanude la ejecución hasta su finalización y luego finaliza.
Un proceso con dos hilos de ejecución, ejecutándose en un solo procesador.

En arquitectura informática , 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 subprocesos de ejecución simultáneamente, respaldados por el sistema operativo . Este enfoque difiere del multiprocesamiento . En una aplicación multiproceso, los subprocesos comparten los recursos de uno o varios núcleos, que incluyen las unidades informáticas, las cachés de la CPU y el búfer de traducción (TLB).

Cuando los sistemas de multiprocesamiento incluyen múltiples unidades de procesamiento completas en uno o más núcleos, el multiproceso tiene como objetivo aumentar la utilización de un único núcleo mediante el uso de paralelismo a nivel de subprocesos , así como el paralelismo a nivel de instrucciones . Como las dos técnicas son complementarias, se combinan en casi todas las arquitecturas de sistemas modernos con múltiples CPU multiproceso y con CPU con múltiples núcleos multiproceso.

Descripción general

El paradigma de subprocesos múltiples se ha vuelto más popular a medida que los esfuerzos por explotar aún más el paralelismo a nivel de instrucción se han estancado desde finales de los años 1990. Esto permitió que el concepto de computación de rendimiento resurgiera del campo más especializado del procesamiento de transacciones . Aunque es muy difícil acelerar aún más un solo subproceso o un solo programa, la mayoría de los sistemas informáticos en realidad realizan múltiples tareas entre múltiples subprocesos o programas. Por lo tanto, las técnicas que mejoran el rendimiento de todas las tareas dan como resultado ganancias de rendimiento generales.

Dos técnicas principales para la computación de rendimiento son el multiproceso y el multiprocesamiento .

Ventajas

Si un subproceso sufre muchos errores de caché , los otros subprocesos pueden continuar aprovechando los recursos informáticos no utilizados, lo que puede conducir a una ejecución general más rápida, ya que estos recursos habrían estado inactivos si solo se ejecutara un subproceso. Además, si un subproceso no puede utilizar todos los recursos informáticos de la CPU (porque las instrucciones dependen del resultado de cada una), ejecutar otro subproceso puede evitar que esos recursos queden inactivos.

Desventajas

Varios subprocesos pueden interferir entre sí al compartir recursos de hardware, como cachés o búferes de traducción (TLB). Como resultado, los tiempos de ejecución de un solo subproceso no mejoran y pueden degradarse, incluso cuando solo se está ejecutando un subproceso, debido a frecuencias más bajas o etapas de canalización adicionales que son necesarias para acomodar el hardware de cambio de subprocesos.

La eficiencia general varía; Intel afirma obtener 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 en realidad 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 captaciones previas de datos (como lo haría un buen codificador de video) no sufren fallas de caché ni recursos informáticos inactivos. Por lo tanto, dichos programas no se benefician del multiproceso de hardware y, de hecho, pueden ver un rendimiento degradado debido a la competencia por recursos compartidos.

Desde el punto de vista del software, el soporte de hardware para subprocesos múltiples es más visible para el software y requiere más cambios tanto en los programas de aplicación como en los sistemas operativos que el multiprocesamiento. Las técnicas de hardware utilizadas para soportar subprocesos múltiples suelen ser paralelas a las técnicas de software utilizadas para la multitarea informática . La programación de subprocesos también es un problema importante en subprocesos múltiples.

Tipos de subprocesos múltiples

Multihilo intercalado/temporal

Multihilo de grano grueso

El tipo más simple de subprocesos múltiples ocurre cuando un subproceso se ejecuta hasta que es bloqueado por un evento que normalmente crearía una parada de larga latencia. Tal bloqueo podría ser una pérdida de caché que tiene que acceder a la memoria fuera del chip, lo que podría requerir cientos de ciclos de CPU para que los datos regresen. En lugar de esperar a que se resuelva el bloqueo, un procesador de subprocesos cambiaría la ejecución a otro subproceso que estuviera listo para ejecutarse. Solo cuando llegaron los datos del subproceso anterior, el subproceso anterior volvería a colocarse en la lista de subprocesos listos para ejecutar .

Por ejemplo:

  1. Ciclo i : se emite la instrucción j del 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 subproceso A , que es una instrucción de carga que falla en todos los cachés.
  4. Ciclo i + 3 : se invoca el programador 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 , en la que las tareas ceden voluntariamente el tiempo de ejecución cuando necesitan esperar algún tipo de evento. Este tipo de multiproceso se conoce como multiproceso en bloque, cooperativo o de grano grueso.

El objetivo del soporte de hardware de subprocesos múltiples es permitir un cambio rápido entre un subproceso bloqueado y otro subproceso listo para ejecutarse. Cambiar de un hilo a otro significa que el hardware pasa de utilizar un conjunto de registros a otro. Para lograr este objetivo, se replica el hardware de los registros visibles del programa, así como algunos registros de control del procesador (como el contador del programa). Por ejemplo, para cambiar rápidamente entre dos subprocesos, el procesador está construido con dos conjuntos de registros.

El soporte de hardware adicional para subprocesos múltiples permite que el cambio de subprocesos se realice en un ciclo de CPU, lo que aporta mejoras de rendimiento. Además, el hardware adicional permite que cada subproceso se comporte como si se ejecutara solo y no compartiera ningún recurso de hardware con otros subprocesos, lo que minimiza la cantidad de cambios de software necesarios dentro de la aplicación y el sistema operativo para admitir subprocesos múltiples.

Muchas familias de microcontroladores y procesadores integrados tienen múltiples bancos de registros para permitir un cambio rápido de contexto en caso de interrupciones. Dichos esquemas pueden considerarse un tipo de subprocesos múltiples en bloque entre el subproceso del programa de usuario y los subprocesos de interrupción. [ cita necesaria ]

Multihilo de grano fino

El propósito del subproceso múltiple detallado es eliminar todos los bloqueos de dependencia de datos del proceso de ejecución . Dado que un subproceso es relativamente independiente de otros subprocesos, hay menos posibilidades de que una instrucción en una etapa de canalización necesite un resultado de una instrucción anterior en la canalización. 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 subproceso activo es un ciclo de CPU.

Por ejemplo:

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

Este tipo de subproceso múltiple se denominó inicialmente procesamiento de barriles, en el que las duelas de un barril representan las etapas de la tubería y sus hilos de ejecución. Los subprocesos múltiples entrelazados, preventivos, de grano fino o divididos en el tiempo son terminología más moderna.

Además de los costos de hardware discutidos en el tipo de bloque de subprocesos múltiples, el subproceso múltiple entrelazado tiene un costo adicional de cada etapa de la canalización que rastrea el ID del subproceso de la instrucción que está procesando. Además, dado que se ejecutan más subprocesos simultáneamente en la canalización, los recursos compartidos, como cachés y TLB, deben ser más grandes para evitar la alteración entre los diferentes subprocesos.

Multihilo simultáneo

El tipo más avanzado de subprocesos múltiples se aplica a los procesadores superescalares . Mientras que un procesador superescalar normal emite múltiples instrucciones desde un solo subproceso en cada ciclo de CPU, en multiproceso simultáneo (SMT), un procesador superescalar puede emitir instrucciones desde múltiples subprocesos en cada ciclo de CPU. Al reconocer que cualquier subproceso tiene una cantidad limitada de paralelismo a nivel de instrucción , este tipo de subprocesos múltiples intenta explotar el paralelismo disponible en múltiples subprocesos para disminuir el desperdicio asociado con los espacios de problemas no utilizados.

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 subproceso A , la instrucción k + 1 del subproceso B y la instrucción m del subproceso C se emiten todas 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 todas simultáneamente.

Para distinguir los otros tipos de subprocesos múltiples de SMT, el término " multiproceso temporal " se utiliza para indicar cuando se pueden emitir instrucciones de un solo subproceso a la vez.

Además de los costos de hardware discutidos para los subprocesos múltiples entrelazados, SMT tiene el costo adicional de que cada etapa de la canalización rastree el ID del subproceso de cada instrucción que se procesa. Nuevamente, los recursos compartidos, como cachés y TLB, deben dimensionarse para la gran cantidad de subprocesos activos que se procesan.

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

Detalles de implementación

Un área importante de investigación es el programador de subprocesos, que debe elegir rápidamente entre la lista de subprocesos listos para ejecutar para ejecutar a continuación, así como mantener las listas de subprocesos listos para ejecutar y estancados. Un subtema importante son los diferentes esquemas de prioridad de subprocesos que puede utilizar el programador. El programador de subprocesos puede implementarse totalmente en software, totalmente en hardware o como una combinación de hardware/software.

Otra área de investigación es qué tipo de eventos deberían causar un cambio de subproceso: errores de caché, comunicación entre subprocesos, finalización de DMA , etc.

Si el esquema de subprocesos múltiples replica todo el estado visible del software, incluidos los registros de control privilegiados y los TLB, entonces permite que se creen máquinas virtuales para cada subproceso. Esto permite 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, entonces se requiere menos hardware, lo que permitiría que más subprocesos estuvieran activos al mismo tiempo por el mismo costo o área de matriz.

Ver también

Referencias

  1. ^ "Tecnología Intel Hyper-Threading, guía técnica del usuario" (PDF) . pag. 13. Archivado desde el original (PDF) el 21 de agosto de 2010.

enlaces externos