Unidad I Paralelismo y Mejora Del Rendimiento

19

Click here to load reader

Transcript of Unidad I Paralelismo y Mejora Del Rendimiento

Page 1: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 1

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 su é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 afinamiento.

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 factores que influyen en el desempeño del equipo de cómputo e identificar cuál de estos es el determinante 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. Las magnitudes cuyas medidas se pueden considerar estándares para definir el desempeño se denominan métricas. En muchos casos, pueden existir diferentes medidas de interés que pueden usarse para determinar el rendimiento. A manera de ejemplo, veamos algunas medidas de rendimiento de ciertos aviones: Tabla 1.1. Cuadro comparativos 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

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

Page 2: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 2

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. Una métrica es un criterio para evaluar el desempeño de un sistema de cómputo de forma general, de manera que mediante el valor 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

Existe una cuarta clase de 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 que el sistema tarda en producir resultados. Esta métrica puede conducir a diferentes medidas de tiempo 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, etc. En la evaluación del rendimiento de la memoria, tenemos como métrica 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.

Page 3: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 3

La disponibilidad 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. 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.

Page 4: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 4

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, podemos decir que el Rendimiento (R) es el recíproco del tiempo de ejecución (t):

R = 1 t

Con esta medida, ya podemos comparar dos computadoras. Sean Rx el rendimiento de la primera y Ry el de la segunda, 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

Page 5: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 5

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 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

Page 6: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 6

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, 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

+−=−+=n

ttn

ttg

γγγγ )1(*)1(**

y:

nt

tA

mejoradog γ

γ +−==

)1(

1

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:

Page 7: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 7

Ag = 1 / 0.4 + (0.6/2) = 1/ 0.7 = 1.43 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

i

Ci

t1

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: 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:

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:

j

g

jj nct **

1∑

=

I

cCPI

I

ii∑

== 1

Page 8: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 8

f

NCPINCPIt

*** ==τ

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.

66 10*10* CPI

f

t

NMIPS ==

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 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.

Page 9: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 9

referenciaevaluando

referencialativos MIPS

t

tMIPS *Re =

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:

6

tan_

10*t

OMFLOPS teflopunto=

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 operaciones complejas se puede “normalizar” la diferencia de velocidades permitiendo comparar de manera más equitativa de dos máquinas.

610*

_*

t

relativopesoOMFLOPS ii

osnormalizad∑=

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.

Page 10: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 10

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.

Page 11: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 11

1.2 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

f (MHz) τ τ τ τ (ns) CPU

Desde 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 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

1.2.2 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, 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

Page 12: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 12

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 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 entrada-salida.

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.

Page 13: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 13

1.3 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 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.

Page 14: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 14

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. 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 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:

)1(** hthtt Mcg −+=

Registros

Caché

CPU

Caché

Externa

Memoria Principal

Unidades de almacenamiento secundario

Mayor Capacidad

Mayor V

elocidad de Acceso

Figura 1.1. Jerarquía de Memoria.

Page 15: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 15

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.

Figura 1.2. PC con jerarquización de buses de E/S.

1.4.1 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

CPU +

Cache L1Cache L2

Controlador

de vídeo

Controladores del sistema

(Chipset)

Controlador de Memoria y

Puente PCI

Memoria

Principal

Controlador IDE

Controlador de DMA

Puente PCI a ISA

SCSI LAN Slot

USBDD

DD

CD

DD

Dispositivos IDE

Slot SlotSuper

I/O

Disquete

Com 1

Com 2 Ratón PS/2

Teclado

LPT

Bus ISA

Bus PCI

Bus del Sistema"Bus" AGP

Page 16: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 16

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. En computación se ha evidenciado, desde sus inicios, una necesidad y tendencia hacia el paralelismo:

• 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.

1.5.1 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.

Page 17: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 17

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. 1.5.2.3 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.

Page 18: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 18

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.

Subsistema de Entrada

/ SalidaMemoria Central

Banco de

Registros

(24 x 32)

Pila de

Instrucciones

Marcador

Lógica

Decremento

Incremento

Suma Fija

División

Multiplic. 2

Multiplic. 1

Suma

Desplazamiento

Bifurcación

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 CDC-6600 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.

Page 19: Unidad I Paralelismo y Mejora Del Rendimiento

Arquitectura de Máquinas Computadoras III Paralelismo y Arquitecturas Avanzadas

Página 19

1.6 CLASIFICACIÓN DE LAS ARQUITECTURAS PARALELAS. 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.