Procesamiento+Multihebra





toc

Antecedentes
En la búsqueda de mejorar las prestaciones del procesador, los diseñadores han enfocado su trabajo en incrementar la frecuencia de reloj o aumentar no simplemente la capacidad de ejecución de las instrucciones sino cuántas instrucciones pueden completarse en un ciclo de reloj. En el proceso de aumentar las Instrucciones por ciclo se ha utilizado el cauce segmentado así como cauces paralelos en arquitecturas superescalares, sin embargo estas estrategias han presentado limitaciones como la capacidad de utilización de cada etapa del cauce y la ejecución de las instrucciones en orden diferente, que al ser un mecanismo complejo aumentan la complejidad y el consumo de potencia.

¿En qué consiste?
El procesamiento multihebra es una alternativa para solucionar el problema descrito anteriormente, este consiste en dividir la secuencia de instrucciones, en unidades más pequeñas comunmente llamadas hebras o threads que se puedan ejecutar en paralelo. En estas máquinas cada procesador tiene cierto número de flujos de instrucciones implementados en hardware, incluyendo el contador de programa y registros, cada uno destinado a ejecutar una hebra. En cada ciclo el procesador ejecuta instrucciones de una de la hebras. En el ciclo siguiente, el procesador hace un cambio de contexto y ejecuta instrucciones de otra hebra. Para ampliar este concepto Charles Petzold ofrece una definición en su libro "Programming Windows":

"Multithreading is the ability for a program to multitask within itself. The program can split itself into separate "threads" of execution that also seem to run concurrently. This concept might at first seem barely useful, but it turns out that programs can use multithreading to perform lengthy jobs in the background without requiring the user to take an extended break away from their machines. Of course, sometimes this may not be desired: an excuse to take a journey to the watercooler or refrigerator is often welcome! But the user should always be able to do something on the machine, even when it's busy doing some thing else."

A modo de representación gráfica de los threads presentamos la imagen a continuación además de un [|video de multithreading]



Conceptos importantes asociados a Procesadores Multihebra

 * Proceso: Es la ejecución del programa, a este se asocian
 * Propiedad de recursos: Espacio de direcciones virtuales para almacenar la imagen del proceso, los datos, la pila o control de recursos como memoria, dispositivos E/S.
 * Ejecución: Sigue la traza o camino de ejecución mediante uno o más programas.El sistema operativo es el encargado de planificar y asignar, de acuerdo al estado de ejecución y su prioridad, así como de mezclar los procesos.
 * Conmutación de proceso:Cambiar el proceso que se está ejecutando en el prtocesador por otro proceso.
 * Hebra: Unidad de trabajo que puede ser asignada al procesador.La hebra se ejecuta secuencialmente y se puede interrumpir para pasar a ejecutar otra hebra.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Conmutación de hebra: Pasar el control de una hebra a otra dentro de un mismo proceso.

<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Las hebras comparten recursos, esto hace que consuman menos tiempo que la conmutación de procesos. <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Existen las Hebras Explícitas que se dividen en:
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Hebras a nivel de usuario (user -level threads) visibles para los programas de aplicación
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Hebras a nivel de núcleo (kerner-level threads) visible únicamente para el sistema operativo



<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Procesamiento Multihebra Implícito: Ejecución de concurrente de hebras provenientes de un único programa secuencial. <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Procesamiento Multihebra Explícito: Ejecutan concurrentemente instrucciones de hebras explícitas diferentes, entremezclando instrucciones de hebras diferentes en cauces compartidos o mediante ejecución y cauces paralelos.

<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">En sus diseños asociados, se trabaja cada hebra individualmente y técnicas como predicción de saltos,renombramiento de registros para la optimización. Se aprovecha el paralelismo entre hebras y el paralelismo de instrucciones para la mejora de prestaciones.

