Paralelismo y Arquitecturas Avanzadas

Anuncio
IS
2015
UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE ELECTROTECNIA Y COMPUTACION
DEPARTAMENTO DE ARQUITECTURA Y SISTEMAS
ARQUITECTURA DE MAQUINAS COMPUTADORAS III
Paralelismo y Arquitecturas
Avanzadas
José L. Díaz Chow
Abril de 2015
José Leónidas Díaz Chow
Díaz - Medrano
IS 2013
Paralelismo y Arquitecturas Avanzadas
Folleto de apoyo para el estudiante
Elaborado por
Ing. José Díaz Chow ©
Edición original: Junio 2000
Última Revisión: Abril 2015
Universidad Nacional de Ingeniería, UNI.
Managua, Nicaragua.
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
INDICE DE CONTENIDO
1
PARALELISMO Y MEJORA DEL RENDIMIENTO.....1
1.1
EVALUACION DEL DESEMPEÑO .......................................................................... 1
1.1.1
1.1.2
1.1.3
1.1.4
1.1.5
1.1.6
1.1.7
1.1.8
1.1.9
1.2
REDUCCIÓN DEL TIEMPO DE EJECUCIÓN ....................................................... 12
1.2.1
1.2.2
1.2.3
1.2.4
1.3
2
DMA .................................................................................................................... 18
Procesadores y Canales de E/S ............................................................................ 18
INTRODUCCIÓN AL PARALELISMO................................................................... 18
1.5.1
1.5.2
1.6
Jerarquía de memoria ........................................................................................... 15
Principio de localidad de referencia. .................................................................... 16
Cálculo de la aceleración del rendimiento en la jerarquía de memoria ............... 16
MEJORAS AL SISTEMA DE ENTRADA-SALIDA ............................................... 17
1.4.1
1.4.2
1.5
Reducción del período de reloj. ........................................................................... 12
Reducción de la cantidad de instrucciones N....................................................... 12
Reducción del CPI................................................................................................ 13
Consecuencias de la ley de Amdahl..................................................................... 13
MEJORAS AL SISTEMA DE MEMORIA ............................................................... 15
1.3.1
1.3.2
1.3.3
1.4
Medida de rendimiento .......................................................................................... 2
Métricas de desempeño .......................................................................................... 2
Consideraciones de efectividad-costo .................................................................... 3
Técnicas de análisis de desempeño ........................................................................ 4
Rendimiento: .......................................................................................................... 4
Factores que determinan el tiempo de ejecución ................................................... 6
Ley de Amdahl....................................................................................................... 6
Cálculo del tiempo de Ejecución............................................................................ 8
Métricas populares de rendimiento ........................................................................ 9
Procesamiento paralelo ........................................................................................ 19
Diferentes mecanismos y técnicas de mejora del desempeño empleadas............ 19
CLASIFICACIÓN DE LAS ARQUITECTURAS PARALELAS............................. 21
SEGMENTACION......................................................... 23
2.1
INTRODUCCION ...................................................................................................... 23
2.2
RENDIMIENTO DEL PROCESADOR SEGMENTADO........................................ 26
2.3
CLASIFICACION DE LOS PROCESADORES ENCAUZADOS........................... 27
2.4
EL PROCESADOR SEGMENTADO DLX .............................................................. 28
2.5
DIFICULTADES DE LA SEGMENTACION........................................................... 30
2.6
DEPENDENCIAS ESTRUCTURALES.................................................................... 31
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
2.6.1 TABLA DE RESERVA DEL DLX.................................................................... 31
2.6.2 RIESGOS ESTRUCTURALES EN EL DLX ..................................................... 32
2.6.3 TABLA DE RESERVA CON DEPENDENCIAS ESTRUCTURALES
RESUELTAS .................................................................................................................... 34
2.6.4 DATAPATH DEL DLX ...................................................................................... 35
2.7
DEPENDENCIAS DE DATOS.................................................................................. 36
2.7.1
2.7.2
2.7.3
2.7.4
2.8
TIPOS DE DEPENDENCIAS DE DATOS ........................................................ 36
TRATANDO LAS DEPENDENCIAS DE DATOS EN EL DLX...................... 37
RESUMEN DE DEPENDENCIAS DE DATOS EN EL DLX ........................... 40
DATAPATH DEL DLX CON DEPENDENCIAS DE DATOS RESUELTAS . 42
DEPENDENCIAS DE CONTROL............................................................................ 43
2.8.1 ADELANTANDO LA DEFINICION DEL SALTO ........................................ 43
2.8.2 DEPENDENCIAS DE DATOS EN BRx TRAS ADELANTAMIENTO A D/L 45
2.8.3 TRATAMIENTO DE LAS LATENCIAS DE CONTROL ............................... 46
2.8.4 DATAPATH DEL DLX CON LAS DEPENDENCIAS DE CONTROL
RESUELTAS .................................................................................................................... 49
2.9
EXCEPCIONES ......................................................................................................... 50
2.9.1
2.9.2
INTRODUCCION ............................................................................................... 50
EXCEPCIONES EN EL DLX ............................................................................. 50
2.10 SEGMENTACION NO LINEAL............................................................................... 52
2.11 PROCESADORES MULTICICLO............................................................................ 53
2.12 PLANIFICACION DE RECURSOS.......................................................................... 54
3
ARQUITECTURAS SIMD ............................................ 56
3.1
INTRODUCCIÓN ...................................................................................................... 56
3.1.1
3.1.2
3.2
Tipos de Arquitecturas SIMD..................................................................................... 58
3.2.1
3.2.2
3.3
Procesadores vectoriales o Vector Processors ..................................................... 58
Procesadores matriciales o Array Processors....................................................... 59
Procesadores vectoriales Encauzados (Vector Processors) ........................................ 59
3.3.1
3.3.2
3.3.3
3.4
Necesidad de procesamiento de Vectores y matrices: ......................................... 56
Características y exigencias del procesamiento de Vectores / Matrices .............. 57
Cauces vectoriales................................................................................................ 59
Maquinas M-M, Memorias entrelazadas y Procesamiento en flujo continuo...... 59
Máquinas R-R y Encadenamiento de vectores.................................................... 60
Procesadores SIMD (Processor Arrays) ..................................................................... 61
3.4.1
3.4.2
3.4.3
Procesadores de arreglos de EPs. ......................................................................... 61
Enmascaramiento, limitando la estructura. .......................................................... 62
Importancia de VLSI en las Arquitecturas SIMD................................................ 62
Arquitectura de Máquinas Computadoras III
3.5
Procesadores Sistólicos............................................................................................... 62
3.5.1
3.5.2
3.6
Procesadores Asociativos..................................................................................... 64
Ejemplares............................................................................................................ 64
Estructuras y algoritmos para Procesadores Matriciales. ........................................... 65
3.8.1
3.8.2
4
Redes sincrónicas vs. redes asíncronas ................................................................ 64
WaveFront Array Processor................................................................................. 64
Procesadores Asociativos ........................................................................................... 64
3.7.1
3.7.2
3.8
Deficiencias de la taxonomía de Flynn. ............................................................... 62
Arreglos sistólicos................................................................................................ 63
Procesadores de Frente de Onda................................................................................. 64
3.6.1
3.6.2
3.7
Paralelismo y Arquitecturas Avanzadas
Estructuras de Interconexión – Comunicación EPs. ............................................ 65
Características de los Algoritmos matriciales. ..................................................... 65
ARQUITECTURAS MIMD. .......................................... 66
4.1. Introducción a los MIMD: Multiprocesadores .............................................................. 66
4.1
Clasificación de los sistemas MIMD. ......................................................................... 67
4.2
Estructuras de Interconexión. ..................................................................................... 67
4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
4.3
Bus común............................................................................................................ 68
Conmutador Barra-Cruz....................................................................................... 69
Memorias Multipuerto ......................................................................................... 69
Redes Interconexión multietapa. .......................................................................... 70
Hipercubo............................................................................................................. 70
Acceso a recursos compartidos................................................................................... 71
4.3.1
4.3.2
Arbitraje del bus................................................................................................... 71
Exclusión mutua................................................................................................... 71
4.4
Comunicación entre Procesadores .............................................................................. 72
4.5
Coherencia de cachés.................................................................................................. 72
4.6
Sistemas Operativos y lenguajes de programación MP.............................................. 73
4.6.1
4.6.2
Sistemas operativos:............................................................................................. 73
Lenguajes: ............................................................................................................ 73
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
1 PARALELISMO Y MEJORA DEL RENDIMIENTO
1.1
EVALUACION DEL DESEMPEÑO
El poder valorar el desempeño de un sistema de cómputo es necesario, en diferentes escenarios,
para poder tomar decisiones. Por ejemplo, podríamos querer determinar si un sistema existente
es apto o cubre las necesidades de poder de cómputo de una aplicación específica. O podríamos
querer determinar si se requiere actualizar o ampliar sus capacidades. A nivel de diseño o de
actualización de un sistema, es importante poder predecir el rendimiento que tendrá el resultado
final y así poder determinar si éste será adecuado para el objetivo previsto. De este análisis se
podrán tomar decisiones acerca de la vialidad del proyecto. Así mismo, es indispensable poder
comparar rendimientos de diferentes opciones al momento de seleccionar el mejor sistema de
cómputo. Asimismo la evaluación del desempeño nos permite analizar el rendimiento de un
sistema y tomar acciones para su perfeccionamiento.
Para poder evaluar el desempeño de un computador y así poder compararlo respecto a otro
necesitamos poder definir y medir su rendimiento. Pero, ¿Qué queremos decir con
rendimiento?, ¿En base a qué parámetros podemos expresar o medir el rendimiento?, ¿Cómo
podemos establecer un mecanismo que me permita comparar dos computadoras? En esta unidad
daremos respuesta a estas preguntas y definiremos un marco conceptual que nos permita en
términos generales evaluar el desempeño de los equipos de cómputo.
Para poder cuantificar el rendimiento, necesitamos determinar los atributos, características o
factores que influyen en el desempeño del equipo de cómputo e identificar cuál de estos son
determinantes en el desempeño. Estos factores, por tanto deben ser medibles, directa o
indirectamente. Es decir, deben representar magnitudes. Se denomina medida al valor de una
magnitud obtenido mediante un instrumento de medición confiable. Se denomina métrica al
método de medición (y comúnmente la escala) de una medida que se considera estándar para
definir el desempeño de un sistema. En muchos casos, pueden existir diferentes medidas de
interés que pueden usarse para determinar el rendimiento en diferentes escenarios. A manera
de ejemplo, veamos algunas medidas de rendimiento de ciertos aviones:
Tabla 1.1. Cuadro comparativos de características de algunos aviones.
Aeroplano
Capacidad
[Pasajeros]
Alcance
[Millas]
Velocidad
[M.p.h.]
Productividad
[Pasajeros X Mph]
Boeing 737 - 100
101
630
598
60,398
Boeing 747
470
4,150
610
286,700
BAC/Sub Concord
132
4,000
1,350
178,200
Douglas DC-8-50
146
8,720
544
79,424
Página 1
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
De esta tabla podemos concluir que el avión con más velocidad es el Concord, el de mayor
alcance es el Douglas DC-8 y que el Boeing 747 es el de mayor capacidad. Así por ejemplo,
para un pasajero adinerado que quiere transportarse de un lugar a otro distanciado 4,000 millas
del primero, el Concord es el más rápido. Pero si queremos movilizar 450 personas de una zona
a otra distante las mismas 4,000 millas, entonces, el más rápido es el Boeing 747.
De manera análoga, el desempeño de un computador puede tener diferentes medidas de elección
para diferentes usuarios. Para un usuario individual que está ejecutando un único programa, la
computadora con mayor rendimiento es aquella que complete la ejecución de su programa en
menor tiempo. Sin embargo, para el administrador de un centro de cómputos, que tiene
múltiples tareas que realizar a la vez, la de mayor rendimiento es la que le realice más tareas en
menor tiempo. Como elemento común, sin embargo, se evidencia que la medida del
rendimiento del computador es el tiempo. La computadora que ejecute los programas en menor
tiempo es la que tiene mejor rendimiento.
1.1.1
Medida de rendimiento
La medida del rendimiento de interés en la computadora es el tiempo. Sin embargo,
podemos identificar diferentes medidas de tiempo. Por ejemplo, el tiempo de ejecución de
programas por parte del CPU, puede descomponerse en tiempos de usuario (en que ejecuta los
programas de los usuarios) y el tiempo de sistema operativo. También podemos identificar otros
tiempos que están ligados con los otros componentes del sistema de cómputo: el tiempo
requerido para realizar intercambio de datos con la memoria o con diferentes dispositivos de
entrada-salida que tienen muy diversas velocidades.
Dadas las diferencias e inexactitudes que considerar todos los tiempos posibles, puede acarrear,
se toma como la medida de rendimiento más adecuada del computador al tiempo de ejecución
t de un programa por parte del CPU.
1.1.2
Métricas de desempeño
Para poder evaluar el desempeño de un sistema de cómputo y poder comparar dos
sistemas en función de su rendimiento, necesitamos establecer métricas que nos permitan
estandarizar las medidas que emplearemos para tales fines. Las métricas establecen un criterio
estandarizado para evaluar el desempeño de un sistema de cómputo de forma general, de
manera que mediante la medida de tal métrica podamos comparar dos sistemas disímiles.
Todas las métricas de desempeño están basadas en el comportamiento del sistema durante el
tiempo, dado que el tiempo es la medida básica de rendimiento. Existen tres clases de métricas
que pueden denominarse externas, pues pueden percibirse por un usuario o entidad externa al
sistema medido:



Latencia o tiempo de respuesta.
Productividad
Disponibilidad
Página 2
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Existe una cuarta métrica de tipo interna o que se percibe desde dentro del sistema. Es la
métrica de utilización. Esta última es de vital importancia para entender el sistema y predecir
su desempeño en condiciones específicas.
La latencia es una medida del tiempo (t) que el sistema tarda en producir resultados. Esta
métrica puede representar diferentes conceptos en dependencia del contexto, por ejemplo, en la
evaluación del desempeño del CPU, tenemos los ciclos de reloj requeridos para completar un
programa, el ancho del pulso o período del reloj del CPU y el tiempo total de ejecución de un
programa; en cambio, en la evaluación del rendimiento de la memoria, tenemos por ejemplo, el
tiempo de acceso a una celda.
La productividad o throughput () como métrica de rendimiento, es la cantidad de trabajos o
tareas completadas por unidad de tiempo. A diferencia del tiempo de ejecución que mide
directamente el rendimiento del CPU, la productividad depende de diferentes factores externos
y circunstanciales (acceso a disco, algoritmo de scheduling, entre otros) y mide un rendimiento
más global del sistema.
La disponibilidad (d) mide cuánto tiempo un sistema se mantiene en operación normal del
tiempo total requerido.
La utilización () es el fragmento de tiempo que un componente del sistema (CPU, disco,
memoria, etc) está activo para su utilización o contribuye al trabajo. La utilización se tasa en el
rango entre 0 y 1 o como porcentaje. La productividad máxima de un sistema se alcanza cuando
el componente más ocupado logra una utilización de 1 ó 100%.
Aunque las métricas nos permiten contar con un criterio de comparación genérico, muchas
veces es difícil definir métricas que sean efectivas 100% o estén libres de errores en los
procedimientos o casos de aplicación.
1.1.3
Consideraciones de efectividad-costo
En la evaluación de computadoras, sobre todo con fines económicos o financieros, también
incluye consideraciones de costos. Normalmente interesa el costo de producción o adquisición,
la tasa de retorno de la inversión (ROI) y el costo total de pertenencia (TCO).
La historia muestra proyectos costosos, como Cray, donde se busca a ultranza lograr el mayor
poder de cálculo con el mejor rendimiento. En estos casos, el costo no se consideró como una
métrica de decisión para la implementación del proyecto. En el otro extremo tenemos a los
proyectos de soluciones SOHO genéricos, donde el menor precio posible es la meta. Aunque el
rendimiento sí cuenta, se puede renunciar a ciertos beneficios en función de obtener un equipo
de bajo costo para un mercado con baja exigencia.
Quizás el mayor trabajo para el arquitecto o diseñador consiste en alcanzar el mayor
rendimiento posible al menor costo.
Página 3
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Aunque en este curso nos limitaremos a la evaluación del desempeño más que a la
determinación de costos y su contrastación con los beneficios, sí haremos énfasis, en donde sea
pertinente, en aquellas técnicas que permitan aminorar el costo de los sistemas sin sacrificar la
eficiencia.
1.1.4
Técnicas de análisis de desempeño
Las técnicas de análisis del desempeño de la ejecución de computadoras se pueden clasificar
en cuatro grandes bloques:




