IC2 Resumen
IC2 Resumen
IC2 Resumen
Procesadores segmentados
1. PROCESADORES SEGMENTADOS .........................................................2
1.2. Introducción ........................................................................................................................................ 2
1.3. Procesadores RISC frente a procesadores CISC ............................................................................ 2
1.4. Clasificación de las arquitecturas paralelas .................................................................................... 2
1.5. Evaluación y mejora del rendimiento de un computador .............................................................. 6
1.6. Características de los procesadores segmentados ....................................................................... 9
1.7. Arquitectura segmentada genérica (ASG) ..................................................................................... 10
1.7.1. Repertorio de instrucciones de la ASG ...................................................................................... 10
1.7.1.1. Aritméticas y lógicas ........................................................................................................... 11
1.7.1.2. Transferencia de datos ....................................................................................................... 11
1.7.1.3. Bifurcaciones y saltos incondicionales. Saltos condicionales. ........................................... 12
1.7.2. Implementación de la segmentación de instrucciones en la ASG ............................................. 12
1.8. Riesgos en la segmentación ........................................................................................................... 14
1.8.1. Riesgos estructurales ................................................................................................................. 15
1.8.2. Riesgos por dependencias de datos .......................................................................................... 16
1.8.2.1. La reorganización de código............................................................................................... 16
1.8.2.2. El interbloqueo entre etapas ............................................................................................... 18
1.8.2.3. El adelantamiento (caminos de bypass oforwarding) ......................................................... 18
1.8.3. Riesgos de control ...................................................................................................................... 19
1.9. Planificación dinámica: Algoritmo de Tomasulo .......................................................................... 22
Página 1
Procesadores segmentados
1. PROCESADORES SEGMENTADOS
1.2. Introducción
Un procesador segmentado es capaz de procesar varias instrucciones simultáneamente, aunque cada una de ellas
puede encontrarse en una etapa distinta de su procesamiento.
Década de los años 70, debido al alto coste por byte los computadores no disponían, en general, de grandes
cantidades de memoria, se desarrollaron computadores con instrucciones complejas que permitieran realizar
operaciones con código reducido CISC.
(Complex Instruction Set Computer - Computadores con Conjunto de Instrucciones Complejo).
Buscando aumentar la velocidad del procesamiento, se descubrió la ejecución de programas compilados con
instrucciones simples (de complejidades similares a las microinstrucciones de los procesadores CISC) resultaban
ser más eficientes.
Debido a que un procesador RISC tiene un conjunto de instrucciones simplificado no es necesario disponer de un
hardware de control extremadamente complejo. Propone un conjunto de instrucciones sencillas con formatos fijos
permitiendo ejecución segmentada de las instrucciones (pipeline).
Reduce el tamaño de la CPU, dispone de más espacio para más recursos, por ejemplo, mayor
cantidad de registros o de memoria caché.
Para minimizar los riesgos, la arquitectura RISC plantea en su filosofía de diseño una relación muy estrecha entre
los compiladores y la propia arquitectura.
Página 2
Procesadores segmentados
SISD
SI -- Single Instruction
Clasificación de SIMD SD -- Single Data
los tipos de
MIMD MI -- Multiple Instruction
computadores
MD -- Multiple Data
MISD
Página 3
Procesadores segmentados
EJEMPLO
MIMD
En paralelo instrucciones.
- Nivel de instrucciones u operaciones Ganularidad fina. (Cantidad de trabajo asociado a
(ILP, Instruction Level Parallelism) cada tipo de tarea candidata a la paralelización)
En paralelo distintas iteraciones de un bucle o
Paralelismo - Nivel de bucle. secuencias de instrucciones de programa.
funcional Ganularidad fina-media.
Los distintos procedimientos se ejecutan
- Nivel de funciones. simultáneamente. Ganularidad media.
Programas ejecutados en paralelo. Ganularidad
- Nivel de programas gruesa.
Página 4
Procesadores segmentados
ALTERNATIVAS A PARA AUMENTAR LAS PRESTACIONES DE LOS PROCESADORES
Página 5
Procesadores segmentados
Ejemplos
Entradas Accesos de memoria Entradas Programas
Latencia de memoria. Tiempo de
MEMORIA COMPUTADOR
Rendimiento Ancho de banda. Rendimiento respuesta.
Escalabilidad. Productividad.
Entradas Instrucciones
CPIi
PROCESADOR
Rendimiento CPI (medio)
Frecuencia de reloj
MODELOS
Página 6
Procesadores segmentados
Ejemplos de valores característicos de CPE , IPE y CPI según las microarguitecturas
segmentadas, superescalares y VLIW.
Sp (speedup)
Página 7
Procesadores segmentados
LEY DE AMDAHL
Ejemplo
Si una máquina pasa un 25% de su tiempo procesando instrucciones de coma flotante y se mejora la máquina
haciendo que esas instrucciones se ejecuten en la mitad de tiempo, esto es p = 2, entonces la ganancia que se
puede obtener es
Por mucho que se mejore el recurso, la ganancia será siempre limitada por 1/f
Ejemplo
Se desea mejorar el rendimiento de un computador introduciendo un coprocesador matemático que realice las
operaciones aritméticas en la mitad de tiempo. ¿Cuál sería la ganancia en velocidad del sistema para la
ejecución de un programa si el 60% del mismo se dedicase a operaciones aritméticas? Si el programa tarda 12
segundos en ejecutarse sin la mejora, ¿Cuánto tardará con la mejora?
Ganancia:
p=2
f= fracción de tiempo sin mejora. Mejora el 60% del tiempo 1-0.6= 0.4 sin mejora
12
8,45
1,42
Página 8
Procesadores segmentados
Procesador no segmentado
Procesador segmentado
Para que el tiempo de latencia del procesador segmentado sea el mínimo posible, es necesario que el procesador
esté equilibrado, es decir, que todas las subtareas en que se haya dividido la tarea total tarden en procesarse el
mismo tiempo.
La relación de precedencia de un conjunto de subtareas T1, …. , T17 que componen cierta tarea T, específica
para cada subtarea Tj que no puede comenzarse hasta que hayan terminado ciertas subtareas Ti.
Las relaciones de precedencia para todas las subtareas de T forman su grafo de precedencia. En el ejemplo de la
Figura se ha supuesto que las tareas que se procesan en el cauce tienen un grafo de precedencia lineal. Esto
significa que una subtarea Tj no puede comenzar hasta que todas las subtareas previas, es decir Ti, i < j , hayan
finalizado. A los procesadores segmentados que solo pueden procesar tareas con grafo de precedencia de este
tipo se les denomina de cauce lineal.
Página 9
Procesadores segmentados
Existen dos características importantes de los repertorios de instrucciones que permiten clasificar las arquitecturas
de propósito general:
Las instrucciones aritmético-lógicas de la ASG utilizan en total tres operandos y ninguno de ellos se
referencia en memoria. A las máquinas en las que los operandos no se referencian en memoria se les denomina
máquinas registro-registro o máquinas de carga/almacenamiento.
Registros
Registros 32 de 32 bits R0 .. R31 R0 = 0
genéricos
de la 32 de simple precisión, 32 bits F0 .. F31
Reg. Coma
ASG
flotante 16 parejas de 64 bits F0, F2, F4, .. F30
Aritméticas y lógicas
Tipos básicos de Transferencia de datos
instrucciones Bifurcaciones y saltos incondicionales
Saltos condicionales
Página 10
Procesadores segmentados
1.7.1.1. Aritméticas y lógicas
Página 11
Procesadores segmentados
1.7.1.3. Bifurcaciones y saltos incondicionales. Saltos condicionales.
Página 12
Procesadores segmentados
Organización lógica de la segmentación de instrucciones de la ASG de cinco etapas.
Página 13
Procesadores segmentados
El tiempo total de ejecución de la instrucción segmentada es ligeramente superior al de su equivalente no
segmentada debido al tiempo que se consume en el control de la segmentación.
Riesgo: a la situación que impide a una instrucción acceder a la ejecución de sus etapas al depender de otra
anterior.
Riesgos estructurales: Surgen de conflictos por los recursos, es decir, por insuficiencia del
hardware.
Riesgos por dependencia de datos: Surgen cuando una instrucción necesita los resultados de
Riesgos
otra anterior.
Riesgos de control: Se originan a partir de las instrucciones de control de flujo (saltos y
bifurcaciones).
Página 14
Procesadores segmentados
La ASG no se presenta este inconveniente porque se dispone de dos memorias caché, una para
instrucciones (I-caché) y otra para datos (D-caché).
Otras
No todas las etapas de la segmentación tienen la misma duración.
situaciones
de riesgos
estructurales Hay instrucciones más complejas que otras
SOLUCIONES
Página 15
Procesadores segmentados
La reorganización de código.
Métodos
evitar
El interbloqueo entre etapas.
riesgos
RAW
El adelantamiento.
Procesado
ores segmenntados
IMPLICA UN CO
OMPILADO
OR MÁS COMPLEJO
O
Página 17
Procesadores segmentados
1.8.2.2. El interbloqueo entre etapas
Introducir elementos hardware en el cauce para detectar la existencia de dependencias
Página 18
Procesadores segmentados
Página 19
Procesadores segmentados
etiqueta
BEQZ R7,etiqueta
BEQZ
R7
Página 20
Procesadores segmentados
Técnica del salto retardado
Otra alternativa sería dejar que las instrucciones que se han captado prosigan su ejecución en el cauce.
En este caso, el compilador debería introducir en esos huecos instrucciones que se tengan que ejecutar antes
de la instrucción destino de salto de forma que su efecto sea independiente de que el salto sea efectivo o no.
ORIGINAL
i1, i2 e i3 no influyen para el salto, por lo tanto se pueden cambiar de posición. Mientras se codifica y
ejecuta el salto (i4) se van ejecutando las i1, i2 e i3
Página 21
Procesadores segmentados
1.9. Planificación dinámica: Algoritmo de Tomasulo
Planificación estática: limitación de las técnicas de segmentación estática es que emiten las instrucciones en
orden.
Planificación dinámica: en la que el hardware reorganiza la ejecución de la instrucción para reducir las
detenciones mientras mantiene el flujo de datos y la consistencia del estado del procesador y de la
memoria.
Mediante la planificación dinámica se comprueban los riesgos estructurales cuando se decodifica la
instrucción. Este hecho conlleva que todavía se mantiene el orden del programa, pero las
instrucciones comienzan a ejecutarse tan pronto como todos sus operandos están disponibles. De
esta manera, el procesador segmentado realizaría ejecución de instrucciones fuera de orden, lo
que implica terminación fuera de orden.
La planificación dinámica tiene sentido cuando hay múltiples unidades funcionales y por eso
hay que diferenciar entre distribuir las instrucciones hacia las unidades funcionales y comenzar su
ejecución.
Emisión (II, lnstruction lssue): La instrucción espera hasta que no haya riesgos de tipo RAW y
cuando estén listos todos los operandos fuente, se leen y se emite la instrucción hacia la unidad
funcional.
Figura 1.38: Diseño modificado de la unidad de coma flotante del IBM 360/91 con el algoritmo de Tomasulo.
Página 22
Procesadores segmentados
Mediante estos dos ficheros de registros adicionales FB y SDB, la FPU admite instrucciones de
almacenamiento-registro y registro-almacenamiento, funcionando como una máquina registro a registro.
Página 23
Procesadores segmentados
El uso de estaciones de reserva y del fichero de registros centralizado FR da lugar a dos propiedades:
Los resultados pueden pasar directamente a la unidad funcional desde las estaciones de reserva donde
estaban almacenados, en vez de acceder a ellos a través de los registros. Para realizar este
adelantamiento se utiliza un bus de datos común (CDB, Common Data Bus).
Cuando la FLOS envía una instrucción a una unidad funcional, la asigna una estación de
reserva y comprueba si están disponibles los operandos necesarios. Si un operando se
encuentra disponible en el FR, el contenido de ese registro del FR se copia a la estación
de reserva; en caso contrario, se copia una etiqueta para indicar que esa instrucción está
a la espera de un operando pendiente de ser generado. La etiqueta indica de dónde
procederá el operando pendiente, pudiendo ser de una instrucción que está actualmente
en una de las cinco estaciones de reserva o de uno de los seis registros de FLB.
Cada estación de reserva contiene dos campos por operando, donde uno corresponde a la etiqueta y otro al valor
del operando. Los cuatro FR y los tres registros del SDB también llevan un campo etiqueta asociado. En las
estaciones de reserva si un campo de operando contiene datos reales, entonces su campo de etiqueta se
establece a cero. En caso contrario, su campo de etiqueta identifica el origen del que procede el operando
pendiente.
Al mismo tiempo, se establece a 1 el bit de ocupado asociado con el registro destino del resultado en el FR, lo que
indica que existe una actualización pendiente de ese registro, y el valor de la etiqueta que identifica la estación de
reserva a la que se distribuye la instrucción se escribe en el campo de etiqueta del FR correspondiente.
Para reducir el número de ciclos máquina se permite que la FLOS distribuya hasta dos instrucciones en
cada ciclo según el orden del programa.
Una instrucción puede comenzar su ejecución en el mismo ciclo en que se distribuye a una estación
de reserva.
La operación suma tiene una latencia de dos ciclos y la de multiplicación de tres ciclos.
Se permite que una instrucción reenvíe su resultado a instrucciones dependientes durante su último
ciclo de ejecución. De esta forma, una instrucción a la espera de un resultado puede comenzar su
ejecución en el siguiente ciclo si detecta una coincidencia.
Los valores de etiqueta 01 , 02 , 03 se utilizan para identificar las tres estaciones de reserva de la
unidad funcional de suma, mientras que 04 y 05 se utilizan para identificar las dos estaciones de reserva
de la unidad funcional de multiplicación/división. Estos valores de etiqueta son los ID de las estaciones
de reserva.
Inicialmente, el valor de los registros es F0=6.0, F2=3.5, F4=10.0 y F6=7.8.
Página 24
Procesadores segmentados
Página 25
Procesadores segmentados
Página 26
Procesadores segmentados
Ciclo 1:
1. Se distribuyen i1 e i2 a RS01 (suma) y RS04 (mul/div).
2. Los registros destino son F4 y F2. Los bits de ocupado FR se activan.
3. Como i1 a RS01 (1º libre de RS suma) etiqueta de FR =01 a F4. (Indica de qué RS se obtendrá)
4. Como i2 a RS02 (1º libre de RS mul/div) etiqueta de FR =04 a F2. (Indica de qué RS se obtendrá)
5. i1: ADDD F4, F0, F6 Como están disponibles F0 y F6 sus etiquetas de los operandos de RS01 se
ponen a 0.
6. Comienza la ejecución de i1.
7. I2: MULTD F2, F0, F4 i2 necesita F4 que viene de i1. Por lo tanto la etiqueta de RS04 = 01 (De la
RS01 donde está i1)
Ciclo 2:
1. i3: ADDD F4, F4, F6
2. i4: MULTD F6, F4, F2
3. Se distribuyen i3 e i4 a RS02 (suma) y RS05 (mul/div).
4. Para i3 se necesita el resultado de i1 (F4). En RS02 se pone etiqueta a 01 (Indica que depende de RS01).
5. Para i4 se necesita el resultado de i2 (F2) e i3 (F4). En RS05 pone etiquetas 02 y 04 (Indica que depende
de RS02 y RS04).
6. Como el destino de i3 es F4, se actualiza la etiqueta de FR de 01 a 02. Indica que RS02 deberá actualizar
el valorde F4. Bit de ocupado sigue activo.
7. Cuando i4 se distribuye a RS05, el bit de ocupado de FR se activa y su etiqueta (FR) se pone a 05 (Indica
que es RS05 el que debe actualizar le valor de F6.
8. Termina i1, emite su ID (RS01) y su resultado a CDB. Todos los campos con etiqueta = 01 se actualizan al
valor de F4. Actualizando RS02 (i3) con valor de operando a 13,8 y etiqueta a 00. Actualizando RS04 (i2)
con valor de operando a 13,8 y etiqueta a 00.
Ciclo 3:
1. Comienza a ejecutarse i3 e i2 en unidad de suma y unidad de mul/div.
2. Se libera RS01.
Ciclo 4:
1. Finaliza i3 y emite resultado a CDB y la etiqueta 02.
2. Como RS05 tiene etiqueta 02 se pone el resultado de la suma (21,6) y el valor de su etiqueta (RS05) se pone a
00.
3. Se libera RS02.
Ciclo 5:
1. Finaliza i2 y emite resultado a CDB y la etiqueta 04.
2. Como RS05 tiene etiqueta 04 se pone el resultado de la multiplicación (82,8) y el valor de su etiqueta (RS05) se
pone a 00.
3. Se libera RS04.
Ciclo 6:
1. Comienza ejecución de i4 y acaba en el ciclo 8.
Página 27
Página 1
Planificación estática → VLIW la realiza vía software → la complejidad hardware se reduce y se desplaza hacia el
software.
.
• La incapacidad para desarrollar compiladores que aprovechen al máximo las
VLIW han
características del enfoque VLIW.
fracasado
• Los problemas de compatibilidad entre generaciones de procesadores VLIW.
Los repertorios de instrucciones de las arquitecturas VLIW siguen una filosofía RISC con la excepción de que el
tamaño de instrucción es mucho mayor ya que contienen múltiples operaciones o mini-instrucciones.
Una instrucción VLIW → concatenación de varias instrucciones RISC que se pueden ejecutar en paralelo.
Las operaciones recogidas dentro de una instrucción VLIW no presentan dependencias de datos, de memoria
y/o de control entre ellas.
Página 2
• Por lo general, el número y tipo de operaciones que contiene una instrucción VLIW se corresponde con el
número y tipo de unidades funcionales existentes en el procesador.
• Debido a la ausencia de hardware para la planificación, los procesadores VLIW no detienen las unidades
funcionales en espera de resultados.
• No existen interbloqueos por dependencias de datos ni hardware para detectarlas ya que el compilador se
encarga de generar el código objeto para evitar estas situaciones. Para ello recurre a la inserción de
operaciones NOP.
Predecir qué accesos a memoria producirán fallos de caché es muy complicado. Esto condiciona a que las
memorias caché sean bloqueantes, es decir, que tengan la capacidad de poder detener todas las unidades
funcionales.
• Un código intermedio
Estas tareas pasan
por producir tres • Un grafo del flujo de control
elementos
• Un grafo del flujo de datos
• Las únicas dependencias de datos que permanecen en él son las verdaderas, las RAW.
• Las WAW y las WAR se han eliminado
Para poder generar un grafo de flujo de control es necesario conocer los bloques básicos de que consta el código
intermedio.
Un bloque básico → se compone de un grupo de instrucciones que forman una línea de ejecución secuencial por
lo que en su interior no existen instrucciones de salto con la salvedad de la última: no hay puntos intermedios de
entrada y salida.
Página 3
Una vez que se conocen los bloques básicos que hay en el programa, las instrucciones de cada bloque se
combinan para formar instrucciones VLIW. Para ello se recurre al grafo de flujo de datos que tiene asociado cada
bloque.
Grafo de flujo de datos → es un grafo dirigido en el que los nodos son las instrucciones de un bloque básico, y
los arcos se inician en una instrucción de escritura en un registro (instrucción productora) y tienen como destino
una instrucción que lee el valor de ese registro (instrucción consumidora).
De esta forma, el grafo de flujo de datos muestra las secuencias de instrucciones que no presentan dependencias
entre ellas y, por lo tanto, son susceptibles de combinar para formar instrucciones VLIW. A la combinación de
instrucciones de un único bloque básico para producir instrucciones VLIW se le denomina planificación local.
Planificación global → combinar instrucciones de diferentes bloques básicos con el fin de producir una
planificación con mayor grado de paralelismo.
Los inicios de los bloques quedan
determinados por las instrucciones
etiquetadas y por las instrucciones
situadas a continuación de un salto
condicional o incondicional.
Página 4
TresProcesadores
líneas VLIW y Procesadores vectoriales
paralelas de
ejecución
Grafo de flujo
de datos
Ventajas
incremento/decremento de los índices que se utilicen en el
bucle. ⇒
• Se proporciona al compilador un mayor número de
oportunidades para planificar las instrucciones ya que al
desenrollar el bucle queda mucho más cálculo al descubierto Generar código VLIW
al incrementarse el tamaño de los fragmentos de código lineal. más compacto
El bloque básico se compone por todas las instrucciones que
hay desde la instrucción inicial hasta la siguiente instrucción
de salto que se detecte.
Ejemplo
3 Unidades funcionales:
• Operaciones enteras (un ciclo de latencia)
• Operaciones en coma flotante (tres ciclos de latencia)
• Operaciones de carga/almacenamiento (dos ciclos de
latencia).
• Las operaciones de salto se ejecutan en la unidad entera
con un hueco de retardo de un ciclo por lo que permiten la
planificación de una instrucción a continuación.
Decremento
adelantado
4 bytes Página 6
Si la instrucción VLIW y cada operación escalar necesitan un tamaño de 12 y 4 bytes, respectivamente, el espacio
de almacenamiento desaprovechado es, aproximadamente, del 50%.
• Bucle original sin aplicar NADA 1000 veces → 1000 iteraciones*5 instrucciones = 5000 ciclos
* En el mejor de los casos, supuesta una segmentación ideal y sin riesgos.
• El cuerpo del bucle desenrollado cuatro veces → 250 iteraciones*14 instrucciones= 3500 ciclos.
3500 − 2250
= 55,55% 𝑚𝑚á𝑠𝑠 𝑟𝑟á𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝
2250
Comparación con la versión VLIW que se obtendría del bucle original sin recurrir a ninguna técnica de
planificación local.
2 ciclos
3 ciclos 1 ciclo
• 6 * 12 (bytes/instrucción) = 72 bytes, de los cuales solo 20 bytes están ocupados con operaciones.
• Velocidad de ejecución → si el vector constase de 1000 elementos se tardaría en procesarlo 6000 ciclos
de reloj frente a los 2250 ciclos obtenido tras aplicar desenrollamiento.
6000 − 2250
= 166,66% 𝑚𝑚á𝑠𝑠 𝑟𝑟á𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝
2250
Página 7
La técnica consiste en producir un nuevo cuerpo del bucle compuesto por la intercalación de instrucciones
correspondientes a diferentes iteraciones del bucle original. Al reorganizar un bucle mediante segmentación
software, siempre es necesario añadir unas instrucciones de arranque (el prólogo) antes del cuerpo del bucle y
otras de terminación tras su finalización (el epílogo).
Planificación policíclica → mediante esta técnica se ejecutan al mismo tiempo instrucciones provenientes de
múltiples iteraciones.
Ejemplo
Latencias
Página 8
Si las instrucciones VLIW son de 16 bytes, el tamaño total del código es de (11 inst.*16 byt/inst).= 176 bytes.
• 5 corresponderían al prólogo.
La aproximación VLIW
• 5 al epílogo.
emplearía 1010 ciclos.
• 1000 a las iteraciones del bucle.
Aunque el concepto en que se basa es sencillo, la segmentación software puede llegar a ser extremadamente
complicada de aplicar hay instrucciones condicionales en el cuerpo del bucle que impiden la aparición de un
patrón de comportamiento regular.
R1 puntero a A[i]
R2 puntero a X[i]
R3 puntero a Y[i]
Página 9
F4
Algunos de los posibles desplazamientos de operaciones que se pueden realizar dentro de una traza
Situaciones en las que un bloque que se encuentra en un punto de ejecución común puede desplazarse con el
objetivo de producir código más compacto.
Página 10
Aplicando el desplazamiento de
operaciones del bloque B1
decremento de 2 ciclos
Ruta de ejecución más probable: 1, 2, 3, 4, 5, 6, 7, 8, 15, 16 → 10 ciclos → respecto a la no
planificación
1, 2, 3, 4, 5, 6, 8, 9, 10,
Ruta menos probable: → 15 ciclos → Incremento de 3 ciclos
11, 12, 13, 14, 15, 16
Aunque la reducción no es muy elevada, el tiempo medio de ejecución del código planificado será mejor
que el código original siempre que se cumpla la siguiente expresión:
Uno de los problemas que presenta la planificación de trazas: a mayor cantidad de operaciones
desplazadas, mayor es la penalización en que se incurre cuando se realiza una predicción errónea.
Página 11
Una operación con predicado una instrucción en la que su resultado se almacena o se descarta dependiendo del
valor de un operando que tiene asociado.
Código fuente de un bucle Código intermedio Código intermedio aplicando operaciones con
genérico predicado
Página 12
Centinelas = Un fragmento de código que indica que la operación ejecutada de forma especulativa con la que
está relacionado ha dejado de serlo.
El compilador marca las operaciones especulativas con una etiqueta y en el lugar del programa
en el que estaba el código especulado que ha sido desplazado sitúa un centinela vinculado a esa
etiqueta.
Esta estrategia se implementa mediante una especie de buffer de terminación en el que las
instrucciones se retiran cuando les corresponde salvo las marcadas como especulativas, que se
retirarán cuando lo señale la ejecución del centinela que tienen asociado.
Página 13
A :=B+C
Se puede emitir en
paralelo con ella la
siguiente instrucción que
aparezca en el código
NO se puede emitir en
Código VLIW paralelo con ella la siguiente Código EPIC
instrucción que aparezca en
el código
De las 20 16 NOPs
operaciones 4 Útiles
Página 14
Sumar dos vectores A y B de 64 elementos, la suma del elemento A[i] al B[i] no implica ningún tipo de dependencia
con la operación previa, es decir, la suma del elemento A[i-1] al B[i-1], o con la suma del A[i-2] al B[i-2], etc.
→ 1. Cálculo vectorial.
• Las unidades funcionales vectoriales están segmentadas y pueden iniciar una operación en cada ciclo de
reloj.
• Son necesarios mecanismos hardware que detecten los riesgos estructurales y los riesgos de datos que
pueden aparecer entre las instrucciones vectoriales y escalares
• Las unidades funcionales vectoriales de algunos procesadores es que pueden estar internamente
organizadas en varios lanes o carriles con el objeto de aumentar el número de operaciones que pueden
procesar en paralelo por ciclo de reloj.
o Básicamente, una unidad funcional con n carriles implica que, internamente, el hardware necesario
para realizar la operación se ha replicado n veces de forma que el número de ciclos que se emplea
en procesar un vector se reduce por un factor de n.
Página 15
2 etapas
Página 16
Instrucción
vectorial
CUESTIONES
¿Cómo proceder cuando la longitud del vector es
diferente al número de elementos de un registro • El registro de longitud vectorial VLR (Vector
vectorial? Length Register) → Controla la longitud de
¿Qué sucede cuando los elementos del vector se cualquier operación vectorial.
almacenan de forma uniforme pero no consecutiva en
memoria? • El registro de máscara VM (Vector Mask).
¿Cómo se vectoriza el cuerpo de un bucle que contiene
instrucciones ejecutadas condicionalmente?
Página 17
SOLUCIÓN:
Instrucciones especiales →
Vectorizar bucles en cuyo cuerpo hay Una máscara de MVL bits de longitud almacenada en el
→
instrucciones ejecutadas condicionalmente. registro especial VM. El valor del bit que ocupa la
Dependiendo de la condición, ciertos elementos posición i en la máscara determina si se realizarán (bit a
de un vector no tengan que ser manipulados. 1) o no (bit a 0). Instrucciones especiales
Ejemplo
Tarranque → El tiempo de arranque es similar al número de segmentos de que constan ya que es el tiempo que
transcurre desde que se solicita el primer bloque de datos del vector hasta que se dispone del mismo para
ser tratado por la unidad funcional.
Número de etapas en las que está segmentada la unidad funcional.
Unidad vectorial de 6 etapas (1 ciclo/etapa) → 6 ciclos.
Telemento → El tiempo que se tarda en completar cada uno de los restantes n elementos (Unidad segmentada→1
ciclo).
Página 18
Unidad
funcional de
10 etapas
Encadenamiento (chaining) → El encadenamiento permite que una unidad funcional pueda comenzar a operar
tan pronto como los resultados de la unidad funcional de que depende estén disponibles.
Página 19
La lectura de los n elementos de que consta un vector supondría un coste de n * Ta ciclos, lo que es totalmente
inadmisible.
Para poder ocultar toda esta latencia es fundamental dimensionar correctamente el número de bancos de
memoria de forma que solo se vea el tiempo de acceso correspondiente al primer elemento del vector y que los
tiempos de acceso de los demás elementos queden ocultos. Esto se consigue distribuyendo los n elementos de
un vector entre m bancos de memoria para que se solapen.
Página 20
• Síncrono
Solapamientos
• Asíncrono
Síncrono
Asíncrono
Solicitar simultáneamente un dato a los m bancos cada
Solicitar los elementos de que consta el vector a cada
Ta ciclos. uno de los m bancos de forma periódica con periodo Ta
con un desfase entre bancos consecutivos de Telemento
Realizada la primera petición y transcurridos Ta ciclos
ciclos.
estarán disponibles los m primeros elementos del
vector para ser transferidos al registro vectorial, lo que
De esta forma; comenzando en el ciclo 0 y cada Ta ciclos
consume m*Telemento ciclos.
el banco 0 solicita un dato, en el ciclo 1 y cada Ta ciclos
el banco 1 solicita un nuevo dato, y así sucesivamente
Ahora, cada Ta ciclos se realizan dos acciones:
hasta el banco m-1.
1. Se efectúa una nueva petición simultánea a
todos los bancos para extraer los m elementos
En el momento en que un banco tiene el dato disponible
siguientes del vector.
realiza dos acciones:
2. Se comienza a transferir ciclo a ciclo los m
1. Efectúa la nueva solicitud de dato.
elementos ya disponibles y que fueron
2. Transfiere el dato ya disponible al registro vectorial.
solicitados en la petición anterior.
La dirección de memoria
8 bytes →
23 → 3
8 bancos →
23 → 3 bits
64 elementos (de 8 bytes cada uno) ubicado a partir de la posición de memoria 80 en un sistema de memoria
organizado en 8 bancos con acceso asíncrono y con Ta de 6 ciclos
Página 21
Nº elementos
del vector
Posición en el
vector del 1º
elemento
Nº total de
secciones de
MVL elementos
Ejemplo
Bucle DAXPY para vectores de n elementos.
• Una unidad de suma (6 ciclos de El fragmento de código vectorial que se genera para realizar las
latencia). operaciones
• Una unidad de multiplicación (7 ciclos Y(i): =a*X(i)+Y(i)
de latencia).
• Una unidad de carga/almacenamiento
(12 ciclos de latencia).
• MVL es 64.
• La frecuencia de reloj es 500 MHz.
• VLR = 64
Página 22
Página 23
Para n=1000 ⇒
FLOPs/ciclo
Página 24
Página 25
Página 26
Página 27
Página 28
Procesamiento paralelo
Página 4.1
Procesamiento paralelo
4. PROCESAMIENTO PARALELO
4.2. Introducción
Hoy en día los sistemas están basados en varios procesadores.
Descomposición iterativa
Paralelismo algorítmico
Descomposición geométrica
Descomposición especulativa
Paradigmas
Descomposición funcional
Maestro/Esclavo
SPMD (Single Program Multiple Data)
Descomposición recursiva o divide y vencerás
Página 4.2
Procesamiento paralelo
4.3.1.2. Paradigma SPMD (Single Program Multiple Data)
Paradigma SPMD = paralelismo geométrico, estructural o
paralelismo a nivel de datos
La escalabilidad no suele ser lineal y, además, llega a saturarse Nº máximo de procesadores entre 16 y 32.
Algunas mejoras dotar a cada procesador de una memoria local, en la que se almacena el código que se
está ejecutando en el procesador y aquellos datos que no tengan que ser compartidos.
Memoria compartida con acceso no uniforme a Memoria compartida con acceso no uniforme a
memoria memoria solo con memoria local
Página 4.3
Procesamiento paralelo
4.3.2.2. Paso de mensajes
Intercambio de información, en forma de mensajes, entre los diferentes procesadores que componen el sistema.
Denominada red directa, es una red cuya topología queda definida de manera definitiva y estable durante la
construcción de la máquina paralela.
Unidimensionales
Bidimensionales
4.4.1.1.1. Unidimensionales Tipos
Tridimensionales
Puede realizarse más Hipercubos
de una transferencia
simultáneamente
siempre que sea a
través de enlaces
diferentes
Lineal Problemas de
comunicación cuando
el número de
Anillo procesadores es
elevado
Bidimensional ideal
4.4.1.1.2. Bidimensionales
Página 4.4
Procesamiento paralelo
Aliviar la desventaja indicada Red en árbol grueso (fat tree)
4.4.1.1.3. Tridimensionales
Mesh tridimensional
4.4.1.1.4. Hipercubo
Dos procesadores se conectan entre sí, si y solo si sus etiquetas, en binario, tienen
exactamente un bit distinto en una posición determinada.
Un procesador de un hipercubo de dimensión d se conecta directamente a d procesadores.
Todo hipercubo de dimensión d puede dividirse en dos de dimensión d - 1. Para ello se
selecciona la posición de un bit y se agrupan todos los procesadores que tengan el mismo
Propiedades
valor (0/1) en esa posición. k = nº procesadores.
Distancia de Hamming el número total de posiciones de bits para los que las etiquetas
de dos procesadores son diferentes. El camino más corto entre dos procesadores.
o La distancia de Hamming entre dos procesadores de etiquetas a y b es el
número de bits a 1 que hay tras el resultado de la operación ⊕
Nº procesadores= 2d
Se selecciona la posición de un bit y se agrupan todos los procesadores que tengan el mismo valor (0/1) en esa
posición.
Página 4.5
Procesamiento paralelo
Para cualquier grupo de k bits fijo, los procesadores que difieren en los demás d - k bits forman un subcubo de
dimensión d - k formado por 2d-k procesadores. Dado que con k bits se pueden obtener 2k combinaciones
diferentes, se tendrán 2k subcubos distintos.
k=2 y d=4 24-2=4 subcubos
Distancia de Hamming La distancia de Hamming entre dos procesadores de etiquetas a y b es el número de bits
a 1 que hay tras el resultado de la operación ⊕ El camino más corto entre dos procesadores.
Origen nodo a = 0101
Destino nodo b = 1011
El mensaje se transmite por las dimensiones para las que la posición de ⊕ 1, comenzando por el
bit menos significativo.
⊕ 0101 ⊕ 1011 1110
velocidad de canal = velocidad máxima con que se puede emitir por cada cable físico
ancho de banda = velocidad máxima con la que los datos pueden enviarse entre dos
enlaces de comunicación= (velocidad del canal)*(ancho de canal)
Rapidez ancho de bisección = el mínimo número de enlaces de comunicación que deben
eliminarse para que la red quede dividida en dos partes iguales. Con ello, se
define el ancho de banda de bisección como el menor volumen de
comunicaciones permitidas entre dos mitades cualesquiera de la red con
igual número de procesadores.
ancho de banda de bisección = (ancho de bisección)*(ancho de banda del
canal)
Contar el número de enlaces de comunicación o la cantidad de cableado necesario
Coste
en la red.
Página 4.6
Procesamiento paralelo
COMPLETAMENTE
CONECTADA ESTRELLA ARBOL BINARIO ARRAY ANILLO
LINEAL
MESH HIPERCUBO
MESH BIDIMENSIONAL
BIDIMENSIONAL CERRADO
p = nº de procesadores
d = dimensión de la red.
k = nº de procesadores en cada dimensión. (RADIO)
d-cubo k-arias
Hipercubo dimensión d = d-cubo 2-ario.
Anillo = 1-cubo p-ario
Nº procesadores = kd
Resumen
Red mesh
Tridimensional Hipercubo
Página 4.7
Procesamiento paralelo
4.4.1.3. Redes dinámicas
Se adaptan a las necesidades de comunicación demandadas.
Basadas en bus
Tipos Crossbar (o matriciales)
Multietapa
4.4.1.3.1. Basadas en bus
Un único procesador puede transmitir información por el bus.
La colisión de peticiones de acceso al bus se soluciona
usando una lógica de arbitraje o módulo de arbitraje.
Una propiedad importante de las redes multietapa es que son redes bloqueantes. Esto significa que ciertas
permutaciones, o conexiones a través de la red, pueden a su vez bloquear otras conexiones.
Página 4.8
Procesamiento paralelo
Ejemplos de redes multietapa
Red Omega
La permutación por barajamiento perfecto (perfect suffle), , cuyo dominio es el conjunto de enteros [0, n - 1], se
define como
011 110
110 101
El número de conmutadores necesarios para construir la red es ∙ , p = nodos entrada = nodos salida
El coste de la red de orden ∙ ∙ . Nº de etapas
Para una red omega con 4 procesadores el número de conmutadores necesarios será 4 4
Para 8 procesadores será 8 12
Para 16 procesadores será 16 32
Este ratio de crecimiento, y por tanto su coste, es menor que el de una red crossbar, que como vimos
anteriormente crece con orden .
Página 4.9
Procesamiento paralelo
Ejemplo procesador 110 envía paquete a 100
Nº etapas= 8 3 etapas
Para 8 procesadores será 8 12 conmutadores
PROCESADOR
PROCESADOR 1 0 DESTINO
ORIGEN
El conmutador B observa
que el bit que le
corresponde es un 0 (100),
por lo que encamina el
paquete por su salida
superior.
El conmutador de la primera etapa,
marcado con una A en la figura, ve
que el bit que le corresponde de la 0
dirección destino es un 1 (100), Último conmutador también
por lo que encamina el paquete observa su bit
por la salida inferior hacia el correspondiente es 0 (100)
conmutador marcado con una B. y encamina el paquete por
0 su salida superior, llegando
éste a su destino correcto.
Nº lineas= /2 4 lineas 1
Red Baseline
2 2
y así recursivamente hasta llegar en la última etapa
a sub-bloques de tamaño 2 x 2.
ENCAMINAMIENTO:
Página 4.10
Procesamiento paralelo
Red Butterfly
Las salidas de un conmutador j en la etapa i (identificado como [i, j]) se conectarán a los conmutadores [i + 1, j] e [i
i
+ 1, j ⊕ 2 ] (es decir, difieren en el i-ésimo bit).
4 Ri = 0 Camino directo
La ruta entre A y B
5 Ri = 1 Camino cruzado
6
Los conmutadores de la red se pueden representar
y
no Diagrama de conmutadores
mbr
ar tal y como muestra la figura.
7
Página 4.11
Procesamiento paralelo
Varios procesadores pueden guardar en sus respectivas cachés locales una copia
Problema de
de un mismo bloque de memoria.
coherencia de
caché Este bloque es modificado por cada procesador, por lo que es necesario que los
cambios realizados se comuniquen al resto de procesadores.
Soluciones
Un posible método para mantener la coherencia monitorización del número de copias existentes y el estado de
cada copia.
Página 4.12
Procesamiento paralelo
inválida se propaga una acción C_lectura que actualiza el resto de copias, además de la memoria principal, y las
devuelve al estado compartido.
Si un procesador realiza una escritura sobre una variable inválida se propaga una acción C_escritura para invalidar
el resto de copias y posteriormente pasar dicha variable al estado sucio.
Si un procesador realiza una escritura sobre un bloque compartido se generará una acción C_escritura para
invalidar el resto de copias en las cachés, pasando la variable modificada al estado sucio. Finalmente, cuando un
procesador vacía su caché todos los bloques pasan al estado inválido.
Página 4.13
Procesamiento paralelo
Uso adecuado del ancho de banda cuidadoso reparto de los datos sobre los procesadores con el fin de
disminuir la granularidad de las comunicaciones
Página 4.14
Procesamiento paralelo
Los motivos que han hecho posible este hecho cabe destacar el gran progreso en la disponibilidad de
componentes de un alto rendimiento para PCs/estaciones de trabajo y redes de interconexión.
Página 4.15
Procesamiento paralelo
A medida que se divide el problema en partes paralelas se llegará a un punto en el que el tiempo de comunicación
domine sobre el tiempo total de ejecución. Se puede utilizar la razón:
ó
→ ó
ó
ú
ú
Todos aquellos pasos computacionales que se realizan en paralelo contabilizan solo como uno
La aceleración máxima absoluta de M se debería alcanzar cuando: la computación se puede dividir en procesos de
igual duración, cada proceso se localiza en un procesador y no hay sobrecarga (overhead), es decir:
Página 4.16
Procesamiento paralelo
4.6.1.3. Ley de Amdahl
f la fracción del programa que no se puede dividir en tareas paralelas, 0 ≤ f ≤ 1 y se considera que no hay
sobrecarga cuando el programa se divide en tareas paralelas
La razón para aumentar el número de procesadores debe ser para resolver problemas de tamaño mayor, y no para
resolver más rápidamente un problema de tamaño fijo.
El límite de Amdahl como el mayor factor de aceleración posible cuando el número de procesadores
disponibles tiende a infinito.
4.6.1.4. Eficiencia
Página 4.17
Procesamiento paralelo
4.6.1.5. Coste
El coste C (o trabajo) de una computación
ó ú
Un coste óptimo de un algoritmo paralelo es aquel que es proporcional al coste (tiempo de ejecución) que tiene en
un sistema con un único procesador.
4.6.1.6. Escalabilidad
Escalabilidad hardware Un diseño hardware que permite ampliar su tamaño para obtener una mejora en el
rendimiento.
Escalabilidad algorítmica Un algoritmo paralelo puede soportar un incremento grande de datos con un
incremento bajo y acotado de pasos computacionales.
Escalabilidad Si es que un sistema es escalable si el rendimiento del mismo se incrementa linealmente con
relación al número de procesadores usados para una cierta aplicación.
Los estudios de escalabilidad determinan el grado de afinidad entre una arquitectura determinada y una aplicación.
Página 4.18
Procesamiento paralelo
Balance de carga dinámico centralizado.
El proceso maestro es el que tiene la colección completa de tareas a realizar.
Las tareas son enviadas a los procesos esclavos.
Cuando un proceso esclavo finaliza una tarea, solicita una nueva al maestro.
Esta técnica también se denomina programación por demanda o bolsa de trabajo.
Tiempo de inicialización (ts): Este tiempo incluye el tiempo en preparar el mensaje, el tiempo de
ejecución del algoritmo de enrutamiento y el tiempo de conexión entre el emisor y el enrutador.
Tiempo de salto (th): Es el tiempo que tarda la cabecera de un mensaje en viajar entre dos
Parámetros
nodos
Tiempo de transferencia por palabra (tw): Si el ancho de banda de un canal es r palabras por
segundo, su tiempo de transferencia por palabra es 1/r.
Algoritmos
de Se basa en los sistemas de enrutamiento de paquetes.
enrutamiento Divide cada mensaje en un número fijo de unidades llamados
dígitos de control de flujo (flow control digits o flits).
Corte y continuación ( cut- Antes de enviar el primer flit el emisor establece un camino
through) hasta el receptor mediante el envío de un paquete especial
llamado tracer. Una vez se ha establecido la conexión se
envían los flits uno tras otro, siguiendo todos la misma ruta.
Los nodos intermedios no esperan a recibir todo el mensaje,
sino que reenvían los flits según los van recibiendo.
Se supone un mensaje de m palabras que viaja a través de
una red con l enlaces. Si th es el tiempo de salto, la cabecera
del mensaje tardará un tiempo lth en llegar al receptor.
Página 4.19
Procesamiento paralelo
El acceso a datos remotos provoca la lectura de dichos datos para escribirlos en la caché local. Esto implica un
tiempo para las acciones de coherencia, la red de interconexión y el acceso a memoria.
El tiempo de acceso a una palabra remota se denomina como tw. El coste de compartir un bloque de datos de m
palabras será ts + mtw
Si el acceso es en modo lectura-escritura, el coste se incrementa en los accesos de los procesadores posteriores
al que escribe.
Página 4.20