Procesadores Segmentados, Superescalares y Vectoriales

Procesadores Segmentados

En un procesador segmentado (PS), la ejecución de una instrucción pasa por las etapas: 1.Búsqueda de Instrucción, 2.Decodificación, 3.Búsqueda de Operandos, 4.Ejecución, 5.Almacenamiento de Resultados. Cuando una instrucción termina por una etapa, esa etapa la ocupa la siguiente instrucción, mientras que en un procesador NO segmentado las instrucciones se ejecutan de forma secuencial.

Las ventajas que tiene son que mejora la productividad aumentando el número de instrucciones por unidad de tiempo, se reduce el tiempo medio de ejecución, mejora en tiempo de ejecución de una máquina segmentada frente a la misma no segmentada.

Los problemas que tiene son, dependencia de datos (una instrucción necesita los resultados de otra anterior por no haberse terminado de ejecutar y pueden ser: RAW (soluciones: reorganizar el código, interbloqueo entre etapas y atajos o adelantos), WAR y WAW), dependencia de control (se producen a partir de las instrucciones de control de flujo, saltos y bifurcaciones, ya que no podemos leer la instrucción siguiente hasta que no se conozca su dirección. Soluciones: inserción de instrucciones NOP y salto retardado) y dependencias estructurales (se da por conflictos en los recursos debido a que el hardware que necesita una instrucción está siendo utilizado por otra. Soluciones: incluir la unidad de gestión de memoria y una nueva etapa al cauce).

Principio de Segmentación y Mejora de Prestaciones

El principio de segmentación y la mejora de prestaciones, la etapa más lenta es la que determina el ritmo del cauce. Si la duración de la etapa k más lenta es cercana a la del cauce a segmentar la ganancia que se obtenga será muy pequeña.

La tabla de reserva representa la ocupación de las etapas de un cauce, a medida que un elemento progresa por él. Un cauce lineal, cada etapa está conectada solo con una anterior y otra posterior, y las entradas a procesar se pueden introducir en el cauce al ritmo de una cada ciclo de reloj. Un cauce No lineal es cuando una etapa necesita varios ciclos de reloj o una operación utiliza más de una etapa al mismo tiempo.

La productividad de un cauce depende de que exista tanto una fuente continua de operaciones a realizar como un procedimiento eficaz de planificación del cauce.

La latencia la puedo optimizar con la mínima latencia alcanzable, un ciclo simple o con un ciclo greedy.

Interrupciones en un PS

Una interrupción en un PS es una señal recibida por el procesador de una computadora que indica que debe interrumpir el curso de ejecución actual y ejecutar entonces el código específico para tratar esta situación. Algunos tipos de interrupciones son: excepciones síncronas/asíncronas, solicitadas por el usuario, enmascarables o no enmascarables, dentro de una instrucción, excepciones para terminar e interrupciones precisas o imprecisas.

Procesadores Superescalares

Una arquitectura superescalar tiene las prestaciones de la segmentación, permitiendo además la existencia simultánea de varias instrucciones en la misma etapa. Para esto es necesaria la duplicación de recursos y la utilización de diversas técnicas que permitan optimizar su utilización. Puede alcanzarse una productividad mayor que una instrucción por ciclo llegando en la práctica a aceleraciones cercanas a dos.

La supersegmentación consiste en dividir etapas de un cauce en subetapas, aprovechando que muchas tareas requieren menos de la mitad de un ciclo de reloj para completarse. Dividiendo cada etapa en dos y utilizando un reloj interno del doble de frecuencia se pueden obtener dos instrucciones por ciclo de reloj. Esto tiene un límite de etapas por lo que la solución superescalar es una forma de aumentar las prestaciones por encima de este límite.

Paralelismo

Existen tres tipos de paralelismo: Paralelismo a nivel de las instrucciones (ILP)(existe cuando las instrucciones de un programa son independientes, el código se puede reordenar sin alterar el resultado y por tanto ejecutar las instrucciones en paralelo rompiendo la secuencialidad), Paralelismo a nivel de la máquina (MLP)(medida de la capacidad del procesador para sacar partido del ILP y tenemos dos aproximaciones: Scheduling Dinámico (HW) y Scheduling Estático(SW)), Paralelismo a nivel de threads (TLP)(es una medida de esta propiedad en los programas y puede ser explotado por los procesadores superescalares, ya que es más explícito que el ILP).

ILP vs MLP se denomina grado de paralelismo al número máximo de instrucciones que se puede ejecutar en paralelo.

Técnicas de Optimización

Algunas técnicas de optimización: Duplicación de recursos, Política de emisión desordenada de instrucciones con venta de ejecución y renombrado de registros.