Medición del desempeño (benchmarking)
Modelado analítico
Modelado por simulación
Modelado híbrido
Las técnicas analíticas y de simulación, requieren la construcción de un modelo: una
representación abstracta del sistema real. Un modelo analítico de la ejecución es una estructura
matemática, mientras que un modelo por simulación requiere del soporte de un programa de
computadora especializado.
La mayor parte del arte en análisis de la ejecución queda en seleccionar a un buen modelo que
integre los aspectos más sobresalientes del sistema, eliminando toda la masa de detalles no
pertinentes que puedan ocultar lo esencial del mismo.
La tercera técnica, medida de la ejecución, no usa modelos, pero en cambio se sustenta en la
observación directa y en la recolección de valores del sistema de interés, o un sistema similar.
Esta técnica incluye la elección de métricas y sus medidas a emplear para caracterizar el sistema
y el uso de benchmarks o programas que sirvan como carga de trabajo e instrumento de
medición.
Ninguna técnica es mejor en todos los casos. Los modelos analíticos y de simulación
predominan en escenarios donde no contamos con el sistema vivo o un prototipo del mismo.
Cuando queremos determinar el desempeño de un sistema existente, la técnica de medición de
la ejecución es lo más indicado.
En nuestro curso emplearemos sobre todo, métodos analíticos muy simples y genéricos
partiendo desde la óptica del diseñador que pretende logra un mejor desempeño de un sistema
proyectado más que desde la óptica de evaluar un sistema existente.
1.1.5
Rendimiento:
Dado que la medida de rendimiento es el tiempo, y que a menor tiempo de ejecución
tenemos mayor rendimiento, es decir, el Rendimiento (R) de una computadora es inversamente
proporcional al tiempo de ejecución (t) de la misma, para una carga definida. Por tanto,
podemos definir rendimiento como:
Página 4
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
=
1
Con esta medida ya podemos comparar dos computadoras. Sean Rx el rendimiento de la primera
y Ry el de la segunda, para una misma carga, podemos decir que:
Rx > Ry  1 > 1  ty > tx
tx
ty
Y podemos cuantificar la relación entre ellas: qué tanto más rinde X sobre Y con la razón
siguiente:
Rx
= n
Ry
Donde n es cantidad de veces que X tiene mayor rendimiento que Y. En dependencia del
contexto, n se conoce como ganancia “G” (si X es un reemplazo de Y) o como aceleración
(A) o mejora de rendimiento (si X es una evolución de la misma arquitectura de Y).
Por ejemplo, si una máquina A ejecuta un programa en 10s y una máquina B en 15s. ¿Qué tanto
mayor es el rendimiento de la máquina A sobre el de la máquina B?
n = tb / ta = 15 s / 10 s = 1.5
–
El rendimiento de A es 1,5 veces el de B.
Esta razón es adecuada como base de comparación respecto a la unidad, sin embargo, a veces
queremos saber en cuánto supera una a la otra, es decir, el incremento neto de rendimiento:
n’ = n – 1
O mejor aún, en qué porcentaje la una supera a la otra:
n% = ( n – 1) * 100%
Así el incremento porcentual del rendimiento de X sobre Y, puede expresarse como:
Rx - Ry
n% =
* 100%
Ry
Página 5
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
De donde podemos deducir que A es 50% más rápida que B. Queda como tarea al lector
interesado demostrarlo.
Una vez definida una metodología para comparar rendimientos de dos computadoras mediante
su tiempo de ejecución, es importante definir qué métricas o características básicas intervienen
en la definición de esta medida.
1.1.6
Factores que determinan el tiempo de ejecución
Los factores que inciden en el tiempo de ejecución de un programa son: la frecuencia f
del procesador y la cantidad de ciclos c que transcurren desde que el programa inicia hasta que
concluye, puesto que si podemos determinar ambas podremos determinar el tiempo de
ejecución.
La frecuencia define el ancho del pulso o período de reloj. Cabe mencionar que este período se
define en tiempo de diseño para ser suficientemente ancho a fin de permitir que todas las
operaciones de control requeridas por cualquier paso de control puedan realizarse sin problemas
en ese intervalo de tiempo. Así:
f = 1/
y
t  t = c *
Donde la constante c representa el total de ciclos de reloj que se requirió para ejecutar el
programa.
Con estas nuevas relaciones, podríamos obtener información para comparar dos computadoras
en función de su frecuencia. Por ejemplo, suponga que la máquina A ejecuta un programa p en
10s y su CPU tiene una frecuencia de reloj de 100MHz. Usted está diseñando una máquina B y
quiere que ésta ejecute p en solamente 6 segundos aunque sabe que para ello requiere una mayor
frecuencia de reloj y como consecuencia, serán requeridos 20% más de ciclos para completar
p. ¿Qué frecuencia debe tener B para lograr el objetivo?
ta = ca / fa  ca = ta * fa
cb = 1.2 * ca = 1.2 * ta * fa
fb = cb / tb = (1.2 * ta * fa) / tb
fb = (1.2 * 10s * 100MHz) / 6s = 200 MHz
1.1.7
Ley de Amdahl
Hemos obtenido expresiones que nos permiten relacionar el rendimiento de dos
máquinas. Cuando el rendimiento de una es mayor que el de la otra como efecto de introducir
una mejora, decimos que tenemos una aceleración de rendimiento. Es importante recalcar,
Página 6
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
sin embargo, que la aceleración global del sistema estará limitada por la fracción de tiempo en
que dicha mejora es efectiva. Es decir, no podemos esperar que el sistema global acelere al
doble si la mejora, que incrementa el rendimiento al doble, solo es capaz de funcionar cierto
porcentaje de tiempo.
Por ejemplo, supongamos que aumentamos la frecuencia de un CPU al doble, podría esperarse
reducir el tiempo de ejecución global a la mitad. Sin embargo, si en cada ciclo de instrucción
se pierde mucho accediendo datos de la memoria, la mejora global alcanzada no será del doble,
sino menor.
La ley de Amdahl nos permite cuantificar la aceleración global neta de un sistema donde se ha
introducido una mejora que es efectiva solo una fracción de tiempo de trabajo del sistema, es
decir, nos permite cuantificar el rendimiento en función de la utilización:
“La aceleración de rendimiento global neta obtenida de incorporar una mejora a un sistema
equivale a la razón entre el rendimiento del sistema al ejecutar una tarea completa con la mejora,
empleando esta todo el tiempo posible, sobre el rendimiento del mismo al ejecutar la misma
tarea sin la mejora, por cuanto el efecto neto de la mejora está limitado por la fracción de tiempo
en que ésta se puede usar”
Ag = Rmejorado / Roriginal = toriginal / tcon mejora
Siendo tg el nuevo tiempo de ejecución global del sistema al incorporar la mejora, t el tiempo
de ejecución original sin mejora, n la ganancia o aceleración parcial que la mejora proporciona,
y , la fracción mejorada (utilización) o el porcentaje de tiempo real que la mejora es efectiva,
entonces:
tg = ttramo en que la mejora es efectiva + ttramo sin mejora
tg 


*   t * (1   )  t * (1   )  
n
n

t
y:
Ag 
t
tmejorado

1
(1   ) 

n
Así por ejemplo, si una máquina se mejora duplicando la frecuencia del CPU, pero la mejora
solo es efectiva durante el 60% del ciclo de instrucción por el acceso a memoria, la aceleración
global del sistema sería:
Ag = 1 / 0.4 + (0.6/2) = 1/ 0.7 = 1.43
Página 7
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Nota = 0.6 y n = 2
La ley de Amdahl nos conduce a un importante principio de diseño: Acelerar el caso común.
1.1.8
Cálculo del tiempo de Ejecución
Hemos determinado que el tiempo de ejecución depende netamente del total de ciclos
requeridos para ejecutar el programa por el período o duración del ciclo. Ahora analizaremos
más a fondo cómo obtener el total de ciclos del programa. Sabemos que en definitiva, un
programa es una serie de instrucciones a ejecutar. Cada una de estas instrucciones consume una
cantidad de ciclos para completarse, por tanto, la cantidad total de ciclos que emplea una
máquina para ejecutar un programa depende de la cantidad total de instrucciones que se
ejecutan:
N
t   *  Ci
i 1
Donde ci es la cantidad de ciclos de la i-ésima instrucción, y N es el total de instrucciones
ejecutadas en el programa. Si analizamos bien el programa, determinamos que existen grupos
de instrucciones que consumen la misma cantidad de ciclos de reloj, y por tanto, podemos
detallar el factor sumatoria de la expresión anterior como:
g
t  *cj *nj
j 1
Donde nj representa la cantidad de instrucciones del j-ésimo grupo y cj es la cantidad de ciclos
de reloj que requiere una instrucción del j-ésimo grupo para ejecutarse.
Sabemos del diseño del conjunto de instrucciones que en algunas arquitecturas, todas las
instrucciones tienen la misma cantidad de ciclos de reloj. En este caso, la ecuación anterior
tendría un solo grupo donde el factor “c1” se convierte en una constante a la que llamaremos
CPI (siglas de Ciclos Por Instrucción) y el factor “n1” en el total de instrucciones N.
En algunas arquitecturas, incluso es permisible hacer:
I
CPI 
c
i 1
i
I
Página 8
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Siendo ci la cantidad de ciclos de la instrucción i-ésima del conjunto de instrucciones I de la
arquitectura en cuestión. Es decir, se utiliza como CPI el promedio de ciclos de las
instrucciones.
Al contar con un CPI constante, entonces el tiempo de ejecución “t” se puede definir como:
t   * CPI * N 
CPI * N
f
Donde CPI es la cantidad de ciclos por instrucción, N es el total de instrucciones ejecutadas,
 es el período de reloj y f es la frecuencia.
1.1.9
Métricas populares de rendimiento
Se han propuesto una serie de medidas de rendimiento populares en el intento de crear
una métrica estándar de rendimiento que nos permita comparar dos computadores cualesquiera.
Este es un esfuerzo enorme porque la meta es ambiciosa y difícil de alcanzar. Y aunque, como
resultado de los mismos se han propuesto una serie de métricas simples que se han empleado
ampliamente, éstas tienen un contexto de aplicación limitado y son susceptibles a errores de
utilización.
1.1.9.1
MIPS
Una métrica muy difundida es la “velocidad o frecuencia de ejecución de instrucciones” que es
una métrica del tipo productividad que normalmente se expresa en millones de instrucciones
por segundo o MIPS. En términos del tiempo de ejecución la velocidad de ejecución de
instrucciones equivale a la cantidad total de instrucciones ejecutadas sobre el tiempo total de
ejecución. Se emplea el múltiplo millones (dividiendo entre 10 a la 6) para obtener el resultado
en un número más legible.
MIPS 
N
f

6
t *10
CPI *10 6
Como MIPS es una frecuencia, expresa el rendimiento en proporción inversa al tiempo lo cual
es adecuado porque mayores MIPS indican máquinas más rápidas.
El problema con el uso de MIPS consiste en que si se emplea como método comparativo, debe
tenerse cuidado que las máquinas tengan características similares. Por ejemplo, un programa
que emplea emulación de las operaciones de punto flotante puede resultar con más MIPS que
una máquina que emplea una FPU aunque el tiempo de ejecución del programa sea menor en
la segunda, con lo cual el criterio MIPS nos conduce a un resultado equivocado. De manera
Página 9
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
similar, si el repertorio de instrucciones de ambas máquinas difiere, es posible que el resultado
también sea equivocado.
1.1.9.2
MIPS relativos
Para atacar el problema de dos máquinas con repertorios muy diferentes, se propuso emplear la
métrica MIPS relativos que se refiere a los MIPS de esta máquina en comparación con una
máquina de referencia. Se medía el tiempo de ejecución de un programa de prueba en la
máquina a evaluar y se dividía entre el tiempo de ejecución del mismo programa en la máquina
de referencia y finalmente se multiplicaba por los MIPS de la máquina de referencia, lo que nos
permitiría comparar dos máquinas respecto a una tercera.
MIPSRe lativos 
treferencia
tevaluando
* MIPSreferencia
Nuevamente los problemas de esta métrica son que evalúa el desempeño sólo para ese programa
específico, puesto que se han demostrado resultados equívocos con otro tipo de programas.
Adicionalmente, la dificultad de obtener una máquina de referencia adecuada con la misma
carga de los sistemas operativos y compiladores hace casi impráctico este método hoy día.
1.1.9.3
MFLOPS
Para atacar las deficiencias de MIPS, respecto a las diferencias en las operaciones de punto
flotante, que son extensivamente usados en los ámbitos de computación científica, se propuso
emplear los MFLOPS o Millones de Operaciones en Punto Flotante por segundo. Los
megaflops se obtienen del cociente entre el total de operaciones en punto flotante de un
programa sobre el tiempo de ejecución por 10 a la 6:
MFLOPS 
O punto _ flo tan te
t *106
Aunque está restringido a las operaciones en punto flotante, los MFLOPS son más consistentes
que los MIPS por cuanto la cantidad de operaciones no cambia de máquina a máquina. La
problemática que se presenta, sin embargo, es que los conjuntos de operaciones en punto
flotante disponibles de máquina a máquina no son estándares y por tanto algunas operaciones
se deben implementar en función de otras. Adicionalmente existen operaciones en punto
flotante que son muy rápidas y otras muy lentas.
1.1.9.4
MFLOPS Normalizados
Para la solución a los problemas de MFLOPS se ha propuesto el uso de los MFLOPS
Normalizados. Este método concede pesos relativos a cada tipo de operación en punto flotante
y permite además considerar las operaciones enteras. Al asignar pesos mayores a las
Página 10
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
operaciones complejas se puede “normalizar” la diferencia de velocidades permitiendo
comparar de manera más equitativa de dos máquinas.
MFLOPSnormalizados 
 O * peso _ relativo