<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Aproximaciones procesamiento Multihebra
<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Ambas conmutan velozmente entre hebras, permitiendo el aprovechamiento de los recursos del procesador y evita penalizaciones por eventos de retardos.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Multihebra de grano fino: El procesador trabaja con uno o varios contextos la mismo tiempo, conmutando entre uno y otro en cada ciclo de reloj. Salta a otra hebra que esté preparada en caso de bloqueos.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Multihebra con bloqueo o de grano grueso: Se ejecutan las instrucciones de la hebra hasta que se produzca un evento que conduce a la conmutación a otra hebra.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Multihebra Simultánea (SMT): Emisión a la misma vez de Instrucciones de hebras diferentes a las unidades funcionales del procesador. Supone una ejecución simultánea real de hebras diferentes con recursos de ejecución repetidos.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Multiprocesador monochip: En un circuito integrado se producen copias del procesador que actúan sobre diferentes hebras. Permiten la ejecución simultánea de instrucciones.

<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Emisión de una única instrucción por ciclo

 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Escalar de una hebra: Cauce simple, sin procesamiento multihebra.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Escalar Multihebra con entrelazado: Aproximación más fácil de implementar. Es necesario hardware que admita la conmutación de hebras para poder mantener ocupadas las etapas del cauce. Proporciona la mejor utilización sin embargo sacrifica las prestaciones del procesamiento de cada hebra ya que estas compiten por cache posibilitando fallos de cache en las hebras.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Escalar Multihebra con bloqueo: Cada hebra se ejecuta hasta producirse un evento que hace que el procesador conmute a otra hebra. Dependiendo del diseño e implementación este procesamiento puede necesitar un ciclo para conmutar entre las hebras.

<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Emisión de múltiples instrucciones por ciclo de una misma hebra

 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Superescalar: Se consideraba la aproximación más potente para aprovechar el paralelismo, sin embargo presenta huecos de emisión que no se utilizan por lo que hay pérdida horizontal y vertical.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Superescalar Multihebra con entrelazado: Permite emitir cuantas instrucciones sean posibles para una única hebra, con esto se elimina el retraso por la conmutación de las hebras. El número de instrucciones está limitado a las dependencias existentes en cada hebra.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Superescalar multihebra con bloqueo: Solo pueden emitirse instrucciones de una sola hebra hasta que se presente un evento que haga una conmutación de hebra.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Procesadores de palabra de instrucciones muy larga (VLIW): Ubica varias instrucciones en una única palabra, en este caso el compilador construye códigos VLIW ubicando cuales operaciones pueden ejecutarse en paralelo dentro de la palabra. Si no es posible llenar la palabra con instrucciones que se ejecuten en paralelo, se incluyen códigos de no-operar.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">VLIW multihebra con entrelazado: Su eficiencia es similar al procesamiento superescalar multihebra con entrelazado.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">VLIW multihebra con bloqueo: Proporciona eficiencia parecida al procesamiento superescalar multihebra con bloqueo.

<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Emisión simultánea y paralela de varias hebras

 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Procesadores Multihebra Simultánea (SMT): Es capaz de emitir varias instrucciones a la vez donde las hebras con mayor grado de paralelismo entre instrucciones pueden llenar los huecos de emisión horizontales, o en otros ciclos se podría emitir dos o más hebras. Se alcanza un alto nivel de eficiencia cuando se tienen suficientes hebras activas equivalente a emitir el mayor número de instrucciones por ciclo.
 * <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Multiprocesadores Monochip: Presenta en un chip varios procesadores superescalares, donde a cada uno de ellos se le asiga una hebra de la que se pueden emitir varias instrucciones por ciclo. Este multiprocesador no puede ocultar la latencia ocasionada en la emisión de instrucciones de otras hebras. Actualmente se utiliza procesamiento multihebra en cada uno de los procesadores pertenecientes al multiprocesador monochip.

<span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Algunos ejemplos de procesamiento multihebra utilizados anteriormente son Pentium 4, IBM Power5 y Nehalem. <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">En el caso específico de Nehalem puede tener dos, cuatro, ocho, diez o doce núcleos, presenta multithreading simultáneo (SMT) de núcleos múltiple que permite dos hilos por núcleos, Intel llama esta tecnología hyper-threading. <span style="font-family: Arial,Helvetica,sans-serif; font-size: 120%;">Puede consultar otros detalles interesantes de esta microarquitectura en el siguiente enlace [|Intel Microarchitecture Nehalem]