Dependencias

Si tenemos dependencia RAW la condición del conflicto(cc) es la ejecución simultánea y no hay solución, bloqueo de la instrucción y se palía su efecto con ejecución desordenada, WAR la cc es el desorden en emisión y la solución es renombrar los registros, WAW la cc es el desorden en ejecución/escritura y la solución es el nombre de registros.

Interrupciones

Dos estrategias: las instrucciones se retiran ordenadamente por lo que cambian el estado de la máquina según el orden en que aparecen en el programa y siempre existe un estado de la máquina bien definido y las instrucciones cambian el estado de la máquina según se ejecutan y añaden elementos que permiten reconstruir un estado bien definido.

Arquitectura Superescalar

La arquitectura superescalar tiene las ventajas de que el HW resuelve todo: detecta el paralelismo, emite, renombra registros etc y compatibilidad binaria: puede agregar unidades funcionales sin cambiar el ISA. Las desventajas el HW es muy complejo llegando rápidamente al límite y ventana de ejecución limitada por el HW.

Arquitectura VLIW

las ventajas: HW simple, puede incrementarse el número de unidades funcionales sin agregar HW de detención adicional, bajo consumo de potencia, es una arquitectura muy difundida en circuitos embebidos (DSP’s y Multimedia) etc. Las desventajas que tiene gran número de registros visibles, necesarios para mantener las UFs activas, baja densidad de código, debido a las operaciones vacías, incompatibilidad binaria etc. Las limitaciones tamaño de código (mucho desperdicio de memoria por instrucciones NOP), hay que recompilar todo el código para cada versión nueva de procesador, baja ocupación de las unidades funcionales, conflictos en el acceso al banco de registros, dificultades en la predicción estática de saltos etc. El formato de las instrucciones cada instrucción contiene 3 operaciones de 41 bits y un template de 5 (esta plantilla indica que instrucciones pueden ejecutarse en paralelo). El objetivo principal de la ocupación de las unidades principales es mantener ocupadas todas las unidades funcionales. La planificación del compilador sería modificación del código fuente para incrementar el apralelismo a nivel de instrucción y aplicación de técnicas usadas para superescalares (Loop unrolling, segmentación de software, actualización de referencias y renombrado de registros).

Un procesador vectorial (PV) proporciona instrucciones que trabajan sobre vectores. Una sola instrucción de vectores es equivalente a un lazo completo en el que se procesa un elemento a la vez y ahorra: el uso y actualización de índices, saltos tras cada iteración al comienzo del bucle y búsqueda (fetch) de todas las instrucciones del bucle. La arquitectura básica de un computador vectorial tiene: Registros vectoriales(contienen operandos vectoriales en máquinas de registros, si la máquina es memoria-memoria no existen, valores típicos 64 o 128 y deben tener al menos 2 puertos de lectura y uno de escritura), Unidades funcionales vectoriales(ejecutan las operaciones vectoriales y están segmentadas y suelen tener latencia 1), Unidad de carga y almacenamiento(gestiona transferencias de vectores desde/a memoria y  también puede ocuparse de los datos escalares), Registros escalares(contiene los operandos escalares, se usan en operaciones vectoriales y para calcular direcciones y se necesitan varios puertos de lectura y escritura), Unidades funcionales escalares(pueden existir para operaciones específicamente escalares y pueden no existir si para estas operaciones se usan las unidades vectoriales). Las ventajas de las máquinas vectoriales: proporcionan gran aprovechamiento del paralelismo con un control relativamente sencillo, reduce la necesidad de ancho de banda de instrucciones, optimiza el uso de la memoria con accesos predecibles que se pueden solapar y elimina dependencias de control e instrucciones de comprobación y contabilidad. El sistema de memoria en una máquina vectorial, los accesos no son datos individuales si no vectores y se utilizan normalmente dos opciones: Memoria entrelazada (tiene un diseño más sencillo y barato, pero menos flexible) y Bancos de memoria independientes (es más cara, cada banco necesita un bus, pero es más flexible). Existen soluciones intermedias como memoria de bancos independientes con un bus compartido por todos los bancos. Los problemas con los PV, la longitud del vector en la aplicación no coincide con el tamaño de los registros, solución: se añade un registro escalar llamado VLR. El espaciado de un vector en memoria no tiene por qué ser 1, solución: se indica el espaciado con un registro específico. El bucle que se quiere vectorizar lleva sentencias condicionales, solución: utilizar un vector de máscara que es un vector con valores booleanos. Para poder vectorizar un código se tiene que cumplir que no haya dependencias de datos y que el programa esté expresado de una forma que permita su vectorización.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.