i
i
t *106
El problema de MFLOPS normalizados, consiste en que evalúa el rendimiento para ese
programa tipo de prueba (benchmark) específico y que aunque representa una opción para
comparar dos computadoras, no representa el rendimiento de la máquina.
1.1.9.5
Elección de programas de prueba o benchmarks
Para poder determinar los valores o medidas para evaluar una computadora según tal o cual
métrica, se necesita establecer una carga de trabajo idónea. Esta carga de trabajo está compuesta
por uno o más programas tipo que permiten establecer una marca o benchmark de comparación
de esta computadora con otras. La elección de estos programas debe hacerse de forma cuidadosa
de acuerdo a la actividad para la que está pensada la computadora.
Existen cuatro tipos de Benchmarks de acuerdo a las tendencias que se han venido imponiendo:
1. Aplicaciones o Programas reales: Consiste en usar de carga de trabajo la aplicación
principal a emplear en el equipo específico o programas tipo predefinidos como:
Compiladores (GNU C), Procesadores de Texto (Tex) y Aplicaciones CAD (Spice).
2. Núcleos o Kernels: Emplea extracciones de secciones de código importante de
programas reales usadas para evaluar rendimiento, por ejemplo Livermore Loop y
LinPack.
3. BechMarks Reducidos o Toys: Emplean rutinas pequeñas (10–100 líneas) con
resultados conocidos. Se introducen y ejecutan fácilmente en computadores para medir
su desempeño. Ejemplo: QuickSort, Puzzle.
4. BechMarks Sintéticos: Análogos a la filosofía de los Núcleos. Se crean mezclas de
diferentes rutinas de programas reales o inventados por el diseñador del benchmark.
Determinan frecuencia media de operaciones y acceso a operandos en diferentes
escenarios de cómputo. No calculan algo que un usuario pueda utilizar solo pretende
determinar un perfil medio de ejecución que sirva de referencia para comparar con otras
máquinas. Ejemplos de éstos son: WhetStone y Dhrystone.
Página 11
Arquitectura de Máquinas Computadoras III
1.2
Paralelismo y Arquitecturas Avanzadas
REDUCCIÓN DEL TIEMPO DE EJECUCIÓN
Hemos determinado de qué factores depende el tiempo de ejecución, de manera que si
queremos reducirlo, habrá que reducir aquellos factores que inciden en proporción directa en el
tiempo de ejecución o incrementar los que lo hacen en proporción inversa. Como es de
esperarse, la interrelación entre los mismos o las limitaciones físicas o tecnológicas frenarán la
máxima aceleración o mejora que pueda alcanzarse.
1.2.1
Reducción del período de reloj.
La primera apuesta y la más obvia apunta a reducir el período de reloj . Para lograr este
cometido, sin embargo, puede ser necesario reimplementar la máquina completa por cuanto el
período de reloj se decide en función de la máxima cantidad de pasos de control que se requieren
ejecutar de una sola vez, así como la máxima duración de éstos. Las mejoras realizadas en este
sentido, han implicado reducciones en el grosor de la oblea de silicio con que se fabrican los
procesadores. A menor grosor, menor distancias a recorrer y por tanto menor tiempo de
propagación.
Como ejemplo, la familia Intel x86 ha ido reduciendo significativamente el período de reloj
(aumentando la frecuencia) del CPU:
Tabla 1.2. Frecuencias de CPUs ix86
CPU
Hasta
Desde
Hasta
8088, 8086
1.7
1.7
588.2
588.2
80186
1.7
4
588.2
250.0
80286
4
12
250.0
83.3
80386
25
33
40.0
30.3
80486
33
100
30.3
10.0
Pentium
1.2.2
(ns)
f (MHz)
Desde
66
233
15.2
4.3
Pentium II
266
400
3.8
2.5
Pentium III
450
1,300
2.2
0.8
Pentium 4
1,300
4,000
0.8
0.3
Reducción de la cantidad de instrucciones N.
La segunda línea de acción para reducir el tiempo de ejecución, consiste en reducir la
cantidad de instrucciones de los programas. Durante los 50´s y 60´s, de hecho, prevalecieron
los esfuerzos en este sentido. Los conjuntos de instrucciones se diseñaban cada vez más
complejos de forma que el programador tuviera a disposición diferentes formas de lograr la
misma operación.
Una meta común en estos esfuerzos fue el lograr la mayor ortogonalidad posible a fin que los
programas pudieran ser más compactos al permitir cualquier combinación de operandos en las
instrucciones. Posteriormente se encontró que esta dirección no llevaba a mejoras sustanciales
por cuanto al complejizar las instrucciones fue requerido complejizar el hardware del CPU,
Página 12
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
sobre todo de la unidad de control. Como consecuencia, fue necesario un período de reloj más
ancho o mayor cantidad de ciclos para ejecutar las instrucciones.
El surgimiento de la microprogramación con la gran flexibilidad de diseño que ésta proporcionó
a los arquitectos, propiciaron la propagación de los conjuntos de instrucciones complejos,
alentada por la asumpción incorrecta que siempre el hardware es más rápido que el software.
Afortunadamente el avance de la tecnología permitió mitigar el impacto de la introducción de
estos conjuntos de instrucciones complejos en el desempeño, al producirse hardware más
rápido.
Posteriormente, el proyecto RISC, determinó que ni los programadores ni los compiladores
estaban sacando todo el provecho a las instrucciones complejas. Adicionalmente, se pudo
comprobar que en muchos casos una sola instrucción compleja dilataba más tiempo en
ejecutarse que varias instrucciones más simples que realizaban la misma operación. Los
hallazgos de RISC proponen que en muchos casos es más eficiente un programa con mayor
cantidad de instrucciones si el hardware del CPU que lo ejecuta puede simplificarse y acelerarse
lo suficiente. Cabe mencionar que al momento que se introdujo RISC, se podía contar con
muchos registros de propósito general en el CPU a bajo costo, lo cual no era posible antes y por
tanto la mayoría sino que todos los operandos residían en memoria principal, imponiendo un
cuello de botella en la ejecución.
1.2.3
Reducción del CPI
Finalmente, también tenemos una importante posibilidad de mejorar el rendimiento al
reducir el CPI por cuanto este es un factor entero que n-plica el tiempo de ejecución. Imagine,
reducir el CPI de 4 a 2, reduciría categóricamente el tiempo de ejecución a la mitad.
La idea común en este sentido apunta a reducir el CPI a su mínima expresión, es decir, a 1.
Obviamente tal propósito requerirá un período de reloj muy ancho así como reducir al máximo
los cuellos de botella (acceso a memoria y entrada-salida).
Como actividad práctica, proponemos identificar qué tan eficiente es el procesador simple
basado en un bus común estudiado en los cursos anteriores. Identificar las limitantes de diseño
que inciden en su desempeño y proponer un diseño mejorado que permita reducir el tiempo de
ejecución.
1.2.4
Consecuencias de la ley de Amdahl
Hemos estudiado los factores de los cuales depende el rendimiento del CPU y cómo
reduciendo estos factores podríamos reducir el tiempo de ejecución. No podemos despreciar las
latencias del acceso a las otras partes de la computadora cuando queremos evaluar la aceleración
o impacto global que reducir el tiempo de ejecución tendrá en todo el sistema.
Puesto que cada instrucción a ejecutarse es llevada desde la memoria al CPU, las latencias en
el acceso a la memoria, limitarán la aceleración global del sistema, pues la aceleración lograda
Página 13
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
a lo interno del CPU no podrá usarse todo el tiempo sino solo una fracción de éste, según se
evidencia en el ejemplo del acápite 1.1.8. Un caso similar se dará con el acceso a dispositivos
periféricos cuando se requieran datos que deban leerse directamente de un puerto de entradasalida.
Por tanto, nuestro estudio de la mejora del rendimiento del ordenador no estaría completo sin
estudiar las mejoras del rendimiento de los otros dos subsistemas que componen la
computadora: la memoria y el sistema de entrada-salida.
Página 14
Arquitectura de Máquinas Computadoras III
1.3
Paralelismo y Arquitecturas Avanzadas
MEJORAS AL SISTEMA DE MEMORIA
Hemos aprendido que el efecto neto de las mejoras aisladas a una parte del sistema está
limitado por la fracción de tiempo que dicha mejora se pueda emplear. El sistema de memoria
es crítico en la ejecución de los programas por cuanto cada instrucción reside en memoria y
muchos de los operandos también.
De nuestro curso anterior conocemos que el ciclo de máquina de lectura o escritura en memoria
normalmente requiere varios ciclos de reloj, convirtiéndose en un verdadero cuello de botella
en el sistema de ejecución. En este sentido, el diseño del bus del sistema juega un rol muy
importante. En muchos casos, incrementar el ancho del bus puede incrementar
significativamente la velocidad de transferencia. Asimismo, implementar un diseño de
múltiples buses puede reducir cuellos de botella. También se pueden solapar en el tiempo
diferentes ciclos de acceso a memoria mejorando el desempeño global del sistema de memoria.
En este sentido, es evidente que una cualquier mejora de velocidad en el acceso a la memoria
es determinante en el rendimiento de la máquina. Existen dos métricas importantes en un
sistema de memoria: el tiempo de acceso y la capacidad. A lo largo de la historia de la
computación se ha mantenido una tendencia constante a demandar más y más memoria. Sin
embargo, en la medida que crece el tamaño de la memoria, se requieren más circuitos de
decodificación que retardan el acceso a las celdas de almacenamiento. Adicionalmente, la
tecnología de fabricación de la memoria también influye en el desempeño de la misma. La
memoria estática es muy rápida pero mucho más costosa que la dinámica. Los grandes tamaños
de memoria principal, relativamente barata, con que contamos hoy día solo son posibles gracias
a la memoria dinámica.
1.3.1
Jerarquía de memoria
Es evidente que para las tareas de cómputo actuales, incluso en computadores
personales, necesitamos grandes cantidades de memoria principal. Es igualmente evidente que
los costos hacen prohibitivo implementarlas en memoria estática, sino más bien en memoria
dinámica que es normalmente unas diez veces más lenta que la primera. Una solución razonable
consiste en introducir una memoria intermedia entre el procesador y la memoria principal que
no sea tan grande a fin que pueda ser rápida y además pueda implementarse con memoria
estática a un precio razonable.
Debido a su reducido tamaño y su mejora de velocidad de acceso sobre la memoria principal,
es importante que se garantice que en ella sólo se encuentren los datos e instrucciones más
usados. Este tipo de implementación de memoria intermedia se denomina caché.
Es importante destacar que este arreglo define cierta jerarquización del almacenamiento donde
en el más alto nivel tenemos el almacenamiento interno al CPU (registros) pasando por la caché,
continuando con la memoria principal hasta llegar al almacenamiento secundario. En cada
nivel se establecen diferentes valores de velocidad de acceso, capacidad, tecnología y costo
verificándose que a medida que bajamos en la jerarquía disminuye la velocidad de acceso (o
Página 15
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
aumenta el tiempo de retardo) y aumenta la capacidad. El modelo, para ser eficiente debe
imponer en lo posible que todo acceso se dé entre niveles adyacentes.
Finalmente, es posible introducir varios niveles intermedios si la brecha de velocidad entre los
diferentes niveles es significativa.
1.3.2
Principio de localidad de referencia.
Para que la jerarquía de memoria funcione, las cachés deben tener una utilización
cercana a 100%, pues de lo contrario la aceleración global lograda no justificaría el incremento
costo al introducir una memoria extra bastante cara. Afortunadamente, el principio de localidad
de referencia garantiza la consecución de este objetivo bastante bien.
Este principio se basa en los principios primitivos de la organización de la máquina Von
Neumann de secuencialidad de los programas y de vecindad de almacenamiento. Podemos
decir que el principio tiene dos componentes: uno temporal y el otro espacial. El temporal
predica que una palabra de memoria que se referencia en este momento, tiene gran probabilidad
de reverenciarse en el futuro cercano (debido a la modularidad y ciclos en los programas). De
forma similar, el componente espacial establece que las palabras vecinas de la palabra que se
está referenciando actualmente tienen alta probabilidad de referenciarse en el futuro próximo.
Figura 1.1. Jerarquía de Memoria.
1.3.3
Cálculo de la aceleración del rendimiento en la jerarquía de memoria
El cálculo del rendimiento de un sistema jerárquico de memoria con caché es un caso
específico de aplicación de la ley de Amdahl. La utilización de la caché se puede cuantificar
Página 16
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
mediante la tasa de aciertos (h) o el porcentaje de veces que una referencia a memoria se
encuentra efectivamente en la caché. La ganancia del sistema o aceleración del rendimiento
del tramo mejorado es la proporción en la cual la velocidad de acceso a la caché supera a la
memoria principal, por ejemplo: si la caché tiene un tiempo de acceso de 10ns y la memoria
principal tiene un tiempo de acceso de 100ns, la ganancia (n) del sistema cuando se puede
acceder a caché es de 10. Así el tiempo de acceso global de un sistema con caché en función
del los tiempos de accesos de sus memorias es:
t g  tc * h  t M * (1  h)
Siendo tg el tiempo global del sistema, tc el tiempo de acceso de la caché y tm el tiempo de
acceso de memoria principal
1.4
MEJORAS AL SISTEMA DE ENTRADA-SALIDA
De forma similar al sistema de memoria, en la Entrada/Salida, la brecha de ancho de
banda entre dispositivos de diferentes velocidades de trasferencias se puede reducir mediante
la jerarquización de buses y la anexión de buffers en algunos módulos controladores de
entrada-salida. Además de el equilibrio de ancho de banda, se pueden solapar en el tiempo las
operaciones de transferencia de datos con las operaciones de CPU, mediante la incorporación
de controladores de DMA, canales de E/S y módulos inteligentes de dispositivos.
CPU +
Cache L1
Controlador
de vídeo
Cache L2
Controladores del sistema
(Chipset)
Controlador de Memoria y
Puente PCI
"Bus" AGP
Memoria
Principal
Bus del Sistema
Bus PCI
SCSI
Dispositivos IDE
CD
DD
DD
DD
Controlador IDE
Controlador de DMA
Puente PCI a ISA
LAN
Slot
USB
Bus ISA
Slot
Slot
LPT
Disquete
Super
I/O
Com 1
Com 2
Teclado
Ratón PS/2
Figura 1.2. PC con jerarquización de buses de E/S.
Página 17
Arquitectura de Máquinas Computadoras III
1.4.1
Paralelismo y Arquitecturas Avanzadas
DMA
Este método de transferencia avanzado, se implementó con el objetivo de mejorar la
velocidad de transferencia de datos, sobre todo para dispositivos y aplicaciones de E/S muy
rápidos (Adquisición de sonido, discos duros de alta velocidad y video). Consiste en proveer
un procesador auxiliar capaz de hacer E/S por programa directamente a la memoria, relevando
al CPU de esta tarea.
DMA se aprovecha cuando los dispositivos son capaces de transferir gran cantidad de datos de
una vez. Surge un problema de concurrencia en el bus del sistema respecto al CPU. Este se
resuelve con Cycle Stealing, que permite al procesador de DMA bloquear al CPU el uso del
bus algunos ciclos a fin de realizar la transferencia de DMA.
Cuando un programa desea realizar una transferencia empleando DMA, el CPU inicializa los
parámetros de la misma e indica al Módulo DMA, acto seguido, el CPU se desentiende de la
transferencia. El procesador de DMA coordina el acceso al dispositivo y sincroniza la
transferencia en función del esquema de sincronización del bus del sistema. El procesador de
DMA y el dispositivo de E/S se sincronizan mediante líneas de control del Procesador de DMA
denominadas canal de DMA.
Una ventaja de DMA sobre interrupciones es que la transferencia en DMA puede hacerse en
cualquier ciclo, en tanto en Interrupciones, la verificación de solicitudes de interrupción se hace
hasta al final de la fase de ejecución.
1.4.2
Procesadores y Canales de E/S
Son una evolución de DMA. Consisten en procesadores inteligentes de tratamiento de
E/S, capaces de atender a múltiples dispositivos a la vez. A diferencia de DMA que empleaba
el bus del Sistema para realizar la transferencia, cuando se usa un IO Processor, IO Channel o
Canal de E/S, los dispositivos se conectan directamente al canal de E/S. Actualmente, los
módulos DMA emplean Procesadores de E/S y pueden ofrecer las mismas características que
ofrecen los canales.
Estos Procesadores de E/S se implementaron en computadoras grandes (Supercomputadoras,
mainframes y en algunas Minicomputadoras) permitiendo jerarquizar el sistema de E/S
reduciendo la brecha de velocidades entre los diferentes dispositivos.
1.5
INTRODUCCIÓN AL PARALELISMO
Debido a la interrelación de los factores que determinan el tiempo de ejecución y a las
limitaciones propias de la arquitectura secuencial, existe una máxima aceleración que se puede
lograr en el tiempo de ejecución. Cuando se requiere mayor desempeño, no queda otro camino
que mejorar la arquitectura introduciendo paralelismo. Por ejemplo, es posible que una persona
no puede ser más rápida en ejecutar una tarea por mucho que se esfuerce, sin embargo, quizás
dos personas sí puedan hacerlo si comparten el trabajo.
Página 18
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
En computación se ha evidenciado, desde sus inicios, una necesidad y tendencia hacia el
paralelismo:




1.5.1
Se requiere cada vez más poder de cómputo y además concurrencia (datos compartidos).
Desde la introducción de las primeras enormes y costosas máquinas se requirió
capacidad de atención a múltiples usuarios para que fueran costo-efectivas.
Los dominios de aplicación se han ido ampliando cada vez más: desde un procesamiento
de datos se ha pasado a un procesamiento de información, de conocimiento y
últimamente se habla de “inteligencia”.
Los avances continuos en tecnología de producción de hardware a gran escala facilitan
la producción de sistemas paralelos a menor costo.
Procesamiento paralelo
El procesamiento paralelo es una forma eficaz de procesamiento que favorece la
explotación de los sucesos concurrentes en un sistema de computación. Esta concurrencia
implica simultaneidad, solapamiento y multiplicidad de recursos. El paralelismo que involucra
solapamiento se denomina temporal porque permite la ejecución concurrente de sucesos sobre
los mismos recursos en intervalos intercalados de tiempo. El paralelismo que permite
simultaneidad real sobre múltiples recursos al mismo tiempo se denomina paralelismo espacial.
1.5.2
Diferentes mecanismos y técnicas de mejora del desempeño empleadas
A medida que se fueron evidenciando las necesidades y requerimientos de mayor poder
de cómputo y rendimiento en los sistemas se fueron implementando una serie de técnicas y
mecanismos de mejora del desempeño que introducen algún nivel de paralelismo que han ido
evolucionando y consolidándose permitiendo los niveles de rendimiento que tenemos en las
computadoras hoy día:
1.5.2.1
Multiprogramación y tiempo compartido.
Esta es una técnica de software introducida por los diseñadores de sistemas operativos para
implementar paralelismo temporal en la ejecución de múltiples procesos de usuarios y los
mismos procesos del sistema operativo, logrando que todos progresen a la vez. La
multiprogramación permite tener múltiples procesos en memoria y sólo realiza cambio de
contexto con los procesos de house keeping de sistema o cuando el proceso se bloquea en espera
de un servicio. El tiempo compartido es más dinámico en el sentido que asigna un quantum de
tiempo de CPU a cada proceso.
1.5.2.2
Solapamiento de las operaciones CPU y E/S.
Mecanismos de mejora del sistema de entrada/salida que permite liberar al CPU de las
operaciones de entrada–salida, permitiéndole ejecutar otras operaciones. Este mecanismo
requiere la introducción de procesadores auxiliares para la transferencia de entrada–salida a
Memoria: controlador DMA, Canales de E/S y controladores de E/S inteligentes.
Página 19
Arquitectura de Máquinas Computadoras III
1.5.2.3
Paralelismo y Arquitecturas Avanzadas
Jerarquización y equilibrio de ancho de banda.
Las diferencias de velocidad entre diferentes componentes del sistema afectan el desempeño
global del mismo por los cuellos de botella que los dispositivos más lentos imponen en las
transferencias entre ellos. La jerarquización de diferentes niveles y la introducción de niveles
intermedios que reduzcan la brecha de velocidad, permite ir equilibrando el ancho de banda del
sistema y acelerar su rendimiento global. En el sistema de memoria contamos con la jerarquía
de memoria y en los sistemas de entrada salida con técnicas de compensación con la
jerarquización de buses y técnicas de buffering en los módulos de entrada/salida.
1.5.2.4
Solapamiento de la ejecución y Segmentación encauzada.
El modelo de ejecución de las máquinas secuenciales puede ser ineficiente en cuanto al nivel
de utilización de los componentes internos del CPU, al ocupar todos los recursos en el ciclo
de instrucciones completo. Un análisis de las fases y etapas del ciclo nos permiten identificar
diferentes tareas que podrían solaparse. Por ejemplo, la fase fetch solo se encarga de traer la
próxima instrucción. Finalizada la fetch, el PC no vuelve a utilizarse hasta la próxima fase
fetch. Entonces, podría considerarse que cuando se complete la traída de la instrucción i, una
parte dedicada del CPU puede ir a traer la siguiente instrucción i+1, mientras el resto ejecuta
la instrucción i. Cada parte o sección del CPU se denomina en este caso etapa o segmento del
cauce de ejecución o pipeline, porque la salida de cada etapa anterior alimenta la entrada de la
siguiente como si estuvieran conectados en una tubería. Por eso la implementación de tal
solapamiento de la ejecución en el CPU se denomina segmentación encauzada. El ejemplo de
segmentación mostrado en este párrafo solo consta de dos etapas y se le conoce como
precarga de instrucciones (prefetching), sin embargo los sistemas segmentados hoy día suelen
tener muchas más etapas de cauce.
La técnica de solapamiento de la ejecución, permite reducir considerablemente el tiempo de
ejecución, como lo estudiaremos en la unidad 2.
Adicionalmente, los sistemas de acceso a memoria también han implementado un modelo de
solapamiento en los ciclos de máquina de acceso a memoria, permitiendo reducir
grandemente el tiempo de respuesta global del sistema.
Página 20
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Suma
Multiplic. 1
Banco de
Registros
(24 x 32)
Multiplic. 2
División
Suma Fija
Incremento
Subsistema de Entrada
/ Salida
Memoria Central
Decremento
Lógica
Desplazamiento
Bifurcación
Pila de
Instrucciones
Marcador
Figura 1.3. Multiplicidad de unidades funcionales en le CDC-6600
1.5.2.5
Sistemas escalares o multiplicidad de unidad funcionales
La introducción de la segmentación de bajo nivel o prefetching de instrucciones,
condujo a otra mejora en rendimiento que consiste en agregar más de una unidad aritmética
al procesador a fin de poder acelerar aún más la ejecución. Con esta importante mejora de
diseño, podrían tenerse más de una instrucción en ejecución a la vez. Este modelo, sin
embargo introduce requerimientos nuevos también en cuanto a mantener el orden estricto de
ejecución de las instrucciones y el control de disponibilidad de los recursos. A los sistemas
que implementan esta mejora se les conoce como sistema escalares. Por ejemplo, la CDC6600 que se muestra en la figura 1.3, emplea una cola de instrucciones y 10 unidades
aritméticas además de un marcador o scoreboard para registrar y controlar la disponibilidad
de las unidades funcionales y los registros.
1.5.2.6
Sistemas paralelos.
Las técnicas mencionadas arriba, explotan mayormente el paralelismo temporal.
Algunas introducen elementos de paralelismo espacial al incorporar elementos auxiliares de
proceso o varias unidades funcionales. Aunque los sistemas escalares introducen un nivel
interesante de paralelismo espacial, suele denominarse “sistemas paralelos” solamente a
aquellos que explotan el paralelismo efectivamente mediante la multiplicidad de procesadores
o elementos de procesamiento simples o complejos que colaboran en la solución de uno o más
problemas de forma simultánea.
Existen varios tipos y arquitecturas que estudiaremos a lo largo de la unidad 3 y 4.
1.6
CLASIFICACIÓN DE LAS ARQUITECTURAS PARALELAS.
Página 21
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Se han propuesto diferentes criterios para clasificar las arquitecturas paralelas, según diferentes
características y niveles de paralelismo. De entre estas resaltan las de Flynn, Feng, Handler,
Hockney - Jesshope y Shore.
1.6.1.1
Taxonomía de Flynn
Flynn propone establecer categorías de clasificación en función de la multiplicidad de los
flujos de datos y de instrucciones que se conjugan en la ejecución de estos sistemas.
Considerando que un flujo puede ser simple o múltiple, establece cuatro categorías posibles:

SISD (Simple flujo de inst.-simple flujo de datos)
Esta categoría incluye a todos los sistemas de un solo CPU. Las ejecuciones se
ejecutan de forma secuencial pero puede haber segmentación.
Ejemplos de esta categoría son los computadores viejos IBM 370 e IBM 7090, el
VAX y el Intel 8086.

SIMD (Simple flujo inst.-multiples flujos de datos)
Esta categoría incluye una gran diversidad de procesadores paralelos que ejecutan una
misma instrucción sobre un conjunto de datos al unísono o solapadamente. Las
máquinas típicas SIMD son los procesadores matriciales con una red de múltiples
elementos de proceso (EP) supervisados todos por una la misma unidad de control.
Todos los EP reciben la misma instrucción emitida por la unidad de control y operan
esta instrucción sobre los datos residentes en su memoria local. Los miembros de esta
categoría serán nuestro objeto de estudio de la unidad 3.

MISD ( Múltiples flujos inst.-simple flujo de datos)
Este modelo propone la existencia de n unidades procesadoras; cada una recibe
distintas instrucciones que operan sobre el mismo flujo de datos. La salida de un
procesador pasa a ser la entrada del siguiente. Muchos autores coinciden en que no
existe espécimen para esta categoría aunque algunos insisten en considerar las etapas
de un cauce como entidades procesadoras y ubican los sistemas segmentados en esta
categoría.
Dado que las etapas no son autónomas, nuestra posición para efectos de este curso será
aceptar y declarar la vacuidad de esta categoría.

MIMD (Múltiples flujos inst.-multiples flujos de datos)
Esta categoría incluye a todos los sistemas paralelos que constan de múltiples
procesadores autónomos trabajando cooperativa y coordinadamente en la solución de
uno o más problemas de forma simultánea. Esta categoría nos ocupará durante la
unidad 4.
Página 22
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
2 SEGMENTACION
2.1
INTRODUCCION
La ejecución secuencial de instrucciones es muy lenta. Hemos expuesto que las mejoras
en tiempo de ejecución están limitadas por la interrelación entre las variables de la definición
del tiempo de ejecución secuencial t, que depende del número de instrucciones ejecutadas N, el
número promedio de ciclos de reloj consumidos por cada instrucción CPI y el período de reloj
del CPU, según muestra la expresión:
t = N * CPI
¿Existe alguna posibilidad de ejecución para aumentar el rendimiento reduciendo el tiempo de
ejecución? Pues sí: aplicar técnicas de paralelismo. Una de las técnicas de paralelismo más
empleadas por ser implementadas a lo interno del procesador es la segmentación encauzada o
pipelining en lengua inglesa. Se ha anotado que existen dos tipos de segmentación: la lineal y
la no-lineal. La ejecución segmentada de instrucciones es un ejemplo de segmentación lineal,
que será nuestro foco de interés en este capítulo.
La segmentación encauzada es una técnica de implementación que consiste en solapar la
ejecución de múltiples instrucciones en el tiempo. Eso significa que no se requiere esperar hasta
que la i-ésma instrucción concluya para comenzar a ejecutar la i+1-ésima instrucción. Hoy en
día, la segmentación es clave en la implementación de CPUs rápidos. Cabe mencionar que la
segmentación también se emplea en la construcción de unidades aritméticas. La figura 2.1.
muestra la ejecución secuencial que conocemos del curso anterior versus la ejecución solapada
que permite la segmentación.
Figura 2.1. Ejecución secuencial frente a la segmentada.
La segmentación es similar a una línea de producción en serie o cadena de ensamblaje: la cadena
se compone de una serie de fases o etapas consecutivas de producción que son necesarias para
Página 23
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
completar el producto o tarea. El producto se construye con diferentes piezas o partes que se
ensamblan en cada etapa de la cadena. Cada etapa cuenta con el equipamiento requerido para
completar la subtarea que le compete. En cada etapa de la cadena se ensambla una parte o pieza
y al final de la misma tenemos el producto completo. La gran ventaja es que no se necesita
esperar a que un producto completo esté listo para comenzar a ensamblar el siguiente, sino que
apenas una etapa completa su parte del trabajo, la pasa a la siguiente y comienza a procesar su
parte correspondiente del siguiente trabajo.
Análogamente, en la segmentación encauzada, la ejecución de una instrucción se divide en
diferentes fases y el procesador se organiza en unidades o secciones de ejecución relativamente
independientes llamadas segmento o etapa. Cada etapa de la segmentación completa o ejecuta
una parte de la instrucción. La CPU segmentada trabaja entonces como una línea de producción
en serie: La primera etapa carga la primera instrucción y completa su primera fase. Una vez que
esta fase ha terminado, pasa su salida a la siguiente etapa y toma la segunda instrucción mientras
la segunda etapa ejecuta la segunda fase de la primera instrucción. Este procedimiento se repite
entre las restantes etapas. Cuando la primera instrucción sale de la última etapa, su ejecución
está completa. En el siguiente pulso de reloj saldrá la segunda del cauce y así en lo sucesivo.
La figura 2.2. muestra el diagrama a bloques cómo se estructura un cauce de instrucciones que
opera según lo descrito. Cada etapa, en el gráfico se representa con un bloque verde. Los
bloquecitos celestes representan latches o registros de retención que tienenla misión de separar
los datos entre etapas, para evitar sobreposición de los mismos, según se explicará
posteriormente.
Figura 2.2. Diagrama de bloques de un cauce de Instrucciones.
Como todas las etapas están conectadas entre sí, todas ellas deben estar listas para proceder al
mismo tiempo; es decir, deben estar sincronizadas. El tiempo requerido para desplazar una
instrucción, un paso a lo largo del pipeline normalmente se hace corresponder a un ciclo del
reloj del procesador (). La duración de un ciclo máquina, está determinada por el tiempo que
necesita la etapa mas lenta, porque todas las etapas deben progresar a la vez. El diseñador debe
entonces, equilibrar la duración de las etapas de la segmentación. Si las etapas están
perfectamente equilibradas, el ciclo de la máquina segmentada es óptimo porque reduce el
gasto por segmentación.
El objetivo de la segmentación es conseguir una instrucción por ciclo, aunque cada instrucción
por separado ocupe varios ciclos (CPI > 1). La productividad de la segmentación está
determinada por la frecuencia con que una instrucción salga del cauce. La segmentación
incrementa la productividad de instrucciones de la CPU porque el número de instrucciones
completadas por unidad de tiempo se incrementa aunque no reduce el tiempo de ejecución de
cada instrucción debido al gasto en el control de la segmentación. El incremento en la
Página 24
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
productividad de instrucciones significa que un programa corre mas rápido y tiene menor
tiempo total de ejecución aun cuando ninguna instrucción se ejecute con mas rapidez.
El cauce de instrucciones mostrado en la figura 2.2. es un cauce lineal porque todas las etapas
tiene una relación de precedencia lineal entre ellas. El cauce lineal obliga a todas las
instrucciones a atravesar todas y cada una de las etapas del mismo, aunque no la necesite y por
tanto todas las instrucciones duran igual tiempo.
La precedencia está definida como una relación en el conjunto de subtareas en las que se divide
la tarea global que ejecuta el encauzado y define el orden de ejecución de las mismas:
Sea una tarea T, definida como el conjunto de subtareas requeridas para completarse:
T = {T1, T2, ...., Tk}
Si se verifica que la subtarea Tj no inicia hasta completar Ti  i < j y que una subtarea solo se
ejecuta una vez, entonces las subtareas tienen entre sí una relación de precedencia lineal. Si las
subtareas pueden ejecutarse en diferentes orden y/o repetidamente, se tiene una relación no
lineal de precedencia y se dice que el cauce es no lineal o general.
Un cauce puede representarse en forma de diagrama de bloques como la figura 2.2 o como un
grafo de precedencia donde se muestre la relación entre las subtareas.
El funcionamiento de un cauce de instrucciones puede modelarse mediante diagramas de
instrucciones o diagramas espacio-tiempo. El primero muestra el solapamiento de las
instrucciones en el tiempo y el segundo la utilización del cauce.
Figura 2.3. Diagramas de Instrucciones y Espacio-Tiempo.
El diagrama Espacio-Tiempo, introducido por Chen, se conforma por un cuadrante
bidimensional con el Espacio (etapas del cauce) en el eje de las “y” y el tiempo (ciclos de reloj
consumidos) en el eje de las “x”. Cada tramo espacio-tiempo representa la ejecución de la
SubTarea Ti en la etapa j. El subíndice representa la etapa y el superíndice la tarea.
Página 25
Arquitectura de Máquinas Computadoras III
2.2
Paralelismo y Arquitecturas Avanzadas
RENDIMIENTO DEL PROCESADOR SEGMENTADO
Hemos establecido que el rendimiento de las computadoras puede determinarse a través de dos
medidas principales: el tiempo de ejecución y la productividad. En un procesador encauzado,
el rendimiento es superior al de un procesador secuencial debido al solapamiento (paralelismo
temporal) en la ejecución. Sabemos que el tiempo de ejecución en un procesador secuencial
es:
t1 = N * CPI * 
Donde el subíndice 1 de t denota que es secuencial, es decir, solo tiene 1 etapa que ejecuta toda
la instrucción de una vez. N son las instrucciones totales ejecutadas y es el período de reloj.
Procedamos ahora a determinar una expresión para el tiempo de ejecución de un procesador
segmentado de k etapas tk.
El período del reloj de un procesador encauzado depende de la duración de la etapa más lenta,
porque estamos modelando una cadena de producción donde todas las etapas deben proceder al
mismo tiempo. Así el período, para un procesador de k etapas es:
Figura 2.3. Cálculo del período de un procesador encauzado..
Como todas las instrucciones duran lo mismo, puesto que deben pasar por todas las etapas del
cauce, y suponiendo que éste requiere un solo ciclo de reloj para ejecutar las operaciones de
cada etapa, entonces el CPI de todas las instrucciones equivale al número de etapas del cauce,
es decir: CPI = k.
El procesador encauzado, requiere k ciclos de reloj para producir la primera instrucción. Una
vez que el cauce está lleno, se produce una instrucción por ciclo, como puede apreciarse en la
figura 2.1. Entonces, podemos definir el tiempo de ejecución como el tiempo requerido para
ejecutar la primera instrucción (k * ) más el tiempo requerido para el resto que no es más N-1
ciclos. Así el tiempo de ejecución segmentado, denotado por t k es:
tk = k *  + ( N – 1) * 
Así la ganancia de rendimiento de un procesador segmentado sobre uno secuencial se define
como:
Página 26
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
La máxima ganacia del cauce es el límite de G cuando N  ∞ que es k, por tanto G = k.
La productividad del cauce depende de la eficiencia del mismo, es decir, de la capacidad de
mantenerse lleno, pues es solo con cauce lleno que este logra su objetivo de producir una
instrucción por ciclo. La Eficiencia, es por tanto, una medida de la utilización del cauce. De
forma general, resulta de la razón de tramos espacio-tiempo ocupados sobre el total de tramos
transcurridos durante la evaluación (ver figura 2.3). Más adelante se estudiará que existen
riesgos de control que evitan la utilización total del cauce en todo momento, con lo cual este
cálculo varía.
Nótese que los tramos ocupados durante la primera instrucción se complementan con los tramos
desocupados una vez que la última instrucción entra al cauce, por tanto, el total de tramos llenos
es: N * k *  y el total de tramos es: k *  *[ k + (N -1)]. Así, la eficiencia es:
Es fácilmente deducible que 1 cuando n . Notar que  = G / k.
Así, la Productividad que se define como el número de tareas (instrucciones) producidas por
unidad de tiempo es:  = N / t. Sustituyendo la expresión del tiempo de ejecución del
segmentado, nos queda:
Nótese que la productividad, entonces depende de la eficiencia y que la Productividad máxima
 = f.
2.3
CLASIFICACION DE LOS PROCESADORES ENCAUZADOS.
Existen varios criterios de clasificación:
A) Por Niveles de procesamiento (Händler):
 Cauce de Instrucciones.
 Ejemplo del DLX
Página 27
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
 Cauce Aritmético.
 Ejemplo del sumador de PF
 Encauzamiento de Procesadores.
 No es práctico.
B) Dependiendo de las configuraciones y estrategias de control:
 Unifunción – Multifunción
 Estático – Dinámico
 Escalares – Vectoriales
2.4
EL PROCESADOR SEGMENTADO DLX
En este curso, presentaremos el procesador segmentado DLX como caso de estudio
idóneo para la segmentación lineal. El DLX es un modelo didáctico propuesto por Hennessy y
Patterson en [Hen90] para el estudio de arquitectura de computadoras desde un enfoque
cuantitativo. Su nombre deriva del promedio (expresado en números romanos) de los números
de modelo de diferentes arquitecturas actuales que inspiraron su diseño. Según los autores, debe
pronunciarse DéLuX.
El DLX es un procesador RISC de 32 bits, segmentado en 5 etapas. Es una máquina de cargaalmacenamiento, es decir que sólo estas dos instrucciones acceden a memoria y todas las de
cálculo se efectuan estre registros del procesador. La etapas del DLX son las siguientes:
BUS o IF
Etapa de búsqueda o fetch de la intrucción e incremento del pc
DL o ID
Decodificación/Carga de operandos (registros) en ALU.
ALU o EX
Ejecución de operaciones y cálculo de direcciones efectivas de
datos en memoria.
MEM
Accesso a memoria para lectura (M R) o para escritura
(RM).
ESC o WB
Escritura de resultados en los registros.
A continuación se presenta una pequeña comparación entre las Arquitecturas RISC/CISC con el objetivo
de facilitar al lector la comprensión del funcionamiento del DLX que se expondrá luego en este
documento.
Página 28
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
RISC
CISC
Pocos formatos de instrucciones y
sencillos permiten decodificador rápido
y control cableado.
Muchos formatos muy complejos que
normalmente requieren unidad de control
microprogramada.
Las operaciones de cálculo son registroregistro. Instrucciones específicas de
carga y almacenamiento.
Las operaciones permiten operandos en
memoria.
Usan la mínima cantidad de modos de
direccionamiento.
Buscan permitir la máxima cantidad de
modos de direccionamiento.
Programas largos pero sencillos.
Programas cortos pero complejos.
Más fácil de segmentar por su sencillez.
Más difícil de segmentar y controlar.
Mayor rapidez de ejecución.
Ejecución más lenta (complejidad + UC
Prog)
CONJUNTO DE INSTRUCCIONES DEL DLX
Aunque el repertorio provisto por Hennesy-Patterson es bastante extenso, nos
limitaremos a un conjunto mínimo de Macro-instrucciones que caracterizan suficientemente el
procesador para nuestro estudio:
Cálculo
OP R1, R2, R3
; R1 = R2 OP R3
Acceso a
Memoria
LOAD R1, d(R2)
; R1 = M( R2 + d )
STORE d(R2), R1
; M( R2 + d ) = R1
BRx R1, d
; If ( R1 cond 0) then PC = PC +
d
Saltos
Nota: x puede ser:
E
( cond es = )
LT ( cond es < )
GT ( cond es > )
NE ( cond es # )
LE ( cond es <= )
GE ( cond es >= )
Nótese que la instrucción OP es genérica acá por razones de simplicidad, sin embargo OP puede
ser cualquier operación binaria soportada por DLX, por ejemplo: ADD, SUB, AND, OR, etc.
A partir de esta definición de instrucciones, requerimos una arquitectura básica para el DLX
capaz de ejecutar las operaciones que ejecuten las instrucciones. Posteriormente, mejoraremos
esta arquitectura básica a fin de resolver ciertos problemas de la segmentación (riesgos
estructurales)
Página 29
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Rd Write
mdr
BR
DataBus
M
ir
Rf1 R
Rf2 R
mar
4
A
B
A
B
@Bus
pc
ALU
buff
Figura 2.4. Arquitectura básica del DLX
2.5
DIFICULTADES DE LA SEGMENTACION
Dado el alto rendimiento conseguido en una maquina segmentada, parece que cuanto mayor sea
k, mejor rendimiento obtenemos, sin embargo, la verdad es que la segmentación no es tan simple.
Existen situaciones en las que aparecen riesgos por dependencias que limitan la eficiencia del cauce.
Existen tres posibles casos: Riesgos por dependencias de recursos de las etapas, dependencias de datos
y dependencias de control debido a las instrucciones de saltos, según expondremos a continuación:
 Riesgos estructurales: Son conflictos o colisiones en un recurso de ejecución cuando
dos etapas diferentes intentan usarlo simultáneamente. Recordemos que cada etapa debe
tener hardware independiente para realizar su tarea, porque de lo contrario tendríamos
situaciones de competencia (race conditions), que si no se resuelven parquearían el
cauce. Para que un segmentado sea funcional estos riesgos deben resolverse desde el
mismo vuelven a nivel de diseño.
 Dependencias de datos: Surgen cuando el solapamiento de instrucciones pone en
riesgo la secuencia lógica resultados en un programa, por ejemplo, una instrucción Ij
posterior a Ii no puede continuar porque uno de sus operandos –que era resultado de Ii
no ha sido actualizado –
Página 30
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
 Dependencias de control: surgen de la segmentación de los saltos que cambian el valor
el PC.
Además, existe el problema de tratamiento de Excepciones (interrupciones síncronas) debido
a la existencia de múltiples instrucciones en ejecución de forma simultánea. Los riesgos en la
segmentación pueden hacer necesario detener el cauce. La diferencia principal entre
detenciones en una maquina segmentada y en una no segmentada se presenta porque hay
múltiples instrucciones ejecutándose a la vez. Una detención, en una maquina segmentada,
requiere con frecuencia que prosigan algunas instrucciones, mientras se retardan otras.
Normalmente, cuando una instrucción esta detenida, todas las instrucciones posteriores a esa
instrucción también se detienen. Las instrucciones anteriores a la instrucción detenida pueden
continuar, pero no se buscan nuevas instrucciones durante la detención. Una detención hace
que el rendimiento de la segmentación se degrade con relación al rendimiento ideal.
2.6
DEPENDENCIAS ESTRUCTURALES
Cuando se segmenta una máquina, la ejecución solapada de instrucciones requiere que
cada etapa sea especializada en una subtarea de la ejecución y cuente con recursos
independientes asociados a esa etapa, de lo contrario, el acceso simultáneo a un recurso puede
crear situaciones de competencia o race conditions durante la ejecución que no pueden
resolverse postergando el acceso, pues todas las etapas deben proceder al unísono.
La única forma de evitar los riesgos estructurales consiste en dirimir la competencia desde el
diseño mismo de la máquina, definiendo qué etapa tendrá la supremacía de cada recurso y
duplicando recursos si es necesario. Un segmentado sin riesgos estructurales resueltos no es
una máquina práctica, pues probablemente nunca logre funcionar.
Aunque muchos riesgos estructurales de la segmentación pueden detectarse a proiri por simple
inspección, –como en el caso del acceso a memoria en BUS y MEM, o el incremento del PC en
BUS y cálculo en ALU– para detectar y corregir todas las dependencias estructurales en forma
detallada, recurrimos a la Tabla de Reserva. La tabla de reserva es una herramienta útil para
analizar los recursos ocupados por cada etapa de la segmentación por lo cual se pueden
identificar fácilmente los riesgos y tomar las medidas de diseño para solventarlos.
2.6.1
TABLA DE RESERVA DEL DLX
La Tabla de Reservas es un instrumento muy útil en la detección y solución de riesgos
estructurales. En ésta se mapean las etapas del cauce en las columnas de la matriz contra las
instrucciones del segmentado que ocupan las filas. En cada celda en la intersección aparecen
tanto las acciones que debe ejecutar el procesador en cada la etapa de acuerdo a la instrucción
como los recursos que trata de ocupar la misma.
Instrucción
BUS
D/L
ALU
Página 31
MEM
ESC
Arquitectura de Máquinas Computadoras III
rd = rf1 op
rf2
OP
rd =
M(rf1+d)
LOAD
M(rf1+d) =
rf2
STORE
if (cond)
pc = pc + d
BRx
2.6.2
Paralelismo y Arquitecturas Avanzadas
mar = pc
mdr =
M(mar)
ir = mdr
pc = pc + 4
decodificar
A = rf1
buff = A op
B = rf2
B
mar = pc
mdr =
M(mar)
ir = mdr
pc = pc + 4
decodificar
A = rf1
B=d
mar = A + B
mar = pc
mdr =
M(mar)
ir = mdr
pc = pc + 4
decodificar
A = rf1
B=d
mdr = rf2
mar = A + B
mar = pc
mdr =
M(mar)
ir = mdr
pc = pc + 4
decodificar buff = A + B
A = pc
cond =
B=d
(A’ cmp
A’ = rf1
0)
-
rd = buff
mdr =
M(mar)
rd = mdr
M(mar) =
mdr
-
if (cond)
pc = buff
-
RIESGOS ESTRUCTURALES EN EL DLX
1. Sistema de Memoria: Probablemente el impacto más grande de la segmentación sobre los
recursos de la máquina esté en el sistema de memoria. Aunque el tiempo de acceso no haya
cambiado, el ancho de banda de la máquina debe incrementarse puesto que hay que
proporcionar dos accesos a memoria por cada ciclo de reloj: uno para instrucciones y el otro
para datos. En los RISC esto se resuelve implementando un sistema con dos caches, una
para datos y la otra para instrucciones.
2. Recursos de cálculo: Notamos 3 posibles riesgos en los órganos de cálculo del DLX :
 La etapa BUS requiere calcular el incremento del PC en 4 para lo cual solicitaría los
servicios de la ALU y a su vez, la etapa ALU requiere aplicar A OP B, para lo cual
solicita los servicios de la ALU.
 Por otro lado la instrucción BRx requiere comparar rf1 con 0 en la etapa ALU, lo cual
genera un conflicto incluso internamente dentro de la misma etapa (usar ALU para
ambas operaciones de forma secuencial sería inadmisible porque incrementaría la
duración del ciclo de máquina.
 Finalmente, al BR se solicitan dos lecturas y una escritura simultáneamente.
Página 32
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Estos riesgos se solucionan:
 Se debe agregar un sumador a la etapa BUS para incrementar PC.
 Además de la ALU, en la etapa ALU se debe agregar un Comparador: cond = (A’ cmp
0)
 Se debe diseñar el BR para permitir dos lecturas al inicio del período y una escritura al
final del mismo.
3. Latches: Los latches, por regla general, deben leerse al principio del período y escribirse al
final de éste –garantizando la función de retención entre etapas– con lo cual los datos sólo
deben permanecer en estos durante un período. Por otro lado, sólo una etapa puede escribir
en cada uno de ellos, pues de otro modo podríamos tener competencia o colisión. En el
DLX, es necesario revisar las instrucciones para determinar cuándo aparecen dependencias
estructurales de uso de latches. Podemos establecer tres criterios para determinar y solventar
tales dependencias:
 Si se escribe en un latch en la etapa e y se lee hasta en la e+2 o posterior, se corre el
riesgo de perder el valor original. Esto ocurre en OP con buff y en STORE con mdr.
En este caso hay que duplicar latches para solucionar la dependencia.
 No se permite a dos etapas diferentes escribir en el mismo latch, se corre el riesgo
de provocar una colisión en el acceso al latch cuyo desenlace sería impredecible
(pues se deja al hardware definir cuál dato se escribirá de los dos ). Para resolver
esto, hay que usar diferentes latches como destino de escritura en cada etapa. El
único caso especial es el PC que puede escribirse en la etapa BUS y en MEM, sin
embargo aquí la competencia está disuelta por la precedencia del salto sobre la
secuencia y por tanto, en este caso, los posibles valores se multiplexan dejando como
trabajo a la unidad de control establecer cuál de ellos se escribe en PC.
 Las lecturas múltiples a un mismo latch por diferentes etapas no generan
dependencias ni tampoco las escrituras al mismo latch por la misma etapa de
diferentes instrucciones.
4. Información de la Instrucción en ejecución en cada etapa: El segmentado requiere saber
en cada momento qué instrucción se está ejecutando en cada etapa para poder genera las
señales de control, por tanto el IR debe multiplicarse a fin de propagar la instrucción a lo
largo del cauce. En el DLX, necesitamos, además del IR que se escribe en la etapa BUS,
réplicas IR2 en la etapa D/L, IR3 en la etapa ALU e IR4 en la etapa MEM.
Tabla 2.1. Resumen de Riesgos estructurales con sus soluciones.
Tipo de recurso
Riesgos
Página 33
Solución
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Sistema de Memoria
Acceso a Memoria en BUS y MEM
Usar dos caches: una de instrucciones iCache en la
etapa BUS y otra de datos dCache en la etapa MEM
Recursos de Cálculo
Conflicto uso ALU: BUS para incrementar
PC, ALU para operar A y B y ALU para
comparar.
Usar un sumador en BUS (PC = PC+4)
usar una ALU en ALU (ALUout = A OP B)
usar un comparador en ALU (cond = A’ cmp 0)
Latches
Sobreescritura de latches
Colisión acceso a escritura simultánea
Duplicar latches.
El PC es caso especial: se multiplexa.
Instrucción en etapa
Perder la información de qué instrucción
se esta ejecutando en cada etapa.
Crear réplicas del IR en cada etapa excepto ESC
para propagar la Instrucción junto a sus datos.
2.6.3
TABLA DE RESERVA CON DEPENDENCIAS ESTRUCTURALES RESUELTAS
Instrucción
BUS
rd = rf1 op rf2
ir = Mi(pc)
pc = pc + 4
decodificar
A = rf1
B = rf2
ir2 = ir
mar = A op B
ir3 = ir2
mdrin = mar
ir4 = ir3
rd = mdrin
ir = Mi(pc)
pc = pc + 4
decodificar
A = rf1
B=d
ir2 = ir
mar = A + B
ir3 = ir2
mdrin = Md(mar)
ir4 = ir3
rd = mdrin
ir = Mi(pc)
pc = pc + 4
decodificar
A = rf1
B=d
mdr = rf2
ir2 = ir
mar = A + B
mdrout = mdr
ir3 = ir2
M(mar) = mdrout
ir4 = ir3
-
ir = Mi(pc)
pc = pc + 4
decodificar
A = pc
B=d
A’ = rf1
ir2 = ir
mar = A + B
cond =
(A’ cmp 0)
ir3 = ir2
OP
rd = M(rf1+d)
LOAD
M(rf1+d) = rf2
STORE
if (cond)
pc = pc + d
BRx
D/L
ALU
MEM
if (cond)
pc = mar
ir4 = ir3
ESC
-
Obviamente, estas modificaciones requieren rediseñar la estructura del Procesador para reflejar
todos estos cambios y poder detectar los requerimientos de control. Se denomina camino de
datos o DataPath al diagrama de la estructura del procesador, diseñado de forma tal que muestre
de forma clara la trayectoria que deben seguir los datos dentro del procesador.
Página 34
Arquitectura de Máquinas Computadoras III
2.6.4
Paralelismo y Arquitecturas Avanzadas
DATAPATH DEL DLX
DLX Datapath - Dependencias estructurales resueltas
Sistema de Memoria
Señales de Control
Reloj
R/W
BUS
@Inst
ICache:R/W
PC
iCache

4
Reloj
Inst
IR
(offset d)
D/L
BR
Rf1 R
Reloj
Reloj
Reloj
A'
BR:@Rf1(CO, R1), Read
BR:@Rf2(CO, R2), Read
MuxA(CO)
MuxB(CO)
Rf2 R
A
B
MDR
Reloj
IR2
ALU
0
ALUsel(CO)
ALU
Comp
Reloj
Reloj
Cond
Reloj
Reloj
MAR
MDROUT
IR3
R/W
MEM
@datos
dCache
dCache:R/W(CO)
datos_out
datos_in
Reloj
Reloj
MDRIN
IR4
ESC
Rd Write
BR:@Rd(CO, Rd|R2)
BR
Figura 2.5. Datapath del DLX con dependencias estructurales resueltas
Página 35
Arquitectura de Máquinas Computadoras III
2.7
Paralelismo y Arquitecturas Avanzadas
DEPENDENCIAS DE DATOS
Las lecturas y escrituras de los datos deben ejecutarse en el orden que establece la
secuencia lógica del programa. La segmentación permite iniciar la ejecución de instrucciones
posteriores antes que se completen las anteriores, con lo cual se corre el riesgo de leer o escribir
datos en un orden incorrecto si una instrucción j opera sobre los mismos registros que una
instrucción anterior i. Un buen diseño de procesador segmentado no debe permitir la ejecución
de estas instrucciones posteriores hasta que se pueda garantizar la coherencia de los datos.
Veamos un
ejemplo:
R1 se escribe aquí
Esc
(i) OP R1, R2, R3
D/L
(j) OP R5, R1, R7
Necesito el valor de R1 aquí
En este caso la instrucción j requerirá en la etapa D/L un dato que no será actualizado hasta tres
ciclos después. Si el programa continúa, los resultados no serían los esperados, por tanto el
encauzado deberá detener todas las etapas anteriores a D/L hasta que R1 se haya actualizado.
Estas detenciones del cauce, denominadas latencias, merman la eficiencia porque en estos
ciclos no se producen instrucciones. Las dependencias de datos deben tratarse tanto para evitar
resultados incoherentes como para minimizar las latencias que provocan pérdidas en el
desempeño del segmentado.
2.7.1
TIPOS DE DEPENDENCIAS DE DATOS
Formalmente, si llamamos dominio D a los operandos (lecturas) de una instrucción y recorrido
R a su resultado (escritura), podemos decir que existe dependencia de datos entre dos instrucciones
cuando la intersección ya sea del dominio o recorrido de la una de ellas con el dominio o recorrido de
la otra es diferente del conjunto vacío. Según esta definición podemos diferenciar cuatro tipos de
dependencias de datos posibles:
D(i)  D(j)
D(i)  R(j)
R(i)  D(j)
R(i)  R(j)




( simplificadamente
( simplificadamente
( simplificadamente
( simplificadamente
D-D o RAR)
D-R o WAR)
R-D o RAW)
R-R o WAW)
D-D: La instrucción j posterior trata de leer un dato antes que la instrucción i anterior lo haya
hecho. Desde el punto de vista de datos no representa problemas, sin embargo presupone
requerimientos estructurales (como varios buses o puestos de lectura en el banco de registro).
Esta dependencia suele llamarse RAR, como siglas de Read After Read.
Página 36
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
D-R: J trata de escribir un registro antes que una instrucción i anterior lo haya leído, violación
al orden Write After Read (WAR). Esta dependencia no ocurre en cauces lineales con ejecución
en orden, sin embargo puede ocurrir en cauces multiciclo cuando la ejecución ocurre en
desorden o en segmentados con ejecución dinámica.
R-D: Problema típico de los segmentados. Consiste cuando la instrucción j trata de leer datos
que no han sido escritos por la instrucción i anterior a ella, tratando de romper el orden Read
after Write o RAW. El ejemplo mostrado de dependencia con R1, es un caso típico de R-D :
R(i)  D(j)  , pues R(i)  D(j) = {R1}
R-R: No puede ocurrir en el DLX dado que sólo se escribe en una única etapa, pero básicamente
puede aparecer en cualquier segmentado donde se escriba en diferentes etapas ( Write After
Write o WAW).
Dados los alcances del curso, sólo enfocaremos las dependencias R-D por ser las más comunes
y las únicas que se presentan en nuestro modelo. Lectores interesados en le tema pueden
encontrar más material en las obras de Henessy y Patterson.
2.7.2
TRATANDO LAS DEPENDENCIAS DE DATOS EN EL DLX
Hay dos formas de tratar las dependencias de datos en el DLX: a nivel de mejora de diseño para
minimizar la penalización por latencias y a nivel de detención para evitar incoherencias. En el
DLX hay un máximo de 4 posibles latencias por dependencias.
Valor actualizado de R1
disponible aquí
R1 se escribe aquí
ALU
Esc
D/L
1ra Latencia
2da Latencia
3ra Latencia
4ta Latencia
Necesito el
valor de R1
aquí
2.7.2.1
MEJORAS DE DISEÑO:
 Garantizar que las lecturas ocurren luego de las escrituras del ciclo anterior (Esto se
garantiza estructuralmente en el DLX). Elimina la posible 4ª latencia.
 Usar la técnica de forwarding, bypassing o cortocircuito para adelantar el dato actual a
donde se requiere sin esperar a que esté escrito en el Banco de registros.
Página 37
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Por ejemplo, Nótese que el valor de R1 en el ejemplo está disponible en la salida de la ALU de la
instrucción i, por tanto, ésta puede cortocircuitar con su entrada, permitiendo el manejo correcto del dato
mediante la selección de MuxA y MuxB en la instrucción j, eliminando así la 1ª latencia. Estos sólo
puede lograrse mediante un riguroso control pues nótese que aparentemente el valor de R1 se solicita al
inicio del ciclo y la salida de la ALU está disponible hasta el final del mismo, sin embargo recuérdese
que los registros A y B se escriben al final del ciclo también, por tantoel valor de la salida de la ALU
puede estar disponible con suficiente tiempo para escribir en A o B. esto es posible pues la instrucción
en la etapa D/L se tiene en el IR y la instrucción en ALU en el IR2 por tanto el control puede hacer el
cortocircuito inequívocamente.
También se pueden adelantar las salidas del MuxMDRin y del MDRin hacia MuxA y MuxB
a fin de eliminar las latencias 2 y 3 con la instrucción OP. Veamos en el ejemplo a continuación
cómo se darían estos cortocircuitos o adelantamientos:
Valor actualizado de R1
disponible aquí
R1 se escribe aquí
ALU
Mem
D/L
Esc
Cortocircuitos que adelantan
el valor de R1 eliminando las
posibles latencias para
operaciones como OP
ALU
Valor actualizado de R1
se ocupa aquí
Los cortocircuitos aplicados son:
OP(i) – OP(i+1) :
entrada
S(ALU)  E(A)|E(B)
Es decir, que la salida de la ALU se lleva a la
del registro A o del registro B (entrad de la ALU)
OP(i) - OP(i+2) :
OP(i) - OP(i+3) :
S(MAR)  E(A)|E(B)
En este caso, el valor de R1 ya está más próximo, se
lleva de la etapa MEM al inicio de la etapa ALU.
S(MDRin)  E(A)|E(B) R1 ya está en la etapa Esc pero no se escribirá hasta el
próximo ciclo por cuanto hay que adelantar la salida
de MDRin a la entrada de la ALU.
No todos los casos de dependencias de datos en el DLX se pueden resolver con cortocircuitos,
la dependencia LOAD(i) – OP(i+1), por ejemplo, no pueden tratarse con cortocircuitos pues no
hay suficiente tiempo para lograr Salida(MEM)  Entrada(ALU). Hay que buscar otras
técnicas en estos casos.
Valor actualizado
disponible aquí
ALU
MEM
D/L
Valor actualizado
requerido aquí
Página 38
Esc
Arquitectura de Máquinas Computadoras III
2.7.2.2
Paralelismo y Arquitecturas Avanzadas
INTERLOCK POR HARDWARE
Para los casos de implementación de DLX en que no se realizaron mejoras de diseño, y para los casos
en que las mejoras no permiten eliminar todas las latencias, se deben parar las inicializaciones del cauce
y esperar hasta que el resultado esté disponible.
Esto puede hacerse por hardware. La unidad de control puede disponer de un órgano de detección de
dependencias de datos que genere una señal cuando la nueva instrucción cargada en IR tiene
dependencia con alguna de las instrucciones en ejecución (comparación de los Rf en IR con los Rd en
IR2 .. IR4). Cuando se dé el caso de dependencia, entonces deberá congelarse la etapa BUS (no cargar
PC+4, pero sí si es destino de salto) e introducir NOP por hardware en IR2 a fin de insertar una burbuja
o ranura de retardo (delay slot) que permita esperar hasta que el resultado esté disponible en el banco de
registros para continuar con la instrucción postergada en IR.
2.7.2.3
TRATAMIENTO POR SOFTWARE
 Finalmente, el compilador o el programador a bajo nivel puede introducir ciclos sin
ejecución (de relleno) mediante la instrucción NOP.
 Otro método, propio para compiladores y más eficiente, consiste en reordenar las
instrucciones a fin de evitar las dependencias.
Página 39
Arquitectura de Máquinas Computadoras III
2.7.3
Paralelismo y Arquitecturas Avanzadas
RESUMEN DE DEPENDENCIAS DE DATOS EN EL DLX
Instrucciones
Involucradas
OP - OP
OP - LOAD
OP – STORE
CASO 1:
OP r1, r2, r3
STORE r5, d(r1)
OP – STORE
CASO 2:
OP r1, r2, r3
STORE r1, d(r4)
LOAD - OP
LOAD - LOAD
LOAD – STORE
CASO 1:
LOAD r1, d(r2)
STORE r5, d(r1)
LOAD – STORE
CASO 2:
Escenario
Tratamiento
OP(i) – OP(i+1)
OP(i) – OP(i+2)
OP(i) – OP(i+3)
OP(i) – LOAD(i+1)
OP(i) – LOAD (i+2)
OP(i) – LOAD (i+3)
OP(i) – STORE(i+1)
S(ALU)  E(A)|E(B)
S(MAR)  E(A)|E(B)
S(MDRin)  E(A)|E(B)
S(ALU)  E(A)
S(MAR)  E(A)
S(MDRin)  E(A)
S(ALU)  E(A)
OP(i)
(i+2)
–
STORE S(MAR)  E(A)
OP(i)
(i+3)
–
STORE S(MDRin)  E(A)
OP(i) – STORE(i+1) S(ALU)  E(MDR)
OP(i)
(i+2)
–
STORE S(MAR)  E(MDR)
OP(i)
(i+3)
–
STORE S(MDRin)  E(MDR)
LOAD(i) – OP(i+1)
Parar el cauce:
IR=OP y IR2=LOAD y IR2(Rd)= (IR(Rf1) | IR
(Rf2))
LOAD(i) – OP(i+2)
S(Md)  E(A)|E(B)
LOAD(i) – OP(i+3)
S(MDRin)  E(A)|E(B)
LOAD(i)
– Parar el cauce:
LOAD(i+1)
IR=LOAD y IR2=LOAD y IR2(Rd)=IR(Rf1)
LOAD(i) – LOAD S(Md)  E(A)
(i+2)
LOAD(i) – LOAD S(MDRin)  E(A)
(i+3)
LOAD(i)
– Parar el cauce:
STORE(i+1)
IR=STORE y IR2=LOAD y IR2(Rd)=IR(Rf1)
LOAD(i)
– S(Md)  E(A)
STORE(i+2)
LOAD(i)
– S(MDRin)  E(A)
STORE(i+3)
LOAD(i)
– S(Md)  E(MDRout)
STORE(i+1)
Página 40
Arquitectura de Máquinas Computadoras III
OP r1, r2, r3
STORE r1, d(r4)
STORE
Cualquiera
OP – BRx
LOAD – BRx
BRx - Cualquiera
LOAD(i)
STORE(i+2)
LOAD(i)
STORE(i+3)
- NO HAY
BRx va a cambiar
Paralelismo y Arquitecturas Avanzadas
– S(MDRin)  E(MDRout)
– S(MDRin)  E(mdr)
(Con la solución de riesgos de control)
NO HAY
Página 41
Arquitectura de Máquinas Computadoras III
2.7.4
Paralelismo y Arquitecturas Avanzadas
DATAPATH DEL DLX CON DEPENDENCIAS DE DATOS RESUELTAS
DLX Datapath - Dependencias de datos resueltas
Sistema de Memoria
Señales de Control
Reloj
R/W
BUS
Ld_PC
@Inst
ICache:R/W
PC
iCache

Ld_IR
4
Reloj
Inst
IR
D/L
(offset d)
BR
(a, b, c)
Rf1 R
Rf2 R
(a, b, c)
NOP
(a, b, c)
Reloj
Reloj
A'
A
Reloj
B
MDR
Reloj
BR:@Rf1(IR), Read
BR:@Rf2(IR), Read
MuxA'(IR, (IR3, IR3, IR4))
MuxA (IR, (IR3, IR3, IR4))
MuxB (IR, (IR3, IR3, IR4))
MuxMDR(IR, (IR3, IR3, IR4))
Ld_PC(IR, IR2)
Ld_IR(IR, IR2)
MuxIR2(IR, IR2)
IR2
ALU
0
ALUsel(IR2)
Comp(IR2)
MuxMDRout(IR2, IR3)
(b)
Comp
ALU
(a)
Reloj
Cond
Reloj
Reloj
MAR
MDROUT
Reloj
IR3
MEM
R/W
@datos
dCache
dCache:R/W(IR3)
MuxPC(IR3,Cond)
MuxMDRin(IR3)
datos_out
datos_in
Reloj
(b)
MDRIN
Reloj
IR4
ESC
(c)
Rd Write
BR:@Rd(IR4), Write
BR
Nota: Los cambios respecto al DataPath con Dep. Estructurales resueltas se muestran en azul fuerte
Figura 2.6. Datapath del DLX con dependencias de datos resueltas
Página 42
Arquitectura de Máquinas Computadoras III
2.8
Paralelismo y Arquitecturas Avanzadas
DEPENDENCIAS DE CONTROL
Las dependencias de control en los segmentados son introducidas por las instrucciones
de salto, BRx en el caso específico del DLX. Nótese que la instrucción de salto, actualiza el
valor del PC hasta en la etapa MEM, por tanto las instrucciones cargadas en el cauce deben
eliminarse del mismo pues su ejecución sería inválida si la condición resultase verdadera y el
salto se hiciera efectivo. El gran problema consiste en que estas instrucciones podrían cambiar
el estado del procesador generando resultados inesperados, por tanto, el procesador debería
bloquear la carga de nuevas instrucciones hasta que se actualice el valor del PC correctamente,
lo cual genera 3 latencias por cada instrucción de salto:
if (cond) ir = Mi(pc)
pc = pc + pc = pc + 4
d
decodificar
A = pc
B=d
A’ = rf1
mar = A + B if (cond)
cond =
pc = mar
(A’ cmp
0)
-
BRx
PC
BRx
i
MEM
k
Consideremos que en un programa típico, los saltos representan entre un 15% y un 30% de las
instrucciones, por tanto, las dependencias de control, deben considerarse muy seriamente
porque degradan el desempeño del segmentado de forma significativa.
Ejemplo: Supongamos que en un programa, el 20% de instrucciones son BRx e idealicemos
diciendo que no hay paradas por dependencias de datos, entonces nuestro ciclo de máquina real,
viene a ser:
r = 0.2 ( + 3) + 0.8 1.6 
Nota: El ciclo de máquina se incrementa en un poco más del 50%.
2.8.1
ADELANTANDO LA DEFINICION DEL SALTO
Mejorando el diseño, podemos adelantar el salto a la etapa ALU. Esto no implica ningún
requerimiento especial y elimina una latencia.
Página 43
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
PC
BRx
ALU
i
Según
el
anterior, el ciclo
real, con el adelantamiento es:
ejemplo
máquina
k
de
r = 0.2(  + 2) + 0.8 1.4 
if (cond) ir = Mi(pc)
pc = pc + pc = pc + 4
d
decodificar
A = pc
B=d
A’ = rf1
mar = A + B
if = (A’ cmp 0)
pc = A + B
-
-
BRx
Sin embargo, todavía es una penalización grande. ¿Podemos mejorar? – ¿Qué tal si tratamos
de pasar el salto a la etapa D/L, para tener sólo una latencia?
PC
BRx
i
D/L
k
Este adelantamiento implica ciertos requerimientos estructurales:
 Se necesita un sumador adicional en la etapa D/L.
 Debe pasarse el comparador de la etapa ALU a la etapa D/L.
 Como D/L es la etapa más rápida, lo más seguro es que no se requiera agrandar .
En este caso el ciclo real de máquina debido a la penalización por saltos viene a ser:
r = 0.2 ( + ) + 0.8 1.2 
if (cond) ir = Mi(pc)
pc = pc + pc = pc + 4
d
decodificar
if = (Rf1 cmp 0)
pc = pc + d
-
-
-
BRx
El salto no puede adelantarse más debido a que Rf1 debe leerse del BR. Las mejoras obtenidas
son equivalentes a las obtenidas con las dependencias de datos. Como conclusión: No siempre
podemos evitar las latencias debido a cierta combinación de instrucciones y éstas implicarán
una merma en el desempeño del DLX.
Página 44
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Los adelantamientos, modifican la estructura de la instrucción BRx y con ello, las posibles
dependencias de datos entre ésta y el resto de instrucciones.
Por otro lado, es necesario que el procesador provea un mecanismo de parada por hardware
para tratar la latencia, o en su defecto, el programador o el compilador deberán introducir un
NOP explícitamente después de cada BRx. El segmentado puede tratar el interbloqueo a nivel
de unidad de control introduciendo NOP en la entrada del IR cuando se ha decodificado un
BRx, de forma tal que
en el próximo
PC
ciclo, IR2 = BRx e
IR=NOP.
BRx
D/L
i
i+1
k
If (Rf1 cmp 0) : PC = @Salto
else: PC = PC + 4
@Salto
R/W
@Inst
iCache
PC

NOP
4
Reloj
Inst
IR
Figura 2.7. Implementación del interbloqueo por hardware en el DLX
2.8.2
DEPENDENCIAS DE DATOS EN BRx TRAS ADELANTAMIENTO A D/L
Como anotamos anteriormente, el adelantamiento de la instrucción BRx provoca nuevas
dependencias, que no fueron tratadas en el apartado anterior. En la tabla a continuación se
resumen:
Instrucciones
Involucradas
OP - BRx
LOAD - BRx
Escenario
Tratamiento
S(ALU)  E(Cmp) Debe estudiarse si
queda tiempo para que se dé, caso
contrario, parar.
OP(i) – BRx (i+2)
S(MAR)  E(Cmp)
OP(i) – BRx (i+3)
S(MDRin)  E(Cmp)
LOAD(i) – BRx(i+1) Parar el cauce:
IR=BRx y IR2=LOAD y IR2(Rd)= IR(Rf1)
OP(i) – BRx(i+1)
Página 45
Arquitectura de Máquinas Computadoras III
2.8.3
Paralelismo y Arquitecturas Avanzadas
LOAD(i)
(i+2)
–
LOAD(i)
(i+3)
–
BRx S(Md)  E(Cmp) Debe estudiarse si
queda tiempo para que se dé, caso
contrario, parar.
BRx S(MDRin)  E(Cmp)
TRATAMIENTO DE LAS LATENCIAS DE CONTROL
Como no podemos eliminar una latencia debido a saltos, podemos implementar técnicas para
tratar de evitarlas en algunos casos. Existen tres técnicas empleadas:
 Salto retardado (método Software)
 Apuesta por una de las ramas (Software+Hardware)
 Apuesta por ambas ramas (BTB)
2.8.3.1
Salto retardado
Este método es aplicable en tiempo de compilación cuando la máquina no es capaz de bloquear
el cauce por hardware. Consiste en buscar instrucciones de relleno útiles que se ejecuten en
lugar del NOP obligado antes que el salto se haga efectivo. Es equivalente al reordenamiento
de código en caso de dependencias de datos.
Sin embargo, la elección de las instrucciones de relleno no es trivial pues requiere de un análisis
previo de las dependencias de datos entre instrucciones. La primera opción consiste en buscar
una instrucción anterior como relleno, esta no debe tener ninguna dependencia con las
siguientes del bloque. Si no se logra obtener una instrucción apropiada del bloque básico, se
puede emplear una del bloque de continuación o del de salto, siempre que cumplan ciertas
condiciones de independencia de datos y su ejecución no afecte la lógica del programa (por
ejemplo, que no escriba resultados a memoria y que el registro destino sea un registro temporal
donde no importe el valor actualizado por la instrucción).
En el caso de rellenar con una instrucción de continuación, si el salto no se hace efectivo, la
instrucción elegida es útil. En cambio si lo es, se ha garantizado que aunque la ejecución de la
instrucción de relleno no es útil, no perjudica los resultados. Esta estrategia se prefiere cuando
el salto es poco probable, por ejemplo en implementaciones de IF-ELSE. En caso de usarse
relleno desde el bloque de salto, la ejecución de la instrucción de retardo es útil si el salto es
efectivo. Esta elección es preferida cuando el salto es muy probable, como en estructuras de
bucles. Si no se detectan instrucciones de relleno válidas (cuya ejecución en caso de fallo no
sea perjudicial) debe rellenarse con NOPs.
Página 46
Arquitectura de Máquinas Computadoras III
Ejemplo:
…
1) MUL R1, R2, R9
2) ADD R7, R1, R9
3) DIV R7, R1, R9
4) SUB R4, R4, R6
5) BRx R4, d
Paralelismo y Arquitecturas Avanzadas
Bloque básico
(i)
Continuación
6) MUL R5, R13, R13
7) SUB R15, R7, R8
8) SUB R12, R5, R6
…
Salto
(i+1)
9) SUB R12, R7, R1
(k)
10) ADD R13, R12, R5
11) ADD R6, R5, R6
…
En este trecho de código, podemos emplear como relleno la instrucción 3 del bloque básico
pero no 1 o 4 porque tienen dependencias R-D ni 2 pues tiene dependencia R-R con 3 (No debe
tener ningún tipo de dependencia con las siguientes de su bloque). Por otro lado, del bloque
de continuación, no debe tener dependencias de ningún tipo con las instrucciones anteriores
de su bloque ni R-D con las del bloque de salto, por tanto solo es elegible 7 (6 tiene R-D con
10 y 11. 8 tiene con 6 y R-R con 7), Finalmente del bloque de salto, la instrucción no debe
tener dependencias con las anteriores de su bloque ni R-D con las del bloque de continuación,
por tanto sólo 9 es apropiada. (10 tiene R-D con 9 y 11 tiene R-D con 8)
2.8.3.2
Apuesta por una de las dos ramas
Esta técnica es una mejora al simple interlock por hardware mencionado anteriormente,
consiste en definir en el diseño del segmentado que se apueste por una de las dos ramas del
salto y permitir mediante control, evitar cambios en el estado del programa cuando la apuesta
es fallida (inhabilitar las escrituras o abortar la ejecución con NOPs). Esta técnica requiere de
soporte de software para el caso de apuesta por la rama de salto.
Si se apuesta por el bloque de continuación, la ejecución de la instrucción que sigue a un BRx
continúa hasta que el se actualiza PC, aquí la Unidad de Control puede saber si el salto fue
efectivo [IR2 = BRx y (Rf1 cmp 0 = verdadero)] y por tanto Bloquear la instrucción: IR = NOP
o dejarla que ejecute bloqueando las escrituras en MEM y BR. Si el salto no fue efectivo, no se
hace nada y no hay latencias.
Si se apuesta por el bloque de salto, el compilador inserta las instrucciones necesarias del bloque
de salto (1 en el DLX), en caso de fallo, se anula la ejecución (bloqueando las escrituras) o se
Página 47
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
aborta con NOP en IR. Nótese que la responsabilidad del relleno útil descansa sobre el
compilador o el programador en lenguaje de bajo nivel.
Con esta técnica se eliminan las latencias cuando hay aciertos. Una mejora a esta técnica es la
predicción del salto, que resulta muy conveniente por el carácter cíclico de los mismos. Se
requiere almacenar el comportamiento de los saltos para predecir si se toma el salto o no. Se
implementa en firmware y necesita pre-decodificación de las instrucciones de salto. Las
penalizaciones se reducen significativamente.
2.8.3.3
Apuesta por ambas ramas (BTB)
Esta última técnica también aprovecha el carácter repetitivo de los saltos. Se agrega al
procesador un Branch Target Buffer (BTB) o buffer de destino del salto que es una memoria
asociativa donde se almacenan las últimas direcciones de destino de salto y con un MUX se
selecciona la instrucción correcta (cargada de memoria= i+1, o cargada desde el BTB = k).
El procesador siempre procede por el bloque de continuación. Si el salto se toma, debe buscar
la dirección destino en el BTB. La primera vez, seguramente no estará guardada en el buffer y
se deberá anular la ejecución de la instrucción cargada i+1 mediante NOP en IR.
Si la condición de salto es verdadera y @salto está en el BTB, se selecciona la instrucción de
salto k en el MUX y el PC se carga con @salto + 4 para la próxima carga.
Página 48
Arquitectura de Máquinas Computadoras III
2.8.4
Paralelismo y Arquitecturas Avanzadas
DATAPATH DEL DLX CON LAS DEPENDENCIAS DE CONTROL RESUELTAS
DLX Datapath - Dependencias de datos resueltas
Sistema de Memoria
R/W
ICache:R/W
PC
iCache
BUS
PC + 4
Ld_PC
@Inst
Señales de Control
@Salto
Reloj
NOP

Ld_IR
4
Reloj
Inst
PC
0
IR
D/L

@salto
BR
(a, b, c)
d
@Salto
Rf1 R
(offset d)
Rf2 R
(a, b, c)
(a, b, c)
Comp
Reloj
Reloj
Cond
A
NOP
B
MDR
Reloj
BR:@Rf1(IR), Read
BR:@Rf2(IR), Read
Cmp(IR); @Salto(IR)
MuxCmp(IR, (IR3, IR3, IR4))
MuxA (IR, (IR3, IR3, IR4))
MuxB (IR, (IR3, IR3, IR4))
MuxMDR(IR, (IR3, IR3, IR4))
Ld_PC(IR, IR2)
Ld_IR(IR, IR2)
MuxIR(IR)
MuxIR2(IR, IR2)
IR2
ALU
ALUsel(IR2)
MuxMDRout(IR2, IR3)
(b)
ALU
(a)
Reloj
Reloj
MAR
MDROUT
Reloj
IR3
MEM
R/W
@datos
dCache
dCache:R/W(IR3)
MuxMDRin(IR3)
datos_out
datos_in
Reloj
Reloj
(b)
MDRIN
IR4
(c)
ESC
Rd Write
BR:@Rd(IR4), Write
BR
Nota: Los cambios respecto al DataPath con Dep. de Datos resueltas se muestran en azul fuerte
Figura 2.8. Datapath del DLX con las dependencias de control resueltas
Página 49
Arquitectura de Máquinas Computadoras III
2.9
Paralelismo y Arquitecturas Avanzadas
EXCEPCIONES
2.9.1
INTRODUCCION
Las interrupciones son mecanismos que permiten el desvío (o suspensión momentánea) del
flujo en ejecución debido a la necesidad de atención de algún evento. Estas pueden clasificarse en
asíncronas y síncronas.
 Asíncronas: ocurren en cualquier momento y no dependen del flujo actual de ejecución,
por ejemplo las solicitudes de atención de los dispositivos de entrada/salida.
 Síncronas: aparecen como efecto de situaciones excepcionales ocurridas durante la
ejecución de una instrucción, por lo cual algunos autores les llaman excepciones.
Ejemplo de excepciones son el fallo de bloque de caché, el overflow y la división por
cero.
Cuando ocurren las primeras, el procesador guarda el estado de la máquina (generalmente el
PC) y fuerza un trap en próximo ciclo a fin que la próxima instrucción que se carga es la primera
de la rutina del sistema que trata las interrupciones, de esta manera las instrucciones en el cauce
se terminan de ejecutar y no ocurren latencias de ningún tipo.
En el caso de las excepciones, el problema es que ocurren durante la ejecución de una
instrucción que puede abortarse debido a la excepción o debería recomenzarse después que la
rutina de tratamiento de interrupciones concluya.
2.9.2
EXCEPCIONES EN EL DLX
En el DLX, pueden aparecer excepciones en las etapas BUS, MEM (acceso a caché),
D/L (código de operación ilegal) y ALU (excepciones aritméticas). Las primeras deben ser
recomenzables en tanto las últimas por lo general abortan la ejecución de la instrucción o del
programa y la rutina de tratamiento del sistema o el sistema operativo se encargan de tratarlas.
Cuando ocurre una excepción en el DLX, éste debe:
 Forzar una instrucción de trap en la etapa BUS, en el siguiente ciclo. Esta instrucción
se encarga de invocar a la rutina de tratamiento de excepciones del sistema.
 Hasta que el trap sea efectivo, se deben inhibir todas las escrituras para la instrucción
que generó la excepción. y las instrucciones posteriores a ellas, evitando así que se
cambie el estado de la ejecución y se obtengan resultados erróneos.
 Una vez que el trap comienza a ejecutarse, el DLX debe guardar el valor del PC de la
instrucción que generó el fallo, para poder recomenzarla. En máquinas donde se
implementa el salto retardado, el valor del PC no puede determinarse de forma
secuencial y por tanto es necesario guardar réplicas del PC a lo largo de todo el cauce
para poder recomenzar la ejecución de las instrucciones.
Página 50
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Cuando la rutina de tratamiento de interrupciones se concluye, hay que recomenzar las
instrucciones que se estaban ejecutando en el momento de la excepción. Esto puede hacerse
reinicinado el PC con la dirección de la instrucción que generó la excepción y los PC’s a
continuación de ésta en caso de saltos.
Si un procesador puede inhibir toda la ejecución de las instrucciones siguientes a la causante de
la excepción, tratar la excepción y recomenzar la ejecución volviendo a cargar la instrucción
que causó el fallo, se dice que tiene tratamiento preciso de excepciones. Esto es deseable en
muchos procesadores.
Pero no siempre tenemos un panorama tan limpio, pues pueden surgir mayores complicaciones cuando
se presentan múltiples excepciones. El caso más complicado es cuando instrucciones posteriores
generan sus excepciones antes que las anteriores, de forma tal que tratarlas no es un caso tan trivial como
cuando hay una sola excepción en el cauce. Se aplican dos técnicas:
a) Tratar las excepciones en el orden de las instrucciones (vector de status de excepciones): El
procesador se auxilia de un vector de estatus que se arrastra con cada instrucción. Cuando
aparece una excepción, se inhiben las escrituras de esta instrucción y sus sucesores y el cauce
sigue avanzando, En el final de la etapa MEM, siempre se verifica el vector de status, y si hay
excepciones se tratan y se reinicia esa instrucción. Esto nos garantiza que las excepciones se
traten de forma precisa.
b) Tratar las excepciones en el orden de aparición, lo cual requiere detener no solo los sucesores
sino los antecesores que puedan cambiar el estado de la máquina. Una vez resuelta la excepción
se inicia en la instrucción más antigua que se detuvo.
Página 51
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
2.10 SEGMENTACION NO LINEAL
La segmentación lineal se caracteriza por un estricto orden de precedencia en la
ejecución de las subtareas del cauce, lo cual puede expresarse mediante un grafo de precedencia
lineal. La segmentación no lineal o general, es aquella que permite ciertas flexibilidades en el
orden y forma de ejecución de estas subtareas y se caracteriza por un grafo no-lineal.
out
in
T1
1
T3
2
T2
3
3
out
1
T4
in
T1
T2
T3
2
Grafo de Precedencia Lineal
T4
4
Grafo de Precedencia No lineal
Figura 2.9. Grafos de precedencia
En la segmentación lineal, representada por el primer gráfo, el flujo de datos o tareas pasa por todas y
cada una de las etapas en el orden de las mismas una sola vez. En la segmentación no lineal, dependiendo
de la función del cauce, las tareas pueden:






No pasar por todas las etapas.
Tener múltiples puntos de entrada y salida
Estar en posibilidad de pasar por (ocupar) varias etapas a la vez.
Tener caminos alternativos según se requiera en la ejecución.
Repetir el paso por una etapa de manera cíclica (procesadores multiciclo).
Repetir el paso por una etapa ocupada varios ciclos atrás (retroalimentación o feed back).
Nótese que la segmentación lineal está relacionada con cauces de instrucción y los no lineales o
generales, con cauces del tipo aritmético o de procesamiento de vectores. Los enlaces entre las etapas
del cauce nos permiten identificar si son lineales o no. El diagrama de bloques es un esquema
simplificado del cauce al cual se ha despojado de los detalles de acoplamiento (latch) y temporización.
En en las figuras 8 y 9 pueden apreciarse las diferencias entre los diagramas de bloque de un cauce
lineal y uno no lineal.
S1
S2
S3
S4
S5
Figura 2.10. Diagrama a bloques de un segmentado lineal.
S1
S2
S3
S4
S5
Figura 2.11. Diagrama a bloques de un segmentado no-lineal.
Los círculos con signos de conmutación al centro, son multiplexores. Estos permiten seleccionar la
entrada correcta a cada etapa en cada ciclo de reloj. Es obvio que dadas las posibilidades de feedback
Página 52
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
del cauce, pueden existir muchos caminos o trayectorias de cada tarea. Esto es particularmente cierto en
cauces con caminos alternativos o reconfigurables ya sea de manera estática o dinámica.
2.11 PROCESADORES MULTICICLO
Algunos procesadores implementan operaciones especiales como aritmética en punto
flotante o vectorial para mejorar las prestaciones de la máquina. Muchas de estas operaciones,
pueden emularse con rutinas de software pero su desempeño es muy pobre, por otro lado,
implementarlo en hardware ha requerido de procesadores auxiliares dedicados a este fin pues,
estas operaciones son intensivas y requieren mucho tiempo para completarse, por ejemplo, una
división en punto flotante requiere de 30 a 50 ciclos de máquina.
Para que tales operaciones sean implementables en un segmentado, se requeriría que las
instrucciones pudieran ocupar repetidamente la ALU hasta completar la operación y luego
continuar con la ejecución. A simple vista, esto nos causaría tremendas latencias, sin embargo,
dado que la multiplicidad involucra solo una etapa, se suele multiplicar la ALU en diversas
unidades, permitiendo a algunas tener una instrucción repitiéndose en esta etapa varios ciclos
hasta completarse mientras el proceso de ejecución continúa normalmente. A una máquina que
soporte tal dinámica de trabajo se le llama Procesador Multiciclo.
Una modificación del DLX para soporte a operaciones en punto flotante, deberá ser multiciclo.
El esquema de la figura 10 muestra el diagrama a bloques del DLX Multiciclo, con varias
unidades funcionales, básicamente ALUs especializadas en operaciones enteras y/o de punto
flotante.
ALU
E
MUL
E/PF
BUS
D/L
MEM
ESC
SUM
PF
DIV
E/PF
Figura 2.12. DLX multiciclo.
Con los procesadores Multiciclo hay que tener en cuenta que pueden aparecer riesgos R-D.
Con resultados de operaciones en punto flotante, también podrían aparecer riesgos de datos del
tipo R-R.
Para controlar el acceso a las etapas de la ALU, es necesario llevar un registro de su uso así
como de los registros involucrados en las instrucciones. Las diferentes unidades funcionales
de la ALU se controlan mediante un Scoreboard o marcador que tiene un bit de ocupado para
Página 53
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
cada etapa así como el registro destino de la operación. Esta técnica es clave para la detección
dinámica de dependencias de datos. Cuando se carga una nueva instrucción se debe comprobar
en el marcador que la unidad a utilizar no esté ocupada, caso contrario se inhibe emisión de la
instrucción en la etapa D/L. Para evitar los riesgos R-R, se debe llevar una secuencia de las
escrituras, permitiendo re-expedición interna en registros temporales e inhibiendo la escritura
de los resultados finales hasta que se garantice el orden en la etapa MEM.
2.12 PLANIFICACION DE RECURSOS
Las dependencias estructurales en los cauces generales consisten en la posibilidad de colisiones
por el intento de uso de una etapa por más de una tarea. Estas dependencias se atacan haciendo una
buena planificación de los recursos que evite las colisiones. A diferencia de la solución de dependencias
estructurales en los cauces lineales, los cauces generales no pueden evitar latencias.
A continuación explicaremos el procedimiento de planificación basado en secuenciamiento de trabajos
y prevención de colisiones. Esta planificación tiene dos objetivos: evitar inicialización de tareas que
generarán colisiones y definir una estrategia de secuenciamiento de trabajos que busque la utilización
óptima del cauce.
Iniciemos con un ejemplo. Usemos el cauce de la figura 9 y definamos su tabla de reserva. En los cauces
generales, necesitamos una tabla para cada función. Por simplificación sólo consideraremos cauces
monofunción en nuestro curso. La tabla de reserva se conforma por las etapas del cauce vs períodos de
tiempo o ciclos que requiere la función para completarse. Una marca en el cuadrado, en la intercepción
de Sj con Ti, muestra si la etapa Sj es ocupada por la función F en el ciclo Ti.
Sj \Ti
0
1
X
2
3
4
1
2
3
4
5
6
7
8
X
X
X
X
X
X
5
X
X
X
Figura 2.13. Tabla de reserva del cauce
Así vemos cómo la función F, ocupa en el primer ciclo (0) la etapa 1, pasa a la 2 en el segundo, se
mantiene en esa etapa en el tercero, pasa a la tercera, la cuarta, repite la cuarta, pasa a la quinta, en la
cual dependiendo de alguna condición, puede pasar a la segunda y luego terminar en la primera o repetir
la quinta y pasar a terminar en la primera.
En función de esta tabla, se pueden definir latencia como el número de ciclos de tiempo entre dos
iniciaciones. El fin del procedimiento de planificación por secuenciamiento de trabajos consiste en
elegir una estrategia de control que consiste en una secuencia de latencias, que minimice la latencia
media entre iniciaciones.
Se inicia por determinar la tabla de reserva y la lista de inicializaciones prohibidas F y libres F’. Son
inicializaciones prohibidas aquellas que generan colisiones. El procedimiento recomienda detectar filas
con varias marcas (X) y restar el ciclo menor Ti del mayor Tj, el resultado serán las latencias prohibidas.
Página 54
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
Las libres son las latencias no prohibidas o conjunto complemento de F. Para nuestro ejemplo, estas
son:
F = { 1, 5, 6, 8 }
F’ = { 2, 3, 4, 7 }
El siguiente paso consiste en determinar el vector de colisiones C. Este es un arreglo de bits que tiene
en Ci un 0 si la iniciación es libre y un 1 si es prohibida en el ciclo i ( 0 si i pertenece a F’ y 1 si pertenece
a F). La longitud del vector es n, donde n = máx { Fi } por tanto, Cn = 1 siempre es verdad. Formalmente:
C = (Cn . . . C1) donde Ci = 1  i  F  Ci = 0  i  F’
En nuestro caso: C = ( 10110001)
Nótese que la nomenclatura empleada no es la de un vector matemático sinó la de un registro binario.
Esto tiene su razón, en realidad la estrategia de control se implementa en un registro de desplazamiento
por la derecha. Al iniciar el cauce por primera vez, se carga el vector de colisiones en el registro y en
cada ciclo se desplaza un bit a la derecha, así sólo se inicia una nueva tarea en el ciclo k si la salida
serial del registro es 0. El registro se recarga con C cuando la latencia es n.
Para caracterizar la dinámica de las iniciaciones sucesivas en el cauce, se emplea un diagrama de estado
que tiene por estado inicial a C. Cada nuevo estado se forma con el despazamiento de k ciclos del estado
inicial aplicando un OR binario con C, para todo ciclo k que sea libre. El lazo de transición de estados
muestra cuántas latencias (desplazamientos) se requieren para llegar a ese estado. Cada estado nuevo
genera otros estados con todas sus iniciaciones libres hasta que regresan al estado inicial.
Para el ejemplo:
Partiendo del vector de colisiones o estado 1:
 Desplazamos 2 posiciones y enmascaramos con C mediante OR:
00101100
(OR) 1 0 1 1 0 0 0 1
10111101


 Estado 2 ( con latencia 2)
Obtuvimos el estado 2. De manera similar, desplazando 3 y 4 obtenemos los estados 3 y 4 .
Desplazando 7, se regresa al estado 1.
00010110
00001011
(OR)1 0 1 1 0 0 0 1
(OR) 1 0 1 1 0 0 0 1
1 0 1 1 0 1 1 1  Estado 3
1 0 1 1 1 0 1 1  Estado 4
( con latencia 2)
( con latencia 4)
Luego, tomamos el estado 2 y aplicamos desplazamiento 2 generando el estado 5. El
desplazamiento 7 retorna al estado 1:
00101111
(OR)1 0 1 1 0 0 0 1
1 0 1 1 1 1 1 1  Estado 5
(OR)
Página 55
00000001
10110001
1 0 1 1 0 0 0 1  Estado 1
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
( con latencia 2)
( con latencia 7)
De manera similar se generan los otros desplazamientos con los otros estados. Resultan 5 estados
solamente. La figura 2.6.7. muestra el Diagrama de estados concluído.
7+
1
10110001
7+
7+
3
4
7+
7+
2
3
2
10110111
3
10111101
4
2
4
10111011
5
10111111
Figura 2.14. Diagrama de estados
Los ciclos en el diagrama muestran las secuencias de latencias sostenibles de régimen permanente sin
colisiones. Se denomina ciclo simple a aquella trayectoria que no repite estado excepto el origen-destino.
La latencia media de un ciclo es la suma de las latencias entre la cantidad de ellas. La máxima
productividad se logra en una secuencia que involucre ciclos con la mínima latencia media mlm, el
número máximo de Xs en una línea es la cota inferior a la mlm. Un ciclo simple es avaricioso si cada
latencia en el ciclo es la mínima de cada estado que pasa (verificar arcos salientes) y su latencia media
es menor o igual al número de prohibidas y mayor o igual a la mlm. Una buena estrategia de control
involucra ciclos avariciosos. Abajo se resumen los resultados para nuestro ejemplo:
Ciclo simple
(7)
( 3, 7 )
( 3, 4 )
( 4, 3, 7 )
( 4, 7 )
( 2, 7 )
( 2, 2, 7 )
( 3, 4, 7 )
Latencia media
7
5
3.5
4.6
5.5
4.5
3.6
4.6
Avaricioso
SI, tiene la mlm
3 ARQUITECTURAS SIMD
3.1
3.1.1
INTRODUCCIÓN
Necesidad de procesamiento de Vectores y matrices:
Página 56
SI
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
A finales de los 50 e inicios de los 60, se incrementó la demanda de procesamiento
automatizado para cálculos científicos. Estos requieren procesar vectores y matrices, a
menudo de gran tamaño.
Un gran inconveniente surgió con los modelos secuenciales de la época, pues las arquitecturas
y lenguajes de programación secuenciales tienen un desempeño muy pobre en este tipo de
operaciones que regularmente se simulan mediante ciclos, obteniendo tiempos de respuesta
prohibitivos para la mayoría de las aplicaciones requeridas.
Un ejemplo claro es la multiplicación de matrices que involucra tres ciclos anidados con lo
cual cada incremento de M o N multiplica los ciclos por dos factores, lo que nos resulta en un
algoritmo exponencial del orden O(n3).
t
n
FOR I = 1 TO N
FOR J=1 TO M
C [I, J] = 0.0
FOR K=1 TO L
C
[I,
C[I,J]+A[I,K]*B[K,J]
END FOR
END FOR
ENDFOR
J]
La necesidad, impulsó a los diseñadores de Computadoras a tratar de interpretar de mejor
manera el comportamiento de estas estructuras de datos. Para ello se consideró útil hacer un
análisis de las características del procesamiento de vectores / matrices y sus exigencias. El
resultado fue un conjunto de máquinas de alto coste, desempeño y una enorme capacidad de
cálculo (que varía de máquina a máquina) que asignaremos a la clasificación SIMD de la
taxonomía de Flynn (aunque algunos autores señalan que solo un espécimen de la familia: el
processor array es SIMD).
3.1.2
Características y exigencias del procesamiento de Vectores / Matrices
Características:
 Colección o arreglo de datos.
 Se almacenan en celdas contiguas en la memoria.
 Independencia de datos (operación en elemento[i, j] no depende de resultado en [i-1, j1]).
 Una misma operación sobre todo el conjunto de datos.
Exigencias:
 Diferentes tipos de operaciones
o f1: V  V (VSQRT, VCOMP –complemento, VSIN, VCOS )
o f2: V  E (VSUM –Sumatoria de elementos, VMAX, VMIN)
Página 57
=
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
o f3: V x V  V (VADD, VMP –Multiplicación de vectores o matrices)
o f4: V x E  V (SMUL – Escalación del vector, SADD –Desplazamiento)
o f5: V x V  E (SMP –Producto punto de vectores)
 Manejo de operandos vectoriales y escalares (Instrucciones de máquina vectoriales o
vectorización por compilador)
 Algoritmos idóneos
 Ejecución a alta velocidad
3.2
Tipos de Arquitecturas SIMD
3.2.1
Procesadores vectoriales o Vector Processors
 Las características y exigencias del procesamiento vectorial son propias para la ejecución
segmentada, básicamente porque se eliminan las dificultades de la segmentación (no riesgos
estructurales, de datos o control) permitiendo tener el cauce lleno y generando resultados a par
de elementos por ciclo.
 Obviamente surgen nuevas exigencias en cuanto al flujo de datos de entrada y la recepción de
salida.
 Los procesadores vectoriales son arquitecturas que tienen cauces para procesamiento de
vectores.
Página 58
Arquitectura de Máquinas Computadoras III
3.2.2
Paralelismo y Arquitecturas Avanzadas
Procesadores matriciales o Array Processors
Los procesadores vectoriales, requieren
diferentes esquemas de ejecución cuando procesan
matrices.
Un enfoque más acertado consiste en tener una red
o matriz de procesadores o unidades de ejecución
(EP) con registros y/o memoria local gobernados
por un procesador o unidad de control central.
Al ejecutar una instrucción, la unidad de control
emite a todos las mismas señales de control
(broadcast) sincrónicamente y los EPs ejecutan
todos la misma operación sobre sus datos locales.
3.3
Procesadores vectoriales Encauzados
(Vector Processors)
3.3.1
Cauces vectoriales







Cauces aritméticos.
Supercomputadores Vectoriales / Procesadores vectoriales Asociados
Entradas: Vector –Vector o Vector-Escalar.
Salida a Vector o Escalar.
Requieren registros especiales para control de la longitud del vector.
Formato especial de instrucción
Esquemas o métodos de procesamiento para tratamiento de matrices
o Procesamiento horizontal (filas: izq  der)
o Procesamiento vertical ( columnas: arriba  abajo)
o Procesamiento en bucle ( ciclos de sub-matrices )
 Tiempo de retardo de inicialización o preparación del cauce y de paso o flushing.
 Entrada de datos/Recepción de salida a alta velocidad.
o Desde Memoria (Requerido acceso rápido)
o Usar registros vectoriales
3.3.2
Maquinas M-M, Memorias entrelazadas y Procesamiento en flujo continuo
 Los operandos vectoriales residen siempre en memoria.
 Alto tiempo de preparación (típico ~20 cycles)
 Se requieren memorias de alta velocidad, ideal: entregar un par de datos y recibir un resultado
por ciclo.
 Uso de memorias entrelazadas. ( búsqueda + ráfaga = entrega datos por ciclo) 
Procesamiento en flujo continuo.
Página 59
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
 Alto
rendimiento para vectores grandes,
pobre para vectores pequeños.
 Formato requiere especificar direcciones en memoria de los vectores y en algunas máquinas
con palabras variables, el incremento o tamaño del elemento así como el tamaño del vector.
COP
3.3.3
V1
V2
Vr
Incr
Tam
Máquinas R-R y Encadenamiento de vectores.





Empleo banco de registros vectoriales. (además del escalar)
Carga de Memoria a registros de alta velocidad.
Menor tiempo de preparación y en general menor ciclo de máquina que la M-M.
Tamaño restringido de los registros vectoriales (64, 72, 128 elementos)
Ejecución en partes para vectores largos: Alto desempeño en vectores pequeños y pobre en
largos.
 Predominan sobre las M-M.
 Formatos de instrucción usan directamente registros vectoriales / escalares (Instrucciones de
carga) o direcciones de memoria y registros a emplear. Algunos ejemplos:
COP
COP
RV1
RV1
RV2
@V2
Incr
RVr
Tam
Tam
 Enmascaramiento y vectores binarios.
 Usualmente tienen múltiples Cauces vectoriales (Unidades funcionales) y Escalares.
Página 60
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas

CAUCE 1
UNIDAD DE
PROCESAMIENTO DE
INSTRUCCIONES
(IPU)
BANCO DE
REGISTROS
ESCALARES
CAUCE 2
CAUCE n
Procesador
Escalar
MEMORIA
PRINCIPAL
CONTROLADOR DE
INSTRUCCIONES
VECTORIALES
Procesador
Vectorial
CAUCE V1
BANCO DE
REGISTROS
VECTORIALES
CAUCE V2
CONTROLADOR DE
ACCESO VECTORIAL
CAUCE Vn
 Múltiples UF: Prefetch + Ejecución simultánea de varias instrucciones  Tratar potenciales
dependencias de datos (R-D)
 Encadenamiento de cauces: ejecución paralela de varias instrucciones con dependencia R-D.
3.4
Procesadores SIMD (Processor Arrays)
3.4.1






Procesadores de arreglos de EPs.
Arreglos de EPs.
Verdaderas máquinas SIMD.
Introducidas en los 70’s, auge en finales de los 80’s.
Requieren gran estructura de EPs para ser eficientes.
Tiempo de ejecución de la instrucción matricial fijo (vs te = n+p+fluss del Vector P. )
Estructuras de interconexión - Comunicación EPs, Memoria y E/S: Topología.
Página 61
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
 Memoria de alta velocidad para cargar las caches o registros de EPs.
3.4.2
Enmascaramiento, limitando la estructura.
 Los EPs pueden Habilitarse o deshabilitarse desde la UC.
 Esto permite limitar la estructura para ajustarse al tamaño de la matriz.
 Equivalente a control de tamaño de vector en VPs.
3.4.3
Importancia de VLSI en las Arquitecturas SIMD.
 VLSI permite integración de alta densidad
 Ejemplo: MasPar MP-1: Processor Board: 32 chips de 32 MP-1 con su 64Kb memoria y control
en 4 pies cuadrados. Se puede configurar en redes de n x n o de n x 2n. La mínima
configuración involucra 1,024 procesadores y la máxima 16,384.
3.5
3.5.1
Procesadores Sistólicos
Deficiencias de la taxonomía de Flynn.
Existen arquitecturas paralelas que no caben en la Taxonomía de Flynn. Paradójicamente,
mientras por un lado, existe vacuidad en una categorización, por otro hay ambigüedad en la
posible clasificación de algunas máquinas.
Algunos autores, apegados al sentido estricto de Instrucción, declaran vacía la clasificación
MISD, en tanto otros, que se basan en las operaciones que se aplican en el procesamiento del
data stream más que en la instrucción completa en sí, identifican a los cauces aritméticos
como arquitecturas de esta categoría. También los arreglos sistólicos que estudiaremos en
seguida son a menudo clasificados en este grupo.
Por otro lado, aunque algunos asumen que el VP es SIMD (punto de vista de la instrucción),
otros los clasifican como simples SISD por cuanto la operación se aplica de forma repetida al
conjunto de datos en diferentes instantes de tiempo.
Los MIMD están todos agrupados en una categoría única que reúne máquinas de muy
diferente potencia de cálculo, complejidad de diseño y coste.
Finalmente, se ha propuesto un estilo de computación sobre una arquitectura multiprocesador
que ejecute el mismo programa sobre diferentes conjuntos de datos y que los Procs. se
sincronicen peródicamente (Para tal estilo de computación se ha propuesto la categoría Single
Program Multiple Data)
Página 62
Arquitectura de Máquinas Computadoras III
3.5.2
Paralelismo y Arquitecturas Avanzadas
Arreglos sistólicos
 Concepto introducido por Kung y colegas (Carnegie-Mellon)
 Sistólico porque la memoria funciona como el corazón, inyectando datos al arreglo en
cada pulso de reloj
 Consigue mejoras de procesamiento sin necesidad de incrementar el ancho de banda
de la memoria
MEMORIA
MEMORIA
P
EP
Procesador convencional





EP
EP
EP
Matriz Sistólica
Cauce en formación matricial con múltiples flujos de datos.
Conjunto de celdas simples (Unas sola operación con entradas y Registro).
Control e interconexión simples (No Broadcasting)
Datos fluyen de forma encauzada, estructurada y son accesibles sólo en las fronteras.
Interconexión en matriz o árbol.
EP
EP
EP
EP
EP
EP
EP
EP
EP
EP
EP
EP
EP
Matriz Cuadrada
EP
EP
EP
EP
EP
EP
EP
EP
EP
EP
EP
EP
Matriz Hexagonal
Arbol sistólico
 Aritmética Matricial de alto nivel: Multiplicación, Inversión, Desc, L-U
 Fácil de expandir (VLSI simple)
 Desventaja: Limitado por la velocidad de E/S
Ejemplo de un Procesador sistólico (De Rafiquzzaman – Pág. 312).
X0
X
0
Y
Z=W*X+Y
W2
0
W1
0
W0
W
2
Fig 1: Celda EP del procesador
sistolico
1
Fig 2: Estructura de Interconexion del
Procesador sistolico
Página 63
0
Arquitectura de Máquinas Computadoras III
3.6
Paralelismo y Arquitecturas Avanzadas
Procesadores de Frente de Onda
3.6.1
Redes sincrónicas vs. redes asíncronas
 Los AP: Broadcasting síncrono. Requieren Memorias de alta velocidad.
 Matrices asíncronas: Proceder hasta que el dato esté disponible.  Esperar a memoria.
3.6.2
WaveFront Array Processor
 Celdas simples y comunicación simple
(similar al sistólico).
 Cuando hay datos válidos en las entradas, la
celda de dispara (computa) y expande el
resultado a las salidas.
 Recibe su nombre por analogía con los frentes
de onda ( sonido, perturbación en agua, etc)
3.7
B21
B22
B11
B12
A12
A11
0
0
A22
A21
0
0
Procesadores Asociativos
3.7.1
Procesadores Asociativos
 Procesadores paralelos basados en estructuras de datos asociativas (Memorias
asociativas, por lo general)
 Su nivel de paralelismo se mide en bit-{serie|paralelo},palabra-{serie|paralela}
 Aplican la misma instrucción sobre todos los datos cuya clave satisface los parámetros
o argumentos de búsqueda.
 En la actualidad estas arquitecturas han dado pie a nuevos paradigmas
computacionales con soporte de hardware para bases de datos y aplicaciones que
demandan procesamiento paralelo de conjuntos de datos.
3.7.2
Ejemplares
Primeros: PEPE (Burrogs Corp., 1972) y STARAN (Goodyear, 1972. Construído para la
Marina USA, orientado al procesamiento de objetos de radar). Posteriormente:
procesadores asociativos masivamente paralelos para apoyo en campos y aplicaciones
específicos tales como RDBMS (RAP, Neocore LCC) e Inteligencia Artificial (AM3,
IXM2).
Página 64
Arquitectura de Máquinas Computadoras III
3.8
Paralelismo y Arquitecturas Avanzadas
Estructuras y algoritmos para Procesadores Matriciales.
3.8.1
Estructuras de Interconexión – Comunicación EPs.
 Necesaria una estructura que interconecte todos los EPs.
 Decisiones de diseño:
o Modo de operación: Sincrónica – Asíncrona
o Estrategia de Control: Centralizado o Distribuido.
o Metodología de Comunicación: Conmutación de Circuitos o Conmutación de
Paquetes.
o Topología de Red: Estáticas – Dinámicas
3.8.2
Características de los Algoritmos matriciales.
 Complejos
 Reproducen el comportamiento natural de la estructura de dato
 Ganancia significativa sobre homólogo secuencial
Ejemplos:
o Multiplicación de matrices.
 Secuencial es O(n3)
 Con vectores: O(n2) Carga de vectores, barrer filas por columnas.
- Ganacia es n.
 Con SIMD con hipercubos: O(n log2 n)
- Ganacia poco más que n
 Con SIMD y Computación VLSI : O(n)
- Ganacia n2
o Clasificación O(n) vs. O( n log2 n) de los secuenciales.
o Transformada rápida de Fourier FFT, ganancia es M2/log2
Página 65
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
4 ARQUITECTURAS MIMD.
4.1. Introducción a los MIMD: Multiprocesadores
Un Sistema Multiprocesador puede definirse como una comunidad de procesadores en
la misma computadora que cooperan para completar una tarea.
Por otro lado, es necesario hacer notar que aunque un sistema común usa un IOP o una FPU
que son en sí procesadores, estos no se consideran Multiprocesador por cuanto cada uno de los
procesadores auxiliares tiene una sola tarea específica y no son capaces de ejecutar programas
del usuario.
Con los sistemas multiprocesadores:
 Puede hacerse múltiples trabajos en paralelo
 Puede dividirse un trabajo en múltiples tareas paralelas
Concepto: Sistema que consta de 2 o más CPU interconectadas para permitir la ejecución de
múltiples tareas en paralelo. (n instrucciones en n procesadores ejecutándose a la vez)
Nivel de Paralelismo o granularidad:
Cuatro niveles de paralelismo:
 Nivel de tareas (Job Level): Diferentes procesos son asignados a diferentes
procesadores. Incluso se pueden asignar hilos de ejecución de un mismo proceso a
diferentes procesadores. A este nivel se le denomina de Granularidad gruesa. En este
nivel el control de la asignación de los procesos o los hilos de ejecución es asumido por
el sistema operativo.
 Nivel de Programa (Program level): Cuando diferentes procesadores pueden ejecutar
diferentes secciones de un mismo programa en paralelo. Existen varias posibilidades:
Rutinas completas, tramos de instrucciones independientes y diferentes iteraciones de
un ciclo sobre datos independientes (como matrices, por ejemplo). Este nivel se
considera de Granularidad fina. Es importante notar que en este caso es frecuente tener
datos compartidos. La asignación paralela de los tramos de programa en este caso los
puede definir el compilador, el programador a bajo nivel y el sistema operativo. (En
algunos sistemas MP, el programador o el compilador pueden definir explícitamente
que una rutina, conjunto de instrucciones o cada simple instrucción se ejecute y en
diferentes procesadores, es más, se puede definir inclusive en qué procesador se desea
la ejecución de ésta. Este enfoque tan fino no siempre es ventajoso porque atenta contra
una de las bondades de los MP: redundancia que permite gracefull degradation)
 Nivel de instrucciones (Instruction Level): Este nivel es más intimo a la organización
del procesador y ocurre en el caso específico de los procesadores encauzados, donde la
Página 66
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
ejecución de varias instrucciones se efectúa en diferentes etapas del procesador de forma
solapada en el tiempo (Granularidad más fina).
 Nivel de Aritmética y bits. (Bit Level): En este nivel, el paralelismo se verifica a nivel
aritmético, es decir, tenemos varios procesadores trabajando en paralelo sobre diferentes
secciones de bits de los datos en sí (especie de SIMD a nivel de bits) Este tipo de
procesadores se compone de enlaces de varios bit-slice processors. (Nivel de más fina
granularidad)
Para el caso de los sistemas MP, son comunes los dos primeros niveles de paralelismo. La figura
a continuación ilustra el caso del primer nivel comparando un sistema monoprocesador y uno
MP con procesos:
P
P1
P2
P3
Pr
Pr
Pr
Pr
Pr
Pr
Pr
Pr
Sistema
Monoprocesador
4.1
Sistema
Multiprocesador
Clasificación de los sistemas MIMD.


Sistema Fuertemente Acoplado o de M Compartida (Reales MP según Bell).
Sistema Débilmente Acoplado, de Memoria distribuída o Multicomputadores (según
Bell).
La principal diferencia estriba en cómo se interconectan. Para que puedan compartir la
memoria, se requiere una estructura de interconexión fuertemente acoplada, como por ejemplo
un bus común. Otra principal diferencia es cómo intercambian información y cómo están
controlados o sincronizados.
- Los primeros son más fáciles de construir y pero presentan limitaciones respecto a la cantidad
de procesadores concurrentes: Problema del ancho de banda de los MP con memoria común:
 Implementar memoria local en los “processing environments” o cachés.
 Mencionar problemas de diseño con cachés MP: política de escritura (write through
vs write back) y coherencia.
4.2
Estructuras de Interconexión.
Exponer el concepto de Estructura de Interconexión.
Hacer referencia y remembranza de los requerimientos señalados en las SIMD.
Página 67
Arquitectura de Máquinas Computadoras III
4.2.1
Paralelismo y Arquitecturas Avanzadas
Bus común.
La manera más sencilla de interconectar varios CPUs con una Memoria común (que puede estar
formada por varios bancos a la vez)
es mediante un Bus común. Esto
permite tener algunos IOPs también.
P1
P2
P3
P4
El problema
grande de este
acercamiento es eque la memoria se
convierte en cuello de botella,
requiriendo gran ancho de banda en
el acceso a memoria o limitando la
cantidad máxima de contendientes
M1
M2
IOP
IOP
por el bus. Una medida paliativa
muy eficaz consiste en definir una
jerarquía de memoria de al menos
MIMD con Estructura de interconexión
dos niveles.
Muchos MP de
empleando Bus común
memoria compartida suelen emplear
pequeñas memorias locales además
de uno o dos niveles de cache.
El uso de una memoria compartida de gran tamaño, organizada en bancos o módulos, también
puede aprovecharse para “paralelizar” el acceso a la memoria mediante entrelazamiento,
permitiendo un acceso “encauzado” a la memoria. Otra solución a la necesidad de ancho de
banda consiste en el ensanchamiento del ancho del bus de datos para permitir mayor velocidad
de transferencia hacia las cachés. También puede crearse puertos a cada banco con lo cual
podría accederse en paralelo a diferentes módulos de la misma Memoria principal o mejor aún,
múltiples accesos al mismo módulo. En los siguiente párrafos veremos cómo se han
aprovechado estas posibilidades mediante nuevas estructuras de interconexión.
Página 68
Arquitectura de Máquinas Computadoras III
4.2.2
Paralelismo y Arquitecturas Avanzadas
Conmutador Barra-Cruz.
Otra manera de interconectar los CPUs con la memoria, si ésta es modular, consiste en
emplear una estructura de interconexión en forma de una malla de conmutación de circuitos.
La figura muestra un conmutador barra-cruz típico.
Existen buses de conexión de cada
procesador a cada módulo de memoria. En las
intersecciones de las barras o buses, existen
conmutadores capaces de unir una barra
horizontal con una vertical creando un bus
particular entre el procesador y el módulo. En
cualquier instante cualquier procesador puede
adquirir acceso a un módulo que no esté
ocupado por otro procesador. En el caso que dos
procesadores deseen acceder al mismo módulo al mismo tiempo, éstos se bloquearán
mutuamente. En ese caso uno tendrá que reintentar luego. Para lograr este objetivo, se
implementan políticas de arbitraje que definen cual procesador tiene prioridad en caso de
bloqueo.
4.2.3
Memorias Multipuerto
Aunque el enfoque sencillo del
conmutador barra-cruz es muy simple y
relativamente de bajo costo, las políticas de
arbitraje pueden hacerlo complejo o ineficiente.
En arquitecturas más demandantes se
han diseñado memorias que permiten n accesos
concurrente, para lo cual están provistas de n
puertos de acceso. La figura muestra este
esquema de conexión. Estas memorias son muy
ventajosas en caso de pocos CPUs y casi
inviables cuando la cantidad de puertos
requeridos crece. De hecho, no son escalables,
es decir, que la cantidad de CPUs del MP está
limitada a los puertos disponibles en las
Memorias.
Como todo elemento que permite
interconexión completa, su costo es muy
elevado.
Página 69
M1
M2
P1
IOP
P2
IOP
P3
P4
MIMD con Estructura de interconexión
mediante Memorias Multipuerto
Arquitectura de Máquinas Computadoras III
4.2.4
Paralelismo y Arquitecturas Avanzadas
Redes Interconexión multietapa.
Las estructuras de interconexión anteriores son relativamente simples. Heredando de las
SIMD, algunos diseñadores de MPs han empleado redes de conmutadores para interconectar
CPUs y Módulos de memorias. Estas redes deben garantizar el acceso único a un módulo en
cualquier momento (arbitraje) para evitar race conditions y por tanto se diseñan como redes de
múltiples etapas. Los nodos de estas redes son dispositivos de conmutación denominados
conmutadores de intercambio. La figura a continuación muestra la estructura de un conmutador
de intercambio. Estos permiten en cualquier momento enrutar cualquiera de sus entradas a
cualquiera de sus salidas que no se encuentre ocupada. Otra vez, se debe definir la prioridad de
cada entrada. Se emplea un bus de control de 1 bit asociado a cada entrada, que indica la salida
a la que queremos conmutar.
0
1
La figura abajo muestra un tipo de red multietapa denominada red delta, por su forma
triangular. Otras redes más complejas permiten caminos alternativos a módulos que no han sido
ocupados. Por ejemplo la red omega. (Investigar la red omega). En cada red multietapa, existen
parámetros que se pueden calcular para poder definir de antemano: cantidad de Conmutadores,
etapas y enlaces necesarios, de acuerdo a la cantidad de CPUs y Módulos de Memoria.
4.2.5
Hipercubo.
Esta red se aplica mayormente a MPs de memoria distribuida y a algunos SIMD. Es una
red de conmutación de paquetes. En este caso, los nodos de la misma no son conmutadores sino
CPUs con su memoria local e inclusive I/O propia. El hipercubo es una red eficiente y escalable.
Presenta algunos retos al diseñador como la asignación de direcciones para los CPUs. Las
direcciones se asignan en forma de cadenas de bits. Un principio establece que dos nodos
contiguos solo diferencian su dirección uno del otro en 1 bit. Esto permite establecer algoritmos
de asignación de direcciones sencillos así como algoritmos de enrutamiento de paquetes o
mensajes. La figura abajo muestra la construcción escalable de hipercubos de 1 a 4 dimensiones.
Página 70
Arquitectura de Máquinas Computadoras III
4.3
Paralelismo y Arquitecturas Avanzadas
Acceso a recursos compartidos
En los MPs ce memoria compartida, existen obviamente, problemas de concurrencia:
 Estructura de interconexión: Se emplean métodos de arbitraje.
 Acceso a regiones y estructuras de memoria compartidas: Es necesario sincronización
de regiones críticas: Acceso exclusivo de los recursos. Uso de gates, pinlocks y
semáforos.(ver exclusión mutua)
4.3.1
Arbitraje del bus
La Arquitectura de bus común es muy sencilla y de bajo costo. Requiere acceso exclusivo,
durante un período de tiempo, por tanto se requiere Arbitraje: lógica y controlador que
concede el bus a un dispositivo específico:
Arbitraje fijo: Arbitraje paralelo (Codificador/Decodificador de prioridades)
Arbitraje serial
(Cadena de margaritas)
Arbitrio dinámico: Estructura dinámica y/o algoritmo.

4.3.2
Otras estructuras de interconexión tienen sus propios esquemas (revisar barra-cruz, red
multietapa, etc)
Exclusión mutua
Concurrencia de ejecución  acceso a estructuras de datos y SO que son compartidas. Para
garantizar la coherencia  acceso debe ser mutuamente excluyente. Soporte por SO y Hw:
Página 71
Arquitectura de Máquinas Computadoras III



4.4
Paralelismo y Arquitecturas Avanzadas
Gate o puerta: Puerto de acceso a una estructura compartida.
Semáforo: Indicador de acceso.
Pinlock o seguro: Componente Hardware que garantiza TEST&SET atómico.
Comunicación entre Procesadores

Es necesario definir formas de comunicación y sincronización de Procesadores en un
sistema MP.

Uso de puertos de E/S

En un MP de memoria compartida, se puede emplear un área de memoria como
exchange de mensajes. Cada MP puede poner mensajes, procedimientos o solicitudes
a otros o chequear si tiene nuevas solicitudes o mensajes dirigidos a él, para esto se usa
polling de Bits de estado que indican el contenido del buzón, de forma periódica.

Una mejora consiste en el uso de Interrupciones entre procesadores.(por programa)

Uso de un bus alternativo al bus del sistema.
En MP débilmente acoplados, la comunicación mediante la red: E/S. Paso de Mensajes:
 Se enrutan mensajes.
 Importante, la eficiencia de la red.
4.5
Coherencia de cachés
En sistemas de bus común, el tráfico y el cuello de botella debido al mismo en el bus, se puede
aliviar significativamente con el uso de cachés. La concurrencia impone altos requisitos a estas
cachés. El principal de ellos es resolver el problema de la coherencia de caché.
Escenario: Varios procesadores ejecutan hilos de un código reentrante que comparte algunas
variables globales. Estas variables son accedidas y actualizadas por todos los procesadores.
Cada vez que un procesador actualice, los demás deben tener noción de ello, pues las copias
quedan incoherentes entre sí.
Existen varios métodos o protocolos de solución de este problema:
En el primero, se resuelve la situación evitando el problema. El algoritmo estático,
implementado por compilador, asigna el acceso para actualizar a un dato compartido a un solo
procesador en un momento dado, por lo cual, no ocurre el problema.
Página 72
Arquitectura de Máquinas Computadoras III
Paralelismo y Arquitecturas Avanzadas
En el segundo bloque se encuentran varios protocolos de “sondeo” o snoopy protocols, que
permiten a encuestar los estados de los procesadores antes de realizar la actualización.

Uso de un bit de bandera (dirty bit). Cada vez que un procesador va a actualizar su copia,
pone en 1 un bit e interrumpe a los otros para que no actualicen su copia hasta que el
concluya su trabajo, en cuyo caso aquellos sondean el bit periódicamente hasta que el
primero actualiza la M, y el resto refresca su copia. Este esquema se emplea con política
write through y genera bastante tráfico en el bus.

El segundo esquema, llamado MESI, permite tener perfecto control de los estados de
la caché mediante un diagrama de estados que se va generando dinámicamente en el
funcionamiento de la caché. Revisar en Stallings detalles.
4.6
Sistemas Operativos y lenguajes de programación MP
4.6.1
Sistemas operativos:
SO para MP debe estar específica y especialmente diseñado para administrar esa arquitectura.



Administrar la concurrencia
Manejar la exclusión mutua
asignación de recursos y tareas
Modelos de asignación de recursos (lo hace el SO)
Master-Slave
SO separados
SO Distribuido o flotante
Para garantizar graceful-degradation, un sistema de diagnósticos es imprescindible (muchas
veces es un procesador auxiliar). Esto se implementa tanto en el arranque como en tiempo de
ejecución.
4.6.2
Lenguajes:
Varias formas de explotar el paralelismo:



Dejarle el trabajo al OS.
Lenguajes y compiladores que permiten paralelización de los programas secuenciales.
Lenguajes y compiladores que permiten al usuario escribir código con instrucciones
paralelas.
Página 73
Descargar